Merge origin/main into vr/aim-ray

lan_pvp.rs: keep main's mace::Spared import, drop view_vector (aim() replaces it).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
hashtheboardandClaude Opus 5.5 committed 2026-10-29 08:58:22 +01:00
commit 70b51333d3
138 files changed
+18861 -227

No files matched your search

+76
View File
@@ -0,0 +1,76 @@
---
name: vanilla-parity
description: Fix a Horizon bug or gap so it behaves 1:1 like vanilla 26.3, starting from the port ledger (tools/port_ledger.py) instead of grepping. Use for any issue, Discord report or PR that makes Horizon match vanilla: "X doesn't work like in Java", a missing sound, particle, animation, mob behaviour, block rule, screen or packet.
---
# Vanilla parity with the port ledger
The port ledger pairs every vanilla method with the Rust fn that ports it (or says it is missing, or needs
no port) and lists where a port isn't wired like vanilla. Ask it first; grep only for what it can't answer.
Full reference: `docs/port-ledger.md`.
## 0. Have a fresh ledger
```sh
python3 tools/port_ledger.py build # ~20 s; again after pulling main
```
It needs the vanilla jar (the launcher's `versions/26.3/26.3.jar`, or `--jar`) and/or the lab's decompiled
sources (`python3 tools/lab.py decompile`, or `--sources DIR`). If `build` says it has no vanilla code, run
the lab first; don't guess vanilla from memory.
## 1. From the report to the code
```sh
python3 tools/port_ledger.py issue 3236 # a GitHub issue number
python3 tools/port_ledger.py issue "mooshroom stays red after lightning" # or the report's text
```
It ranks the vanilla classes the report names and lists, per class, its Rust home files, where each method is
ported, and the known gaps (`missing` rows from the verdict map, seam/client/drift gaps). Often the cause is
already written there ("Type is not saved"). Then drill in:
```sh
python3 tools/port_ledger.py where MushroomCow.readAdditionalSaveData # ports, callers, callees, gaps
python3 tools/port_ledger.py class MushroomCow # every method: where, or missing
python3 tools/port_ledger.py what crates/horizon-client/src/mobs/farm.rs:120 # which vanilla method a fn ports
```
A ledger answer is a lead, not a verdict: about 1 in 12 map rows is wrong. Read the vanilla method (path and
line are in the output) and the Rust fn before changing anything.
## 2. Port it the vanilla way
- Translate the vanilla method, don't reinvent it: same order of operations, same constants, the same random
draws in the same order (`horizon_core::random`), Java `Math` through `horizon_core::jmath`.
- Open the fn's doc with the vanilla method it ports: `` /// `MushroomCow.readAdditionalSaveData`: ... ``.
That one line is what makes the next agent find it.
- Fix the path players run: single player is a client of the integrated server, so server logic lives in
`game/lan*.rs` and `src/lan/`, and what only the client's copy shows (particles, local sounds, hand
animation) must be reached from `game/remote*.rs`. A fix on the old in-frame path alone fixes nothing.
- Look at the neighbours the ledger lists for the same class: a `client` or `seam` gap next to your fix is
usually the same bug on the other path.
## 3. Before the PR
```sh
python3 tools/port_ledger.py check --base origin/main
```
It lists the ports your branch touches with their open gaps, citations to add, stale citations, and (against
the base) the gaps the branch closes and opens. Close what belongs to your fix, cite what you ported, leave
no new stale citation. If you ported a method the verdict map called `missing`, change its row in
`tools/port_map/*.tsv` to `port` with the fn (`file.rs::Owner::fn`) and run
`python3 tools/port_ledger.py map-check tools/port_map/<file>.tsv`.
Then the usual: the harness for the area (`docs/architecture.md`), `cargo check`/tests per `AGENTS.md`, and
a small PR that says which vanilla method it now matches.
## Finding work
```sh
python3 tools/port_ledger.py gaps --kind seam # ported on two paths, wired on one: the best leads
python3 tools/port_ledger.py gaps --kind client # client-only effects the server path never reaches
python3 tools/port_ledger.py gaps --kind drift # a port missing a sound, particle, item or constant
rg -n "player:" tools/port_map/*.tsv # missing behaviour a player would see
```
+3
View File
@@ -100,6 +100,9 @@ python3 tools/agent_control_e2e.py # horizon-ctl / MCP end to end
## Vanilla reference
- Start parity work from the port ledger, not grep: `python3 tools/port_ledger.py issue N` (or `where
Class.method`, `what file:line`), and `check --base origin/main` before the PR. How:
[.claude/skills/vanilla-parity/SKILL.md](.claude/skills/vanilla-parity/SKILL.md), [docs/port-ledger.md](docs/port-ledger.md).
- Decompiled sources: `.local/minecraft/26.3/sources/{client,server}/` (`python3 tools/lab.py decompile`).
- Bytecode queries (callers through lambdas, every overload):
`python3 tools/rea_vanilla.py method net.minecraft.world.level.block.DispenserBlock dispenseFrom`
+30 -1
View File
@@ -40,6 +40,10 @@ static BIDIRECTIONAL: AtomicBool = AtomicBool::new(false);
/// A source of resource files: the prepared root plus packs, highest priority last.
pub trait ResourceSource {
fn read(&self, path: &str) -> Option<Vec<u8>>;
/// Whether `path` is there, without reading it where the source can tell.
fn exists(&self, path: &str) -> bool {
self.read(path).is_some()
}
/// The namespaces under `assets/` (resource packs may add their own).
fn namespaces(&self) -> Vec<String> {
vec!["minecraft".into()]
@@ -68,6 +72,9 @@ impl ResourceSource for std::path::PathBuf {
fn read(&self, path: &str) -> Option<Vec<u8>> {
std::fs::read(self.join(path)).ok()
}
fn exists(&self, path: &str) -> bool {
self.join(path).is_file()
}
fn namespaces(&self) -> Vec<String> {
std::fs::read_dir(self.join("assets"))
.into_iter()
@@ -190,7 +197,7 @@ pub fn available(sources: &[&dyn ResourceSource]) -> Vec<LanguageInfo> {
for (code, info) in value["language"].as_object().into_iter().flatten() {
// Only languages whose file exists somewhere are selectable.
let file = format!("assets/minecraft/lang/{code}.json");
if code != DEFAULT && !sources.iter().any(|s| s.read(&file).is_some()) {
if code != DEFAULT && !sources.iter().any(|s| s.exists(&file)) {
continue;
}
found.insert(
@@ -284,4 +291,26 @@ mod tests {
);
assert_eq!(langs[1].label(), "Français (France)");
}
#[test]
fn languages_are_listed_without_reading_their_files() {
struct NoLangReads;
impl ResourceSource for NoLangReads {
fn read(&self, path: &str) -> Option<Vec<u8>> {
assert!(!path.contains("/lang/"), "read {path}");
(path == "assets/pack.mcmeta").then(|| {
br#"{"language":{"fr_fr":{"name":"French"},"de_de":{"name":"German"}}}"#
.to_vec()
})
}
fn exists(&self, path: &str) -> bool {
path == "assets/minecraft/lang/fr_fr.json"
}
}
let langs = available(&[&NoLangReads]);
assert_eq!(
langs.iter().map(|l| l.code.as_str()).collect::<Vec<_>>(),
["en_us", "fr_fr"]
);
}
}
+2 -1
View File
@@ -196,7 +196,7 @@ impl Assets {
impl RenderAssets {
pub fn load(root: &Path, assets: &Assets) -> Result<Self> {
let registry = assets.registry;
let mut sprites = crate::sprites::Sprites::default();
let mut sprites = crate::sprites::Sprites::with_disk_cache(root);
for name in MATERIALS {
sprites.insert(root, &format!("minecraft:block/{name}"))?;
}
@@ -217,6 +217,7 @@ impl RenderAssets {
for stage in 0..10 {
sprites.insert(root, &format!("minecraft:block/destroy_stage_{stage}"))?;
}
sprites.save_disk_cache();
sprites.finish();
// `finish` grows the buffer by doubling: keep only the bytes in use.
sprites.pixels.shrink_to_fit();
@@ -187,7 +187,14 @@ pub fn list_textures(root: &Path) -> Vec<String> {
};
for e in entries.flatten() {
let p = e.path();
if p.is_dir() {
// `file_type` comes with the listing; `Path::is_dir` is a stat per
// entry, kept for links (which it follows).
let dir = match e.file_type() {
Ok(t) if t.is_symlink() => p.is_dir(),
Ok(t) => t.is_dir(),
Err(_) => p.is_dir(),
};
if dir {
stack.push(p);
} else if p.extension().is_some_and(|x| x == "png")
&& let Ok(rel) = p.strip_prefix(&base)
+1
View File
@@ -70,6 +70,7 @@ pub mod skins;
pub mod sound_engine;
pub mod sound_events;
pub mod spans;
mod sprite_cache;
pub mod sprites;
pub mod streaming;
pub mod tab_list;
@@ -0,0 +1,345 @@
//! Decoded block sprites kept on disk between launches (M-11): reading and
//! decoding ~1300 small PNGs is most of `Sprites::load`. One file per resource
//! root, valid only while the `textures` trees still have the same paths,
//! sizes and modification times and the format version is the same; anything
//! else (missing, corrupt, stale, unwritable) means the normal decoding path.
use crate::mipmap::Strategy;
use std::{
collections::HashMap,
fs,
hash::{DefaultHasher, Hash, Hasher},
path::{Path, PathBuf},
};
const MAGIC: &[u8; 4] = b"HSPR";
/// Bump when `Decoded` or the decoding in `Sprites::decode` changes.
const VERSION: u32 = 1;
const FILE: &str = "horizon-sprites.cache";
/// What decoding one texture gives, before it takes a layer.
#[derive(Clone)]
pub(crate) struct Decoded {
pub side: u32,
pub frames: Vec<Vec<u8>>,
/// The `.mcmeta` `animation` value, as text.
pub animation: Option<String>,
pub strategy: Strategy,
pub alpha_cutoff_bias: f32,
pub has_transparent: bool,
pub opaque: bool,
pub translucent: bool,
}
pub(crate) struct SpriteCache {
path: PathBuf,
fingerprint: u64,
entries: HashMap<String, Decoded>,
dirty: bool,
}
/// Paths, sizes and modification times of every file under `assets/*/textures`,
/// summed so the directory order does not matter.
fn fingerprint(root: &Path) -> Option<u64> {
fn walk(dir: &Path, base: &Path, sum: &mut u64) -> Option<()> {
for entry in fs::read_dir(dir).ok()? {
let entry = entry.ok()?;
let meta = entry.metadata().ok()?;
if meta.is_dir() {
walk(&entry.path(), base, sum)?;
continue;
}
let mut hasher = DefaultHasher::new();
entry.path().strip_prefix(base).ok()?.hash(&mut hasher);
meta.len().hash(&mut hasher);
meta.modified().ok()?.hash(&mut hasher);
*sum = sum.wrapping_add(hasher.finish());
}
Some(())
}
let mut sum = 0;
for namespace in fs::read_dir(root.join("assets")).ok()? {
let textures = namespace.ok()?.path().join("textures");
if textures.is_dir() {
walk(&textures, root, &mut sum)?;
}
}
Some(sum)
}
impl SpriteCache {
/// The cache of `root`: its stored entries when still valid, else empty.
/// `None` when the textures cannot be fingerprinted (no caching then).
pub fn open(root: &Path) -> Option<Self> {
let fingerprint = fingerprint(root)?;
let path = root.join(FILE);
let entries = fs::read(&path)
.ok()
.and_then(|bytes| parse(&bytes, fingerprint))
.unwrap_or_default();
Some(Self {
path,
fingerprint,
entries,
dirty: false,
})
}
pub fn get(&self, name: &str) -> Option<&Decoded> {
self.entries.get(name)
}
pub fn insert(&mut self, name: &str, decoded: Decoded) {
self.entries.insert(name.to_owned(), decoded);
self.dirty = true;
}
/// Write new entries; a failure only costs the next launch the decoding.
pub fn save(&mut self) {
if !self.dirty {
return;
}
self.dirty = false;
let temporary = self
.path
.with_extension(format!("{}.tmp", std::process::id()));
if fs::write(&temporary, serialize(self.fingerprint, &self.entries)).is_ok()
&& fs::rename(&temporary, &self.path).is_err()
{
let _ = fs::remove_file(&temporary);
}
}
}
fn serialize(fingerprint: u64, entries: &HashMap<String, Decoded>) -> Vec<u8> {
let mut out = Vec::new();
out.extend_from_slice(MAGIC);
out.extend_from_slice(&VERSION.to_le_bytes());
out.extend_from_slice(&fingerprint.to_le_bytes());
out.extend_from_slice(&(entries.len() as u32).to_le_bytes());
for (name, d) in entries {
put_bytes(&mut out, name.as_bytes());
out.extend_from_slice(&d.side.to_le_bytes());
out.extend_from_slice(&(d.frames.len() as u32).to_le_bytes());
for frame in &d.frames {
put_bytes(&mut out, frame);
}
put_bytes(&mut out, d.animation.as_deref().unwrap_or("").as_bytes());
out.push(u8::from(d.animation.is_some()));
out.push(d.strategy as u8);
out.extend_from_slice(&d.alpha_cutoff_bias.to_bits().to_le_bytes());
out.push(
u8::from(d.has_transparent) | u8::from(d.opaque) << 1 | u8::from(d.translucent) << 2,
);
}
out
}
fn put_bytes(out: &mut Vec<u8>, bytes: &[u8]) {
out.extend_from_slice(&(bytes.len() as u32).to_le_bytes());
out.extend_from_slice(bytes);
}
struct Reader<'a>(&'a [u8]);
impl<'a> Reader<'a> {
fn take(&mut self, n: usize) -> Option<&'a [u8]> {
let (head, tail) = self.0.split_at_checked(n)?;
self.0 = tail;
Some(head)
}
fn u32(&mut self) -> Option<u32> {
Some(u32::from_le_bytes(self.take(4)?.try_into().ok()?))
}
fn bytes(&mut self) -> Option<&'a [u8]> {
let n = self.u32()? as usize;
self.take(n)
}
}
fn parse(bytes: &[u8], fingerprint: u64) -> Option<HashMap<String, Decoded>> {
let mut r = Reader(bytes);
if r.take(4)? != MAGIC || r.u32()? != VERSION {
return None;
}
if u64::from_le_bytes(r.take(8)?.try_into().ok()?) != fingerprint {
return None;
}
let count = r.u32()?;
let mut entries = HashMap::new();
for _ in 0..count {
let name = String::from_utf8(r.bytes()?.to_vec()).ok()?;
let side = r.u32()?;
let frame_count = r.u32()?;
let mut frames = Vec::new();
for _ in 0..frame_count {
frames.push(r.bytes()?.to_vec());
}
let animation = String::from_utf8(r.bytes()?.to_vec()).ok()?;
let has_animation = r.take(1)?[0] != 0;
let strategy = match r.take(1)?[0] {
0 => Strategy::Auto,
1 => Strategy::Mean,
2 => Strategy::Cutout,
3 => Strategy::StrictCutout,
4 => Strategy::DarkCutout,
_ => return None,
};
let alpha_cutoff_bias = f32::from_bits(r.u32()?);
let flags = r.take(1)?[0];
let frame_len = (side as usize).checked_mul(side as usize)?.checked_mul(4)?;
if frames.is_empty() || frames.iter().any(|f| f.len() != frame_len) {
return None;
}
entries.insert(
name,
Decoded {
side,
frames,
animation: has_animation.then_some(animation),
strategy,
alpha_cutoff_bias,
has_transparent: flags & 1 != 0,
opaque: flags & 2 != 0,
translucent: flags & 4 != 0,
},
);
}
r.0.is_empty().then_some(entries)
}
#[cfg(test)]
mod tests {
use super::*;
fn sample(blue: u8, animation: Option<&str>) -> Decoded {
Decoded {
side: 2,
frames: vec![vec![blue; 16], vec![blue + 1; 16]],
animation: animation.map(str::to_owned),
strategy: Strategy::Cutout,
alpha_cutoff_bias: 0.25,
has_transparent: true,
opaque: false,
translucent: true,
}
}
fn scratch(tag: &str) -> PathBuf {
let dir =
std::env::temp_dir().join(format!("horizon-sprite-cache-{tag}-{}", std::process::id()));
let _ = fs::remove_dir_all(&dir);
fs::create_dir_all(dir.join("assets/minecraft/textures/block")).unwrap();
dir
}
#[test]
fn round_trips() {
let mut entries = HashMap::new();
entries.insert("a:b".to_owned(), sample(1, Some("{\"frametime\":2}")));
entries.insert("a:c".to_owned(), sample(9, None));
let back = parse(&serialize(7, &entries), 7).unwrap();
for (name, d) in &entries {
let e = &back[name];
assert_eq!(
(d.side, &d.frames, &d.animation),
(e.side, &e.frames, &e.animation)
);
assert_eq!(d.alpha_cutoff_bias, e.alpha_cutoff_bias);
assert_eq!(
(d.has_transparent, d.opaque, d.translucent, d.strategy as u8),
(e.has_transparent, e.opaque, e.translucent, e.strategy as u8)
);
}
}
#[test]
fn wrong_fingerprint_truncation_and_garbage_are_misses() {
let mut entries = HashMap::new();
entries.insert("a:b".to_owned(), sample(1, None));
let bytes = serialize(7, &entries);
assert!(parse(&bytes, 8).is_none());
for cut in 0..bytes.len() {
assert!(parse(&bytes[..cut], 7).is_none(), "cut {cut}");
}
assert!(parse(b"garbage", 7).is_none());
let mut extra = bytes.clone();
extra.push(0);
assert!(parse(&extra, 7).is_none());
}
#[test]
fn changed_texture_invalidates_and_corrupt_file_is_ignored() {
let root = scratch("invalidate");
let png = root.join("assets/minecraft/textures/block/x.png");
fs::write(&png, b"one").unwrap();
let mut cache = SpriteCache::open(&root).unwrap();
cache.insert("minecraft:block/x", sample(1, None));
cache.save();
assert!(
SpriteCache::open(&root)
.unwrap()
.get("minecraft:block/x")
.is_some()
);
// Same length, new content and time: still stale.
std::thread::sleep(std::time::Duration::from_millis(30));
fs::write(&png, b"two").unwrap();
assert!(
SpriteCache::open(&root)
.unwrap()
.get("minecraft:block/x")
.is_none()
);
// A new file also invalidates.
let mut cache = SpriteCache::open(&root).unwrap();
cache.insert("minecraft:block/x", sample(1, None));
cache.save();
fs::write(root.join("assets/minecraft/textures/block/y.png"), b"y").unwrap();
assert!(
SpriteCache::open(&root)
.unwrap()
.get("minecraft:block/x")
.is_none()
);
// Corrupt cache file: empty, no error.
fs::write(root.join(FILE), b"HSPR junk").unwrap();
assert!(
SpriteCache::open(&root)
.unwrap()
.get("minecraft:block/x")
.is_none()
);
let _ = fs::remove_dir_all(&root);
}
fn write_png(path: &Path, rgba: [u8; 4]) {
let mut encoder = png::Encoder::new(fs::File::create(path).unwrap(), 16, 16);
encoder.set_color(png::ColorType::Rgba);
encoder.set_depth(png::BitDepth::Eight);
let pixels: Vec<u8> = rgba.iter().copied().cycle().take(16 * 16 * 4).collect();
encoder
.write_header()
.unwrap()
.write_image_data(&pixels)
.unwrap();
}
fn sprite_pixels(root: &Path) -> Vec<u8> {
let mut sprites = crate::sprites::Sprites::with_disk_cache(root);
sprites.insert(root, "minecraft:block/x").unwrap();
sprites.save_disk_cache();
sprites.finish();
sprites.pixels
}
#[test]
fn altered_png_is_not_served_stale_and_cache_matches_decoding() {
let root = scratch("stale");
let png = root.join("assets/minecraft/textures/block/x.png");
write_png(&png, [255, 0, 0, 255]);
let decoded = sprite_pixels(&root);
assert!(root.join(FILE).exists());
assert_eq!(
sprite_pixels(&root),
decoded,
"cache hit differs from decoding"
);
std::thread::sleep(std::time::Duration::from_millis(30));
write_png(&png, [0, 255, 0, 255]);
let fresh = sprite_pixels(&root);
assert_eq!(&fresh[..4], &[0, 255, 0, 255]);
// Corrupt and deleted caches fall back to decoding.
fs::write(root.join(FILE), b"HSPR\x01\0\0\0 junk").unwrap();
assert_eq!(sprite_pixels(&root), fresh);
fs::remove_file(root.join(FILE)).unwrap();
assert_eq!(sprite_pixels(&root), fresh);
let _ = fs::remove_dir_all(&root);
}
}
+74 -13
View File
@@ -89,6 +89,8 @@ pub struct Sprites {
/// textures under their own names, and one layer serves them all (the
/// GPU's array may hold as few as 2048).
still: std::collections::HashMap<(Vec<u8>, u32, [u32; 2], [bool; 4]), u32>,
/// Decoded textures kept on disk between launches ([`Sprites::with_disk_cache`]).
disk: Option<crate::sprite_cache::SpriteCache>,
}
/// Edge length of vanilla's block textures: the smallest array layer.
pub const SPRITE_SIZE: u32 = 16;
@@ -111,6 +113,20 @@ pub(crate) fn resample(frame: &[u8], from: u32, to: u32) -> Vec<u8> {
out
}
impl Sprites {
/// Sprites that reuse textures decoded by an earlier launch, kept in a
/// cache file in `root`.
pub fn with_disk_cache(root: &Path) -> Self {
Self {
disk: crate::sprite_cache::SpriteCache::open(root),
..Self::default()
}
}
/// Write what this run decoded to the cache file.
pub fn save_disk_cache(&mut self) {
if let Some(disk) = &mut self.disk {
disk.save();
}
}
/// How many array layers the textures take.
pub fn count(&self) -> usize {
self.native.len()
@@ -201,6 +217,21 @@ impl Sprites {
}
}
fn load(&mut self, root: &Path, name: &str) -> Result<u32> {
let cached = self.disk.as_ref().and_then(|d| d.get(name)).cloned();
let decoded = match cached {
Some(decoded) => decoded,
None => {
let decoded = Self::decode(root, name)?;
if let Some(disk) = &mut self.disk {
disk.insert(name, decoded.clone());
}
decoded
}
};
self.register(name, decoded)
}
/// Read and decode one texture and its `.mcmeta`.
fn decode(root: &Path, name: &str) -> Result<crate::sprite_cache::Decoded> {
let (namespace, path) = name.split_once(':').ok_or("invalid sprite identifier")?;
let path = root.join(format!("assets/{namespace}/textures/{path}.png"));
let metadata = match fs::read_to_string(path.with_extension("png.mcmeta")) {
@@ -210,10 +241,13 @@ impl Sprites {
Err(error) if error.kind() == std::io::ErrorKind::NotFound => None,
Err(error) => return Err(error.into()),
};
let animation = metadata
let animation_text = metadata
.as_ref()
.and_then(|v| v.get("animation"))
.map(|v| AnimationMetadata::from_json(v.get()))
.map(|v| v.get().to_owned());
let animation = animation_text
.as_deref()
.map(AnimationMetadata::from_json)
.transpose()?;
let mut decoder = png::Decoder::new(BufReader::new(File::open(path)?));
decoder.set_transformations(png::Transformations::EXPAND | png::Transformations::STRIP_16);
@@ -247,7 +281,6 @@ impl Sprites {
};
pixels.extend(rgba);
}
let layer = u32::try_from(self.native.len())?;
let columns = info.width / width;
let count = columns * (info.height / height);
// Layers are square; a frame of another shape is nearest-resampled to
@@ -268,28 +301,56 @@ impl Sprites {
}
frames.push(frame);
}
let settings = crate::mipmap::Settings {
native_size: side,
strategy: texture_section(metadata.as_ref())
let texture = texture_section(metadata.as_ref());
Ok(crate::sprite_cache::Decoded {
side,
frames,
animation: animation_text,
strategy: texture
.as_ref()
.and_then(|t| t["mipmap_strategy"].as_str())
.and_then(crate::mipmap::Strategy::parse)
.unwrap_or_default(),
alpha_cutoff_bias: texture_section(metadata.as_ref())
alpha_cutoff_bias: texture
.as_ref()
.and_then(|t| t["alpha_cutoff_bias"].as_f64())
.unwrap_or(0.0) as f32,
has_transparent: pixels.as_chunks::<4>().0.iter().any(|p| p[3] == 0),
opaque: pixels.as_chunks::<4>().0.iter().all(|p| p[3] == 255),
translucent: pixels
.as_chunks::<4>()
.0
.iter()
.any(|p| p[3] != 0 && p[3] != 255),
})
}
/// Give a decoded texture its layer (or the one an identical still has).
fn register(&mut self, name: &str, decoded: crate::sprite_cache::Decoded) -> Result<u32> {
let crate::sprite_cache::Decoded {
side,
frames,
animation: animation_text,
strategy,
alpha_cutoff_bias,
has_transparent,
opaque,
translucent,
} = decoded;
let animation = animation_text
.as_deref()
.map(AnimationMetadata::from_json)
.transpose()?;
let count = frames.len() as u32;
let layer = u32::try_from(self.native.len())?;
let settings = crate::mipmap::Settings {
native_size: side,
strategy,
alpha_cutoff_bias,
has_transparent,
item: name
.split_once(':')
.is_some_and(|(_, p)| p.starts_with("item/")),
};
let opaque = pixels.as_chunks::<4>().0.iter().all(|p| p[3] == 255);
let translucent = pixels
.as_chunks::<4>()
.0
.iter()
.any(|p| p[3] != 0 && p[3] != 255);
let still = (animation.is_none() && frames.len() == 1).then(|| {
(
frames[0].clone(),
@@ -0,0 +1,58 @@
//! M-11 gate: block assets loaded through the sprite disk cache are byte-identical
//! to the ones decoded from the PNGs. Deletes the cache file in ROOT, loads (decodes
//! and writes it), loads again (reads it) and compares the sprite arrays.
//! cargo run --profile fast -p horizon-client --example sprite_cache_parity -- ROOT
use horizon_client::assets::{Assets, RenderAssets};
use std::{
hash::{DefaultHasher, Hash, Hasher},
path::Path,
time::Instant,
};
fn digest(render: &RenderAssets) -> u64 {
let mut h = DefaultHasher::new();
render.pixels.hash(&mut h);
(
render.sprite_size,
render.sprite_minimum_size,
render.texture_layers,
)
.hash(&mut h);
render.sprite_layers.hash(&mut h);
render.translucent_layers.hash(&mut h);
format!("{:?}", render.sprite_mips).hash(&mut h);
for animation in &render.animations {
animation.layer.hash(&mut h);
for frame in 0..animation.frame_count() {
animation.pixels(frame).hash(&mut h);
}
for tick in 0..400 {
format!("{:?}", animation.blend(tick)).hash(&mut h);
}
}
h.finish()
}
fn main() -> horizon_client::Result<()> {
let root = std::env::args()
.nth(1)
.ok_or("usage: sprite_cache_parity ROOT")?;
let root = Path::new(&root);
let assets = Assets::load(root)?;
let _ = std::fs::remove_file(root.join("horizon-sprites.cache"));
let start = Instant::now();
let cold = digest(&assets.reload(root)?);
let cold_ms = start.elapsed().as_secs_f64() * 1000.;
let size = std::fs::metadata(root.join("horizon-sprites.cache"))?.len();
let start = Instant::now();
let warm = digest(&assets.reload(root)?);
let warm_ms = start.elapsed().as_secs_f64() * 1000.;
println!(
"cold={cold:016x} ({cold_ms:.1} ms) warm={warm:016x} ({warm_ms:.1} ms) cache_bytes={size}"
);
if cold != warm {
return Err("cached sprites differ from decoded sprites".into());
}
println!("PARITY OK");
Ok(())
}
+118 -119
View File
@@ -8586,7 +8586,11 @@ impl Game<'_> {
/// strength and whether it is a critical hit): the weapon and effects
/// scaled by the attack strength, a mace's smash, the critical hit, then
/// enchantments.
pub(super) fn melee_damage(&mut self, target_kind: &str) -> (f32, f32, bool, bool) {
pub(super) fn melee_damage(
&mut self,
target_kind: &str,
living: bool,
) -> (f32, f32, bool, bool) {
let hand_damage = 1.0 + self.attack_item_info().map_or(0.0, |i| i.attack_damage);
// Riptide's spin replaces the attack damage attribute.
let spin = self.player.as_ref().map_or(0.0, |p| p.auto_spin_attack_dmg);
@@ -8596,27 +8600,19 @@ impl Game<'_> {
hand_damage + self.effect_attack_bonus()
};
let scale = self.attack_strength_scale();
// getEnchantedDamage(target, damage, source) - damage, taken before the
// attack strength scales the base damage.
let enchant_bonus = self.enchanted_damage(target_kind, damage) - damage;
let mut amount = damage * (0.2 + scale * scale * 0.8);
// Item.getAttackDamageBonus (a mace's smash), before the critical hit.
amount += self.smash_damage_bonus(target_kind);
let player = self.player.as_ref();
// Player.canCriticalAttack: falling, off the ground, not in water,
// not blind (isMobilityRestricted), not riding, not sprinting.
let falling = player.is_some_and(|p| {
!p.ground.on_ground
&& p.fall_distance > 0.0
&& !p.fluids.was_touching_water
&& !p.sprinting
});
let restricted = self.potions.effects.get("blindness").is_some() || self.riding.is_some();
let crit = scale > 0.9 && falling && !restricted;
let crit = living && self.critical_attack(scale);
if crit {
amount *= 1.5;
}
// Enchantment damage (sharpness, smite, bane) scaled by the attack strength.
let magic_boost = self.enchant_damage_bonus(target_kind) * scale;
amount += magic_boost;
(amount, scale, crit, magic_boost > 0.0)
amount += enchant_bonus * scale;
(amount, scale, crit, enchant_bonus * scale > 0.0)
}
/// `Player.getAttackStrengthScale(0.5)`.
fn attack_strength_scale(&self) -> f32 {
@@ -8624,7 +8620,14 @@ impl Game<'_> {
((self.attack_ticks as f32 + 0.5) / delay).clamp(0.0, 1.0)
}
/// `Player.isSweepAttack`: a charged, grounded sword hit below the movement limit.
pub(super) fn sweep_attack_position(&self, scale: f32, crit: bool) -> Option<[f64; 3]> {
pub(super) fn sweep_attack_position(&mut self, scale: f32, crit: bool) -> Option<[f64; 3]> {
// Player.getSpeed: the movement speed attribute as it is now (the
// field is only refreshed by the local movement step, never for a
// server's player).
let p = self.player.as_mut()?;
if let Ok(speed) = p.attribute("minecraft:movement_speed") {
p.speed = speed as f32;
}
let p = self.player.as_ref()?;
let sword = self.held().is_some_and(|s| {
self.res
@@ -8636,120 +8639,116 @@ impl Game<'_> {
if !p.is_sweep_attack(scale, crit, sword) {
return None;
}
let yaw = f64::from(self.yaw.to_radians());
// Mth.sin / Mth.cos of yRot * (PI / 180), from its sine table.
use horizon_core::geometry::trig;
let yaw = f64::from(self.yaw * trig::DEG_TO_RAD);
Some([
p.position.x - yaw.sin(),
p.position.x - f64::from(trig::sin(yaw)),
p.position.y + f64::from(p.dimensions.height) * 0.5,
p.position.z + yaw.cos(),
p.position.z + f64::from(trig::cos(yaw)),
])
}
/// The visual and sound part of `Player.doSweepAttack` after a successful hit.
pub(super) fn sweep_attack(&mut self, at: [f64; 3], from: Option<[f64; 3]>) {
let sweep = horizon_client::particles::ParticleOptions::simple(
/// `Player.doSweepAttack` after a successful hit, in vanilla's order: the
/// sweep sound, the victims around `target` (its box, and the mob that
/// was hit, when there is one) and then the arc.
pub(super) fn sweep_attack(
&mut self,
at: [f64; 3],
from: Option<[f64; 3]>,
target: Option<(Aabb, mace::Spared)>,
scale: f32,
) {
self.audio
.play("minecraft:entity.player.attack.sweep", from, 1.0, 1.0);
if let Some((area, mob)) = target {
self.sweep_damage(area, mob, scale);
}
let arc = horizon_client::particles::ParticleOptions::simple(
horizon_client::particles::ParticleType::SweepAttack,
);
self.particles.add(&sweep, at, [0.0; 3]);
self.particles.add(&arc, at, [0.0; 3]);
// Player.sweepAttack's `sendParticles(SWEEP_ATTACK, ..., 0, dx, 0, dz, 0)`:
// the offset is the one from the player to the particle.
let origin = from.unwrap_or(at);
let spread = [at[0] - origin[0], 0.0, at[2] - origin[2]];
self.lan_send_particles(&sweep, at, spread, 0.0, 0);
self.audio
.play("minecraft:entity.player.attack.sweep", from, 1.0, 1.0);
}
/// What `Player.doSweepAttack` deals before the target's enchantment
/// bonus and the attack strength: `1 + sweeping_damage_ratio * baseDamage`.
pub(super) fn sweep_base_damage(&self, scale: f32) -> f32 {
// `baseDamage` of `Player.attack` before a critical hit (a sweep has
// none) and the enchantments: the attack damage attribute with the
// strength and weakness effects, scaled by the attack strength.
let hand_damage = 1.0 + self.attack_item_info().map_or(0.0, |i| i.attack_damage);
let base_damage = (hand_damage + self.effect_attack_bonus()) * (0.2 + scale * scale * 0.8);
// The enchantment's attribute modifier on the attribute's 0 to 1 range.
let ratio = self
.res
.stations()
.enchantments
.attribute_add(
self.inventory[self.selected].as_ref(),
"minecraft:sweeping_damage_ratio",
)
.clamp(0.0, 1.0) as f32;
1.0 + ratio * base_damage
}
/// The damage and knockback part of `Player.doSweepAttack` after a sweep
/// hit on the mob at `target`: every other living mob in its box grown by
/// (1, 0.25, 1) and closer than 3 blocks (`distanceToSqr < 9`, in creative
/// too), but the player's allies
/// (`isAlliedTo`), takes `1 + sweeping_damage_ratio * baseDamage` with the
/// weapon's enchantments, scaled by the attack strength, and is pushed 0.4
/// along the player's yaw.
pub(super) fn sweep_damage(&mut self, target: usize, scale: f32) {
let Some(p) = self.player.as_ref() else {
return;
};
let from = [p.position.x, p.position.y, p.position.z];
let sweep_damage = self.sweep_base_damage(scale);
let hit_box = self.mobs[target]
.bounds()
.inflate(horizon_core::geometry::Vec3::new(1.0, 0.25, 1.0));
let (uuid, allies) = (
self.level.player_uuid.or(Some([0, 0, 0, 1])),
self.player_allies(),
);
let nearby: Vec<usize> = self
.mobs
.iter()
.enumerate()
.filter(|(i, m)| {
*i != target
&& m.alive()
&& !m.removed
&& !allies.contains(&m.id)
&& !mace::ally_of_player(m, uuid)
&& m.bounds().intersects(hit_box)
&& m.position.distance_squared(p.position) < 9.0
})
.map(|(i, _)| i)
.collect();
let (xd, zd) = self.extra_knockback_direction();
for i in nearby {
let kind = self.mobs[i].kind.id.clone();
let kind = format!("minecraft:{}", kind.trim_start_matches("minecraft:"));
let damage = (sweep_damage + self.enchant_damage_bonus(&kind)) * scale;
let source = self.attack_source(from);
if self.hurt_by_player(i, damage, source) {
self.mobs[i].knockback(0.4, xd, zd);
self.last_hurt_by_player
.insert(self.mobs[i].id, self.lan_acting);
}
}
// `getEntitiesOfClass(LivingEntity.class)` takes the other players too.
let mut sweep = self.player_sweep(sweep_damage, scale);
sweep.hit_box = hit_box;
self.sweep_other_players(sweep);
self.lan_send_particles(&arc, at, spread, 0.0, 0);
}
/// `Player.attack`'s sounds when a vehicle takes the hit (it always does,
/// and can't be hit critically): knockback when sprinting at full
/// strength, then strong or weak. Before `swing_arm` resets the charge.
pub(super) fn vehicle_attack_sounds(&mut self) {
let full = self.attack_strength_scale() > 0.9;
/// strength, then strong or weak, or the sweep around the vehicle's
/// box `area`. Before `swing_arm` resets the charge.
pub(super) fn vehicle_attack_sounds(&mut self, area: Aabb, magic: Option<i32>) {
self.attack_effects(area, None, mace::Spared::Nothing, magic);
}
/// `Player.attack` after a target that is not a mob took the hit:
/// the sprint knockback sound, a living target's critical hit (`living`:
/// its entity id, which makes the hit critical when the player falls),
/// the sweep around the target's box `area` and the strong or weak sound.
pub(super) fn attack_effects(
&mut self,
area: Aabb,
living: Option<i32>,
spared: mace::Spared,
magic: Option<i32>,
) {
let scale = self.attack_strength_scale();
let full = scale > 0.9;
let player = self.player.as_ref();
let from = player.map(|p| [p.position.x, p.position.y, p.position.z]);
if full && player.is_some_and(|p| p.sprinting) {
self.audio
.play("minecraft:entity.player.attack.knockback", from, 1.0, 1.0);
}
let sound = if full {
"minecraft:entity.player.attack.strong"
} else {
"minecraft:entity.player.attack.weak"
};
if let Some(at) = self.sweep_attack_position(self.attack_strength_scale(), false) {
self.sweep_attack(at, from);
} else {
let crit = living.is_some() && self.critical_attack(scale);
let sweep = self.sweep_attack_position(scale, crit);
if let Some(at) = sweep {
self.sweep_attack(at, from, Some((area, spared)), scale);
}
if crit {
self.audio
.play("minecraft:entity.player.attack.crit", from, 1.0, 1.0);
if let Some(id) = living {
self.area_critical_hit(id, area, false);
}
} else if sweep.is_none() {
let sound = if full {
"minecraft:entity.player.attack.strong"
} else {
"minecraft:entity.player.attack.weak"
};
self.audio.play(sound, from, 1.0, 1.0);
}
// Player.magicCrit: the enchantments added damage.
if let Some(id) = magic {
self.area_critical_hit(id, area, true);
}
}
/// `critical_hit` around the box `area` of entity `id` (`magic`: the
/// enchanted hit instead of the crit).
fn area_critical_hit(&mut self, id: i32, area: Aabb, magic: bool) {
let (feet, size) = (area.bottom_center(), area.size());
self.critical_hit(
self.lan_acting,
id,
[feet.x, feet.y, feet.z],
size.x,
size.y,
magic,
);
}
/// `Player.canCriticalAttack` for a living target at attack strength
/// `scale`: falling, off the ground, not in water, not blind (mobility
/// restricted), not riding, not sprinting.
pub(super) fn critical_attack(&self, scale: f32) -> bool {
let player = self.player.as_ref();
let falling = player.is_some_and(|p| {
!p.ground.on_ground
&& p.fall_distance > 0.0
&& !p.fluids.was_touching_water
&& !p.sprinting
});
let restricted = self.potions.effects.get("blindness").is_some() || self.riding.is_some();
scale > 0.9 && falling && !restricted
}
/// Player.attack with the attack-strength charge, crits and knockback.
fn attack(&mut self) -> bool {
@@ -8775,16 +8774,11 @@ impl Game<'_> {
if self.attack_redirectable() {
return true;
}
let hand_damage = 1.0
+ self
.held()
.and_then(|h| self.res.items().get(&h.item))
.map_or(0.0, |i| i.attack_damage);
if self.attack_frame()
|| self.attack_armor_stand()
|| self.attack_cushion()
|| self.attack_boat(hand_damage)
|| self.attack_cart(hand_damage)
|| self.attack_boat()
|| self.attack_cart()
|| self.attack_dragon()
|| self.attack_guest()
{
@@ -8813,7 +8807,7 @@ impl Game<'_> {
pub(super) fn attack_mob(&mut self, index: usize) {
let target_kind = self.mobs[index].kind.id.clone();
let target_kind = format!("minecraft:{}", target_kind.trim_start_matches("minecraft:"));
let (amount, scale, crit, magic) = self.melee_damage(&target_kind);
let (amount, scale, crit, magic) = self.melee_damage(&target_kind, true);
let sweep = self.sweep_attack_position(scale, crit);
let (knockback, knockback_attack) = self.extra_knockback(&target_kind, scale);
self.attack_ticks = 0;
@@ -8925,8 +8919,11 @@ impl Game<'_> {
};
// Player.playServerSideSound: at the player.
if let Some(at) = sweep {
self.sweep_attack(at, from);
self.sweep_damage(index, scale);
let target = (
self.mobs[index].bounds(),
mace::Spared::Mob(self.mobs[index].id),
);
self.sweep_attack(at, from, Some(target), scale);
} else {
self.audio.play(sound, from, 1.0, 1.0);
}
@@ -9159,6 +9156,7 @@ impl Game<'_> {
self.rand_sequences = rand_sequences;
self.border = Default::default();
self.set_mode_id(level.mode());
self.previous_mode = level.previous_game_mode.map(game_mode::mode_from_id);
let mut inventory = vec![None; 36];
self.armor = [None, None, None, None];
self.offhand = None;
@@ -11541,6 +11539,7 @@ impl Game<'_> {
let level = &mut self.level;
level.creative = self.creative;
level.game_mode = mode;
level.previous_game_mode = self.previous_mode.map(game_mode::mode_id_of);
// PrimaryLevelData.setDifficulty: /difficulty and the options button change it.
level.difficulty =
horizon_client::title::DIFFICULTIES[usize::from(self.ui.difficulty) & 3].into();
@@ -510,6 +510,25 @@ impl Game<'_> {
if !self.before_block(d) || self.mob_hit().is_some_and(|m| m.1 < d) {
return false;
}
// The stand's box and id, before the hit may remove it.
let (area, id) = (self.armor_stands[i].bounds(), self.armor_stands[i].id);
let (_, _, _, magic) = self.melee_damage("minecraft:armor_stand", true);
let hurt = self.punch_armor_stand(i);
if hurt {
self.attack_effects(
area,
Some(id as i32),
super::mace::Spared::Stand(id),
magic.then_some(id as i32),
);
self.swing_arm();
}
hurt
}
/// `ArmorStand.hurtServer` for a player's attack (also a sweep's): a
/// creative player breaks it, otherwise the first hit wobbles it and a
/// second within five ticks breaks it.
pub(super) fn punch_armor_stand(&mut self, i: usize) -> bool {
let time = self.world.game_time;
let at = self.armor_stands[i].position;
let at = [at.x, at.y, at.z];
+6 -2
View File
@@ -809,15 +809,19 @@ impl Game<'_> {
true
}
/// `VehicleEntity.hurtServer` from the player's attack.
pub(super) fn attack_boat(&mut self, damage: f32) -> bool {
pub(super) fn attack_boat(&mut self) -> bool {
let Some((i, d)) = self.boat_hit() else {
return false;
};
if !self.before_block(d) || self.mob_hit().is_some_and(|m| m.1 < d) {
return false;
}
self.vehicle_attack_sounds();
let area = self.boats[i].bounds();
// Player.attack's full damage against the boat's entity type.
let (kind, id) = (self.boats[i].entity_type(), self.boats[i].id as i32);
let (damage, _, _, magic) = self.melee_damage(&kind, false);
self.hurt_boat(i, damage, self.creative);
self.vehicle_attack_sounds(area, magic.then_some(id));
self.swing_arm();
true
}
@@ -155,7 +155,7 @@ impl MapData {
m.unlimited = self.unlimited;
m
}
/// `MapItemSavedData.locked`: the same pixels, locked.
/// `MapItemSavedData.locked`: the same pixels and banner markers, locked.
pub(super) fn locked_copy(&self) -> MapData {
let mut m = MapData::fresh(
f64::from(self.center[0]),
@@ -165,6 +165,7 @@ impl MapData {
);
m.center = self.center;
m.colors = self.colors.clone();
m.banners = self.banners.clone();
m.tracking = self.tracking;
m.unlimited = self.unlimited;
m.locked = true;
+3
View File
@@ -51,6 +51,9 @@ pub(super) struct CombatTracker {
/// stand and the seconds their weapon disables a shield for
/// (`getSecondsToDisableBlocking`).
pub(super) player_attacker: Option<([f64; 3], f32)>,
/// While set, a sweep attack's reach to the other players is kept here
/// instead of landing, for the caller that holds the LAN host.
pub(super) sweeps: Option<Vec<super::lan_pvp::Sweep>>,
/// The mob exploding now (`ServerExplosion.source`): its team's friendly
/// fire decides whom the blast may hurt.
pub(super) explosion_source: Option<u32>,
+14 -15
View File
@@ -1122,22 +1122,21 @@ impl Game<'_> {
if !self.before_block(d) || self.mob_hit().is_some_and(|m| m.1 < d) {
return false;
}
let hand_damage = self.attack_item_info().map_or(0.0, |i| i.attack_damage);
let delay = horizon_client::attack_strength::delay(self.main_hand_attack_speed());
let scale = ((self.attack_ticks as f32 + 0.5) / delay).clamp(0.0, 1.0);
let mut amount =
(1.0 + hand_damage + self.effect_attack_bonus()) * (0.2 + scale * scale * 0.8);
let falling = self
.player
.as_ref()
.is_some_and(|p| !p.ground.on_ground && p.velocity.y < 0.0 && !p.sprinting);
if scale > 0.9 && falling {
amount *= 1.5;
}
amount += self.enchant_damage_bonus("minecraft:ender_dragon") * scale;
self.attack_ticks = 0;
// A dragon part is no LivingEntity: `canCriticalAttack` is false.
let (amount, _, _, _) = self.melee_damage("minecraft:ender_dragon", false);
self.swing_arm();
self.hit_special(id, amount, true, false);
// The part's box.
let area = self
.special_targets()
.into_iter()
.find(|(part, _)| *part == id)
.map(|(_, b)| b);
let hurt = self.hit_special(id, amount, true, false);
// The sweep and the sounds read the charge, which the hit then spends.
if let (Some(area), Hurt::Landed { .. }) = (area, hurt) {
self.attack_effects(area, None, super::mace::Spared::Nothing, None);
}
self.attack_ticks = 0;
true
}
/// The 24 nodes (`findClosestNode` builds them on first use).
@@ -82,8 +82,13 @@ impl Game<'_> {
}
/// `getEnchantedDamage - base`: damage bonus of the held weapon against a mob type.
pub(super) fn enchant_damage_bonus(&mut self, target: &str) -> f32 {
self.enchanted_damage(target, 0.0)
}
/// `Player.getEnchantedDamage`: `base` run through the held weapon's
/// damage effects against a mob type.
pub(super) fn enchanted_damage(&mut self, target: &str, base: f32) -> f32 {
let Some(held) = self.held().cloned() else {
return 0.0;
return base;
};
let ctx = EffectContext {
this: Some(target),
@@ -99,7 +104,7 @@ impl Game<'_> {
"minecraft:damage",
&ctx,
&mut self.world.random,
0.0,
base,
)
}
/// Strength / weakness on the attack damage attribute.
+18 -13
View File
@@ -3,6 +3,22 @@
use super::{Game, Screen};
use horizon_client::command::args::GameMode;
pub(super) fn mode_id_of(mode: GameMode) -> i32 {
match mode {
GameMode::Survival => 0,
GameMode::Creative => 1,
GameMode::Adventure => 2,
GameMode::Spectator => 3,
}
}
pub(super) fn mode_from_id(id: i32) -> GameMode {
match id {
1 => GameMode::Creative,
2 => GameMode::Adventure,
3 => GameMode::Spectator,
_ => GameMode::Survival,
}
}
impl Game<'_> {
pub(super) fn spectator(&self) -> bool {
self.mode == GameMode::Spectator
@@ -12,21 +28,10 @@ impl Game<'_> {
matches!(self.mode, GameMode::Survival | GameMode::Creative)
}
pub(super) fn mode_id(&self) -> i32 {
match self.mode {
GameMode::Survival => 0,
GameMode::Creative => 1,
GameMode::Adventure => 2,
GameMode::Spectator => 3,
}
mode_id_of(self.mode)
}
pub(super) fn set_mode_id(&mut self, id: i32) {
let mode = match id {
1 => GameMode::Creative,
2 => GameMode::Adventure,
3 => GameMode::Spectator,
_ => GameMode::Survival,
};
self.set_mode(mode);
self.set_mode(mode_from_id(id));
}
/// `ServerPlayer.setGameMode` and `GameType.updatePlayerAbilities`.
pub(super) fn set_mode(&mut self, mode: GameMode) {
+34 -31
View File
@@ -5,7 +5,7 @@
//! attack (blocking, armour, knockback), when the `pvp` game rule allows it
//! (`ServerPlayer.canHarmPlayer`, `isPvpAllowed`). A player's arrow on
//! another player lands the same way.
use super::{Game, lan::LanHost, lan_mobs::guest_bounds, ray_box};
use super::{Game, lan::LanHost, lan_mobs::guest_bounds, mace::Spared, ray_box};
use horizon_client::{
Result,
@@ -50,8 +50,6 @@ pub(super) struct Strike {
knockback_attack: bool,
/// The attacker's team, for the victim's `Player.canHarmPlayer`.
team: Option<horizon_client::scoreboard::Team>,
/// The sweep's damage to the players around the victim.
sweep_hit: Option<Sweep>,
}
/// A sweep attack's reach to the other players (`Player.doSweepAttack`),
@@ -68,8 +66,8 @@ pub(super) struct Sweep {
team: Option<horizon_client::scoreboard::Team>,
/// The target's box grown by (1, 0.25, 1).
pub(super) hit_box: Aabb,
/// The player the sweep started from, which it spares.
skip: Option<Victim>,
/// The entity id of the player the sweep started from, which it spares.
pub(super) skip: Option<i32>,
}
impl Strike {
@@ -145,12 +143,8 @@ impl Game<'_> {
pub(super) fn pvp_strike(&mut self) -> Option<Strike> {
let p = self.player.as_ref()?;
let from = [p.position.x, p.position.y, p.position.z];
let (amount, scale, crit, magic) = self.melee_damage("minecraft:player");
let (amount, scale, crit, magic) = self.melee_damage("minecraft:player", true);
let sweep = self.sweep_attack_position(scale, crit);
let sweep_hit = sweep.map(|_| {
let base = self.sweep_base_damage(scale);
self.player_sweep(base, scale)
});
let (strength, knockback_attack) = self.extra_knockback("minecraft:player", scale);
let (xd, zd) = self.extra_knockback_direction();
self.attack_ticks = 0;
@@ -175,7 +169,6 @@ impl Game<'_> {
knockback: (strength, xd, zd),
knockback_attack,
team: self.player_team().cloned(),
sweep_hit,
})
}
@@ -368,21 +361,29 @@ impl Game<'_> {
(true, false, false) => "minecraft:entity.player.attack.weak",
};
if let Some(at) = s.sweep.filter(|_| hurt) {
self.sweep_attack(at, Some(s.from));
// The other players next to the victim (Player.doSweepAttack).
let bounds = match victim {
Victim::Host => self.player.as_ref().map(|p| p.bounds()),
Victim::Guest(conn) => host.hub.guest(conn).map(guest_bounds),
// The sweep around the player that was hit, as its attacker.
let (area, id) = match victim {
Victim::Host => (self.player.as_ref().map(|p| p.bounds()), host.host_entity),
Victim::Guest(conn) => {
let g = host.hub.guest(conn);
(g.map(guest_bounds), g.map_or(-1, |g| g.entity_id))
}
};
if let (Some(sweep), Some(bounds)) = (&s.sweep_hit, bounds) {
self.sweep_players(
host,
&Sweep {
hit_box: bounds.inflate(Vec3::new(1.0, 0.25, 1.0)),
skip: Some(victim),
..sweep.clone()
},
);
let target = area.map(|area| (area, Spared::Player(id)));
match s.attacker {
None => {
// The host is checked out here: collect the sweep for the players.
self.combat.sweeps = Some(Vec::new());
self.sweep_attack(at, Some(s.from), target, s.scale);
for sweep in self.combat.sweeps.take().unwrap_or_default() {
self.sweep_players(host, &sweep);
}
}
Some(conn) => {
self.as_guest(host, conn, |g| {
g.sweep_attack(at, Some(s.from), target, s.scale)
});
}
}
} else {
self.audio.play(sound, Some(s.from), 1.0, 1.0);
@@ -399,7 +400,7 @@ impl Game<'_> {
.player
.as_ref()
.map_or([0.0; 3], |p| [p.position.x, p.position.y, p.position.z]);
let damage = (base + self.enchant_damage_bonus("minecraft:player")) * scale;
let damage = self.enchanted_damage("minecraft:player", base) * scale;
Sweep {
attacker: self.lan_acting,
from,
@@ -415,7 +416,9 @@ impl Game<'_> {
/// turn the host holds the other players (`as_guest`), so it waits for
/// the turn to end.
pub(super) fn sweep_other_players(&mut self, sweep: Sweep) {
if self.lan_acting.is_some() {
if let Some(collect) = self.combat.sweeps.as_mut() {
collect.push(sweep);
} else if self.lan_acting.is_some() {
self.creatures.sweeps.push(sweep);
} else if let Some(mut host) = self.lan.take() {
self.sweep_players(&mut host, &sweep);
@@ -445,7 +448,7 @@ impl Game<'_> {
&& p.bounds().intersects(sweep.hit_box)
&& p.position.distance_squared(from) < 9.0
{
victims.push((Victim::Host, self.player_team().cloned()));
victims.push((Victim::Host, host.host_entity, self.player_team().cloned()));
}
for g in &host.hub.guests {
if host.hub.here(g)
@@ -458,7 +461,7 @@ impl Game<'_> {
< 9.0
{
let team = self.score.board.players_team(&g.name).cloned();
victims.push((Victim::Guest(g.conn), team));
victims.push((Victim::Guest(g.conn), g.entity_id, team));
}
}
let (xd, zd) = sweep.knockback;
@@ -468,8 +471,8 @@ impl Game<'_> {
g.knock_back_player(0.4, xd, zd);
}
};
for (victim, team) in victims {
if sweep.skip == Some(victim)
for (victim, id, team) in victims {
if sweep.skip == Some(id)
|| horizon_client::scoreboard::teams_allied(team.as_ref(), sweep.team.as_ref())
|| !self.ui.rules.bool("pvp")
{
+167 -1
View File
@@ -10,7 +10,11 @@ use horizon_client::{
mobs::{Damage, Mob, Species},
particles::{ParticleOptions, ParticleType},
};
use horizon_core::{geometry::Vec3, position::BlockPos, random::RandomSource};
use horizon_core::{
geometry::{Aabb, Vec3},
position::BlockPos,
random::RandomSource,
};
use horizon_world::registry::BlockStateId;
/// `MaceItem.SMASH_ATTACK_FALL_THRESHOLD`.
@@ -38,6 +42,22 @@ pub(super) fn ally_of_player(m: &Mob, player: Option<[i32; 4]>) -> bool {
|| m.species() == Species::Allay && m.extra.tame
}
/// The entity a sweep leaves out: the one the attack hit (`target` of
/// `Player.doSweepAttack`).
#[derive(Clone, Copy, PartialEq, Eq)]
pub(super) enum Spared {
Nothing,
Mob(u32),
Stand(u32),
/// A player of the open world, by entity id.
Player(i32),
}
/// `Player.doSweepAttack`'s `1 + ratio * f`, where `f` is the attack damage
/// after `baseDamageScaleFactor` (0.2 + strength^2 * 0.8).
fn sweep_base_damage(ratio: f32, attack_damage: f32, scale: f32) -> f32 {
1.0 + ratio * attack_damage * (0.2 + scale * scale * 0.8)
}
/// A smash's knockback on the players, put off while a guest's turn holds
/// the other players.
pub(super) struct SmashPush {
@@ -340,6 +360,136 @@ impl Game<'_> {
resistance,
);
}
/// `Player.doSweepAttack`'s victims: every other living mob and every
/// armor stand (but a marker one) in `target`'s box inflated by
/// (1, 0.25, 1) and under three blocks from the player takes
/// `getEnchantedDamage(1 + sweeping ratio * attack damage) * strength`,
/// knocked back 0.4 along the player's yaw. The player's allies and the
/// target (`spared`) are spared.
pub(super) fn sweep_damage(&mut self, target: Aabb, spared: Spared, scale: f32) {
let Some(player) = self.player.as_ref() else {
return;
};
let from = [player.position.x, player.position.y, player.position.z];
let area = target.inflate(Vec3::new(1.0, 0.25, 1.0));
let near = |at: Vec3| {
(0..3)
.map(|a| [at.x, at.y, at.z][a] - from[a])
.map(|d| d * d)
.sum::<f64>()
< 9.0
};
// The enchantment's `sweeping_damage_ratio` attribute modifier (level /
// (level + 1)) on the attribute's 0 to 1 range.
let ratio = self
.res
.stations()
.enchantments
.attribute_add(
self.inventory[self.selected].as_ref(),
"minecraft:sweeping_damage_ratio",
)
.clamp(0.0, 1.0) as f32;
// `f` of doSweepAttack: the attack damage attribute after
// baseDamageScaleFactor (a sweep is never a smash or a critical hit).
let spin = self.player.as_ref().map_or(0.0, |p| p.auto_spin_attack_dmg);
let attribute = if spin > 0.0 {
spin
} else {
1.0 + self.attack_item_info().map_or(0.0, |i| i.attack_damage)
+ self.effect_attack_bonus()
};
let base = sweep_base_damage(ratio, attribute, scale);
let (xd, zd) = self.extra_knockback_direction();
let uuid = self.level.player_uuid.or(Some([0, 0, 0, 1]));
let allies = self.player_allies();
// getEntitiesOfClass walks the entity sections (x, then z, then y)
// under the box, each in the order its entities were added.
let section = |at: Vec3| {
(
(at.x.floor() as i32) >> 4,
(at.z.floor() as i32) >> 4,
(at.y.floor() as i32) >> 4,
)
};
let mut victims: Vec<((i32, i32, i32), u32, bool)> = Vec::new();
for m in &self.mobs {
if spared != Spared::Mob(m.id)
&& m.alive()
&& !m.removed
&& !allies.contains(&m.id)
&& !ally_of_player(m, uuid)
&& m.bounds().intersects(area)
&& near(m.position)
{
victims.push((section(m.position), m.id, false));
}
}
for s in &self.armor_stands {
if !s.marker
&& spared != Spared::Stand(s.id)
&& s.bounds().intersects(area)
&& near(s.position)
{
victims.push((section(s.position), s.id, true));
}
}
victims.sort_by_key(|&(key, id, _)| (key, id));
for (_, id, is_stand) in victims {
if is_stand {
let Some(i) = self.armor_stands.iter().position(|s| s.id == id) else {
continue;
};
// knockback(0.4, ..) follows a hurtServer that landed, on a
// stand that is still there (LivingEntity.knockback).
if !self.punch_armor_stand(i) {
continue;
}
let (mut kx, mut kz) = (xd, zd);
while kx * kx + kz * kz < f64::from(1.0e-5_f32) {
let r = &mut self.world.random;
kx = (r.next_double() - r.next_double()) * 0.01;
kz = (r.next_double() - r.next_double()) * 0.01;
}
let len = (kx * kx + kz * kz).sqrt();
if let Some(s) = self.armor_stands.iter_mut().find(|s| s.id == id) {
s.velocity = Vec3::new(
s.velocity.x / 2.0 - kx / len * 0.4,
if s.on_ground {
(s.velocity.y / 2.0 + 0.4).min(0.4)
} else {
s.velocity.y
},
s.velocity.z / 2.0 - kz / len * 0.4,
);
}
continue;
}
let Some(i) = self.mobs.iter().position(|m| m.id == id) else {
continue;
};
let kind = self.mobs[i].kind.id.clone();
let kind = format!("minecraft:{}", kind.trim_start_matches("minecraft:"));
let amount = self.enchanted_damage(&kind, base) * scale;
let source = self.attack_source(from);
// hurtServer first; the knockback and post-attack effects follow
// only when it landed.
if self.hurt_by_player(i, amount, source) {
self.mobs[i].knockback(0.4, xd, zd);
self.last_hurt_by_player
.insert(self.mobs[i].id, self.lan_acting);
self.post_attack(i);
}
}
// `getEntitiesOfClass(LivingEntity.class)` takes the other players too.
let mut sweep = self.player_sweep(base, scale);
sweep.hit_box = area;
sweep.skip = match spared {
Spared::Player(id) => Some(id),
_ => None,
};
self.sweep_other_players(sweep);
}
/// `ServerPlayer.checkFallDamage` after a smash on a grounded target:
/// the landing block's particles, 50 for every block fallen (200 at most).
pub(super) fn smash_landing_particles(
@@ -409,3 +559,19 @@ impl Game<'_> {
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sweep_damage_is_one_without_the_enchantment() {
// A fully charged diamond sword (8 attack damage): neighbours take 1.
assert_eq!(sweep_base_damage(0.0, 8.0, 1.0), 1.0);
// Sweeping Edge III adds the ratio of the (charged) attack damage.
assert_eq!(sweep_base_damage(0.75, 8.0, 1.0), 7.0);
// baseDamageScaleFactor at 0.95 strength.
let scaled = sweep_base_damage(0.5, 8.0, 0.95);
assert!((scaled - (1.0 + 0.5 * 8.0 * (0.2 + 0.95 * 0.95 * 0.8))).abs() < 1e-6);
}
}
+14 -2
View File
@@ -66,6 +66,10 @@ pub(super) struct MapData {
pub unlimited: bool,
pub colors: Vec<u8>,
pub decorations: Vec<Decoration>,
/// `MapBanner` and `MapFrame` entries as saved (`banners`, `frames`), kept
/// so a save does not drop them.
pub banners: Vec<Tag>,
frames: Vec<Tag>,
holders: Vec<Holder>,
/// Changed since the last save / texture upload.
dirty: bool,
@@ -85,6 +89,8 @@ impl MapData {
unlimited: false,
colors: vec![0; 128 * 128],
decorations: Vec::new(),
banners: Vec::new(),
frames: Vec::new(),
holders: Vec::new(),
dirty: true,
texture_dirty: true,
@@ -234,8 +240,8 @@ impl MapData {
("trackingPosition", flag(self.tracking)),
("unlimitedTracking", flag(self.unlimited)),
("colors", Tag::ByteArray(self.colors.clone())),
("banners", Tag::List(Vec::new())),
("frames", Tag::List(Vec::new())),
("banners", Tag::List(self.banners.clone())),
("frames", Tag::List(self.frames.clone())),
]),
),
("DataVersion", Tag::Int(horizon_world::DATA_VERSION)),
@@ -257,6 +263,10 @@ impl MapData {
_ => Vec::new(),
};
colors.resize(128 * 128, 0);
let list = |k: &str| match d.get(k) {
Some(Tag::List(l)) => l.clone(),
_ => Vec::new(),
};
Some(Self {
center: [int("xCenter")?, int("zCenter")?],
scale: int("scale").unwrap_or(0).clamp(0, 4) as u8,
@@ -266,6 +276,8 @@ impl MapData {
unlimited: int("unlimitedTracking").unwrap_or(0) != 0,
colors,
decorations: Vec::new(),
banners: list("banners"),
frames: list("frames"),
holders: Vec::new(),
dirty: false,
texture_dirty: true,
+6 -2
View File
@@ -1146,7 +1146,7 @@ impl Game<'_> {
})
}
/// `VehicleEntity.hurtServer` from the player's attack.
pub(super) fn attack_cart(&mut self, damage: f32) -> bool {
pub(super) fn attack_cart(&mut self) -> bool {
let Some((i, d)) = self.cart_hit() else {
return false;
};
@@ -1156,8 +1156,12 @@ impl Game<'_> {
let burning = self
.held()
.is_some_and(|s| s.enchantment_level("minecraft:fire_aspect") > 0);
self.vehicle_attack_sounds();
let area = self.carts[i].bounds();
// Player.attack's full damage against the cart's entity type.
let id = self.carts[i].id as i32;
let (damage, _, _, magic) = self.melee_damage(self.carts[i].kind.id(), false);
self.hurt_cart(i, damage, self.creative, burning);
self.vehicle_attack_sounds(area, magic.then_some(id));
self.swing_arm();
true
}
+11 -2
View File
@@ -49,6 +49,10 @@ impl Game<'_> {
fn scoreboard_path(&self) -> std::path::PathBuf {
self.world_root.join("data/minecraft/scoreboard.dat")
}
fn border_path(&self) -> std::path::PathBuf {
save::dimension_dir(&self.world_root, "minecraft:overworld")
.join("data/minecraft/world_border.dat")
}
/// `ScoreboardSaveData` read from `data/minecraft/scoreboard.dat`.
pub(super) fn load_scoreboard(&mut self) {
if self.score.loaded || self.remote.is_some() {
@@ -62,7 +66,12 @@ impl Game<'_> {
}
self.score.storage =
horizon_client::command_storage::CommandStorage::load(&self.world_root);
if let Some(root) = save::read_dat(&self.world_root.join("data/minecraft/world_border.dat"))
// ServerLevel.getWorldBorder: each dimension's data/minecraft/world_border.dat. Horizon
// keeps one border, so the overworld's file stands for it; the root file is what
// older Horizon builds wrote.
let border_path = self.border_path();
if let Some(root) = save::read_dat(&border_path)
.or_else(|| save::read_dat(&self.world_root.join("data/minecraft/world_border.dat")))
&& let Some(data) = root.get("data")
{
self.border = horizon_client::worldborder::WorldBorder::unpack(data);
@@ -78,7 +87,7 @@ impl Game<'_> {
self.score.stopwatches.save(&self.world_root);
if self.border != horizon_client::worldborder::WorldBorder::default() {
let _ = save::write_dat(
&self.world_root.join("data/minecraft/world_border.dat"),
&self.border_path(),
Tag::compound([
("data", self.border.pack()),
("DataVersion", Tag::Int(horizon_world::DATA_VERSION)),
+71 -14
View File
@@ -1727,7 +1727,7 @@ fn compress_records(
let compress = |record: &Record| {
record
.tag()
.map(|tag| ChunkRecord::from_nbt(&tag, Compression::Zlib, timestamp, Limits::default()))
.map(|tag| ChunkRecord::from_nbt(&tag, Compression::Zlib, timestamp, Limits::saved()))
.transpose()
};
let helpers = std::thread::available_parallelism()
@@ -1844,7 +1844,7 @@ fn read_region_record(
.map_err(|_| "region file poisoned")?
.read(ChunkPos::new(x, z))?;
Ok(match record {
Some(r) => Some(r.nbt(Limits::default())?),
Some(r) => Some(r.nbt(Limits::saved())?),
None => None,
})
}
@@ -2275,11 +2275,51 @@ impl Drop for SaveDir {
pub fn read_dat(path: &Path) -> Option<Tag> {
let bytes = fs::read(path).ok()?;
let raw = match Compression::Gzip.decode(&bytes, 64 << 20) {
let raw = match Compression::Gzip.decode(&bytes, Limits::saved().max_bytes) {
Ok(raw) => raw,
Err(_) => bytes,
};
Some(nbt::read_named(&raw, Limits::default()).ok()?.0.tag)
Some(nbt::read_named(&raw, Limits::saved()).ok()?.0.tag)
}
/// `FileNameDateFormatter`: the time in the names of backed-up unreadable files.
fn backup_stamp() -> String {
chrono::Local::now().format("%Y-%m-%d_%H-%M-%S").to_string()
}
/// `LevelStorageSource.readLevelDataTagFixed`: level.dat, else level.dat_old.
fn read_level_dat(dir: &Path) -> Option<Tag> {
read_dat(&dir.join("level.dat")).or_else(|| read_dat(&dir.join("level.dat_old")))
}
/// `restoreLevelDataFromOld`: an unreadable level.dat is kept as
/// `level.dat_corrupted_<time>` and level.dat_old takes its place, so the next
/// write does not bury either file.
fn restore_level_dat(dir: &Path) {
let path = dir.join("level.dat");
if read_dat(&path).is_some() {
return;
}
if path.exists() {
let _ = fs::rename(
&path,
dir.join(format!("level.dat_corrupted_{}", backup_stamp())),
);
}
let old = dir.join("level.dat_old");
if read_dat(&old).is_some() {
let _ = fs::rename(old, path);
}
}
/// `PlayerDataStorage.backup`: a player file that fails to load is copied to
/// `<uuid>_corrupted_<time>.dat` before it is written over.
fn back_up_unreadable_player(path: &Path) {
if path.is_file()
&& read_dat(path).is_none()
&& let Some(stem) = path.file_stem().and_then(|s| s.to_str())
{
let _ = fs::copy(
path,
path.with_file_name(format!("{stem}_corrupted_{}.dat", backup_stamp())),
);
}
}
/// Write a gzip NBT file the way vanilla does (`<name>_new`, keep `_old`).
pub fn write_dat(path: &Path, tag: Tag) -> Result<()> {
@@ -2291,7 +2331,7 @@ pub fn write_dat(path: &Path, tag: Tag) -> Result<()> {
name: "".into(),
tag,
},
Limits::default(),
Limits::saved(),
)
.map_err(|e| e.to_string())?;
let compressed = Compression::Gzip.encode(&bytes)?;
@@ -2647,6 +2687,9 @@ pub struct Level {
/// The game mode id (0 survival, 1 creative, 2 adventure, 3 spectator);
/// `creative` wins when the two disagree.
pub game_mode: i32,
/// `previousPlayerGameType`: the mode the player left last (the F3+F4 switcher's
/// return mode), when it has one.
pub previous_game_mode: Option<i32>,
pub time: i64,
pub day_time: i64,
/// Where the player respawns when it has no bed or anchor: its forced
@@ -2755,7 +2798,7 @@ impl Level {
}
}
pub fn read(dir: &Path) -> Option<Self> {
let root = read_dat(&dir.join("level.dat"))?;
let root = read_level_dat(dir)?;
let data = root.get("Data")?;
let n = |t: Option<&Tag>| number(t).unwrap_or(0);
let mut level = Self {
@@ -2843,7 +2886,12 @@ impl Level {
// file of a server world, or the legacy Data.Player.
let uuid = uuid_from_tag(data.get("singleplayer_uuid"));
let player_dir = dir.join("players").join("data");
let owner = uuid.and_then(|u| read_dat(&player_dir.join(format!("{}.dat", uuid_text(u)))));
// PlayerDataStorage.load: the player's file, else its .dat_old.
let owner = uuid.and_then(|u| {
let name = uuid_text(u);
read_dat(&player_dir.join(format!("{name}.dat")))
.or_else(|| read_dat(&player_dir.join(format!("{name}.dat_old"))))
});
let player = owner
.or_else(|| {
fs::read_dir(&player_dir)
@@ -2901,6 +2949,7 @@ impl Level {
self.creative = mode == 1;
self.game_mode = mode as i32;
}
self.previous_game_mode = n("previousPlayerGameType").map(|m| m as i32);
self.flying = p
.get("abilities")
.and_then(|a| number(a.get("flying")))
@@ -2998,6 +3047,7 @@ impl Level {
"respawn",
"recipeBook",
"LastDeathLocation",
"previousPlayerGameType",
] {
map.remove(&JavaString::from(key));
}
@@ -3166,6 +3216,10 @@ impl Level {
));
}
}
// ServerPlayer.storeGameTypes: storeNullable, so absent without one.
if let Some(mode) = self.previous_game_mode {
entries.push(("previousPlayerGameType", Tag::Int(mode)));
}
for (key, value) in entries {
put(&mut p, key, value);
}
@@ -3191,6 +3245,7 @@ impl Level {
/// Write every file; a world without a player UUID gets a random one.
pub fn write(&mut self, dir: &Path) -> Result<()> {
fs::create_dir_all(dir)?;
restore_level_dat(dir);
let existing = read_dat(&dir.join("level.dat")).and_then(|r| r.get("Data").cloned());
let legacy = existing
.as_ref()
@@ -3381,12 +3436,12 @@ impl Level {
}
write_saved_data(dir, "game_rules", rules)?;
}
write_dat(
&dir.join("players")
.join("data")
.join(format!("{}.dat", uuid_text(uuid))),
self.player_tag(),
)?;
let player_file = dir
.join("players")
.join("data")
.join(format!("{}.dat", uuid_text(uuid)));
back_up_unreadable_player(&player_file);
write_dat(&player_file, self.player_tag())?;
write_dat(&dir.join("level.dat"), Tag::compound([("Data", data)]))?;
Ok(())
}
@@ -4495,11 +4550,13 @@ mod tests {
let dir = std::env::temp_dir().join(format!("horizon-lock-{}", std::process::id()));
let first = super::SessionLock::acquire(&dir).expect("first lock");
assert!(super::SessionLock::acquire(&dir).is_err());
drop(first);
// Windows refuses a read through another handle while the file is
// locked, so the bytes are read once the lock is released.
assert_eq!(
std::fs::read(dir.join("session.lock")).unwrap(),
[0x26, 0x03]
);
drop(first);
assert!(super::SessionLock::acquire(&dir).is_ok());
let _ = std::fs::remove_dir_all(&dir);
}
+12
View File
@@ -111,6 +111,18 @@ impl Limits {
}
}
/// Chunks, entities, POI and the world's `.dat` files: vanilla reads and
/// writes them with `NbtAccounter.unlimitedHeap()` (`NbtIo.read`), so a
/// chunk past the default node cap (a few thousand full containers) still
/// loads. The byte cap stays as the only guard on the decompressed data.
pub fn saved() -> Self {
Self {
max_bytes: 1 << 30,
max_nodes: usize::MAX,
max_depth: 512,
}
}
/// Structure templates (`structure/*.nbt`): vanilla reads them with
/// `NbtAccounter.unlimitedHeap()` (TemplateSource.readStructure), and
/// mods ship templates past the default node cap (YUNG's Better Ocean
+1
View File
@@ -29,6 +29,7 @@ To play, use [the launcher](../launcher/README.md); the project site is [playhor
- [Rust rewrite status](rust-parity.md): completion criteria, how to reproduce the validation, and per-area scope.
- [Parity workflow](parity-workflow.md): `tools/parity.py`, the gate, other machines, merging.
- Area notes: [block behaviours and ticking](parity/blocks.md), [section meshing](parity/meshing.md).
- [Port ledger](port-ledger.md): `tools/port_ledger.py`, every vanilla method next to the Rust functions that port it, both ways, with the gaps where a port isn't wired like vanilla.
- [Version ports](version-ports.md): how a new Minecraft release is detected, diffed against the pinned one and ported, and what stays manual.
- [Decompilation and research lab](research-lab.md) and [decompilation status](decompilation-status.md): the local game inspection workspace the harnesses build on.
+2 -2
View File
@@ -174,11 +174,11 @@ MCP: `account_skin`.
## `horizon-launcher settings`
Show the launcher's settings, or set one (the Settings page): selected-version TAG, minecraft-dir PATH, server-dir PATH ("default" resets a folder), install-new-versions on|off, opening-animation on|off, proxy http://host:port ("default" removes it), while-playing stay|minimize|hide (what the window does while the game runs), language system|en|fr|ru (the window's language; system follows the computer's), accent violet|blue|teal|green|amber|red|pink, background PATH (a picture behind Home; "default" shows Horizon's landscape).
Show the launcher's settings, or set one (the Settings page): selected-version TAG, minecraft-dir PATH, server-dir PATH ("default" resets a folder), install-new-versions on|off, prune-old-versions on|off (delete old versions after an install, keeping the selected one, the ones instances use and the newest few), keep-versions N (how many of the newest to keep; "default" is 2), opening-animation on|off, proxy http://host:port ("default" removes it), while-playing stay|minimize|hide (what the window does while the game runs), language system|en|fr|ru (the window's language; system follows the computer's), accent violet|blue|teal|green|amber|red|pink, background PATH (a picture behind Home; "default" shows Horizon's landscape).
horizon-launcher settings [KEY] [VALUE]
- `KEY` (selected-version, minecraft-dir, server-dir, install-new-versions, opening-animation, proxy, while-playing, language, accent, background)
- `KEY` (selected-version, minecraft-dir, server-dir, install-new-versions, prune-old-versions, keep-versions, opening-animation, proxy, while-playing, language, accent, background)
- `VALUE`: The new value (with KEY)
MCP: `settings`.
+137
View File
@@ -0,0 +1,137 @@
# Port ledger
`tools/port_ledger.py` lists every vanilla method next to the Horizon functions that port it, both ways, and
points at the places where a port exists but isn't wired like vanilla. It answers the questions every parity
fix starts with, without searching:
- where is vanilla's `Class.method` in Horizon (`where`), and which vanilla method does this Rust function
port (`what`);
- which vanilla code and which Rust functions a bug report is about (`issue`);
- what a branch touches, and which gaps it opens or closes (`check`).
`vanilla_map.py` maps classes to files for version ports; the ledger works one level down, per method and per
Rust function with its line span.
## Use
```sh
python3 tools/port_ledger.py build # about 20 s; again after pulling
python3 tools/port_ledger.py where KineticWeapon.damageEntities # its ports, callees, callers, gaps
python3 tools/port_ledger.py where ShulkerBulletRenderer # every method of a class, with status
python3 tools/port_ledger.py what crates/horizon-client/src/game/spear.rs:150
python3 tools/port_ledger.py class IronGolem # method by method: where, or missing
python3 tools/port_ledger.py issue 3123 # a GitHub issue (or the report's text)
python3 tools/port_ledger.py check --base origin/main # what this branch touches
python3 tools/port_ledger.py coverage --package world/entity --depth 3
python3 tools/port_ledger.py gaps --kind seam # see the kinds below
python3 tools/port_ledger.py report # .local/port-ledger/report.{md,html}
python3 tools/port_ledger.py diff old/ledger.json # against another build
python3 tools/port_ledger.py todo --package world/entity/animal # the next methods with no answer
```
`--json` on any query gives machine output for agents.
`build` reads the vanilla game jar (the lab's, or the launcher's `versions/<version>/<version>.jar`; `--jar`
picks one, `--no-jar` skips it) and the lab's decompiled sources (`.local/minecraft/<version>/sources/
{client,server}`, from `python3 tools/lab.py decompile`; `--sources DIR` takes any directory of decompiled
Java). The jar's bytecode gives the exact call targets, constants and ids; the sources give line numbers and
the cases the bytecode can't name. Nothing from either is written outside `.local/`.
`report` writes `report.md` and `report.html`, a single offline page with a search over every method (by class,
method, Rust function or file), the gaps by kind, and coverage by package.
## How a method is matched
1. **Ported:** a Rust function whose doc comment opens with the method, the house style
(`` /// `KineticWeapon.damageEntities`: one tick of the spear in use. ``). `Class.method`, `Class::method` and
`Class#method` all count, as in `vanilla_map.py`; `Outer.Inner.method` names a nested class. A method a
class inherits resolves to the class that declares it.
2. **Named:** a function with the method's own name (`tickRain` → `tick_rain`) in a file that cites the class,
in an `impl` of a type named for the class (`impl ShulkerBullet`), or in a file named for it
(`shulker_bullet.rs`). A function in `impl HurtByTarget` is never taken for `AvoidEntityGoal.canUse`: its
type must be named for the class, a sub- or superclass of it, or be one of Horizon's own containers
(`Game`, `Sim`, `MotionWorld`).
3. **Mapped, skipped, absent:** a row in the verdict map (below) says where it is, why it needs no port, or
that Horizon doesn't do it.
4. **Mentioned:** the method appears in some other comment of a function (often a caller explaining a step).
5. **Linked:** where `X` is ported as `A`, a callee of `X` with no port and a callee of `A` nothing cites,
whose names agree less Java's `get` (`getFlyingSpeed` → `flying_speed`).
6. **Structural:** in the class's home files (below), the function that touches the same state (the fields the
method reads and writes, by their Rust names) and reaches the ports of the same callees, weighed against its
length so one long function doesn't take every method.
7. **Inferred:** nothing names it, but a function shares what is hard to share by chance: rare numbers
(`0.458`, `72000`) and game ids (`SoundEvents.ENTITY_SHULKER_BULLET_HIT` against
`"entity.shulker_bullet.hit"`, `Blocks.DETECTOR_RAIL` against `"minecraft:detector_rail"`).
8. **Trivial:** an accessor, an abstract method, a few instructions, or a constructor that only sets fields
(the struct's initialiser): nothing to port on its own. Coverage leaves these out of its percentage.
9. **Missing:** none of these: no answer yet.
Every class also gets a **home**: the Rust files it lives in, weighed from all of the above, the files citing
it, files named for it and `impl`s of a type named for it (a nested class without one lives with its outer
class). `where Class`, `class` and `issue` show it.
`coverage` gives two shares: *found*, the methods worth porting (not trivial, not skipped) that have a port,
and *answered*, all methods with any answer (a port, a reason to skip, trivial, or known to be missing).
Citing the vanilla method in the first line of a function's doc is what makes it findable, by people, agents
and this tool alike; `check` lists the functions a branch changed that look like ports but cite nothing. Test
code (`#[test]`, `mod tests`, fixtures, probes, examples) never counts as a port.
## Gaps
Java calls come from the bytecode (`invokevirtual`, `invokestatic`, method handles in lambdas), so each names
its exact owner; a call also reaches the overrides in subclasses. Rust calls resolve through the receiver's
type where it is known (`self`, a parameter, a `let`, a struct field, a trait to its impls), else by name.
| Kind | Means | Example it found |
|---|---|---|
| `seam` | A vanilla method ported on two paths (the in-frame game, the server-client side in `game/remote*.rs`, the server in `game/lan*.rs` and `src/lan/`), where one path reaches the port of a callee and the other doesn't. Single player runs on the server thread, so this is where most player-visible bugs sit; a gap on the old in-frame path sorts last. | `remote_use` ported `Minecraft.startUseItem` without `LocalPlayer.itemUsed`: the held block never dipped after a placement on a server |
| `client` | A vanilla method with an effect only the client's copy of the world shows (`addParticle`, `playLocalSound`, `itemUsed`, an `isClientSide()` branch), whose port nothing in `game/remote*.rs` reaches. | `AbstractHorse.handleEating`'s happy-villager particle, drawn only on the server's level |
| `drift` | A port that never names a sound, particle, item, block, effect or game event its vanilla method uses, or lacks one of its rare numbers. Names count however Rust spells them (`Sound::AnvilLand`, `"block.anvil.land"`). | `throw_ender_eye`, the port of `EnderEyeItem.use`, names neither the `used_ender_eye` trigger nor the `projectile_shoot` game event (a lead, not yet checked) |
| `class` | A whole class nothing ports while most of its package is ported. Renderers, sound instances and goals are reached by registration, so no call graph shows them. | `ShulkerBulletRenderer`, `ElytraOnPlayerSoundInstance` |
| `callee` | A ported method whose ported callee its port never reaches. Noisier: a port may get the value as an argument instead. | `Projectile.shootFromRotation` without `Entity.getKnownMovement`: throws added a stale server velocity; `ServerPlayer.getKnownMovement` without `getVehicle`: a spear's charge ignored the horse |
| `stale` | A citation whose class or method the pinned version doesn't have (renamed, removed, or a typo). | |
| `map` | A verdict-map row whose class, method or Rust fn doesn't exist, or whose verdict isn't one of the above. | |
| `unported` | (`gaps --kind unported`) Vanilla methods with no port, ranked by how many vanilla methods call them. | |
Calls to maths, geometry, randomness and text (`Mth`, `AABB`, `Vec3`, `RandomSource`, `Component`) never make
a `seam` or `callee` gap: every path does those its own way.
A gap is a lead, not a verdict: read the vanilla method and the Rust function it names before changing
anything.
## The verdict map
What no automatic match finds, someone reads and decides. `tools/port_map/*.tsv` holds those answers, one
file per batch, tab-separated:
```
Class.method verdict where note
XoroshiroRandomSource.nextInt port crates/horizon-core/src/random.rs::XoroshiroRandom::next_int_bound bounded form
ArmadilloAi.initIdleActivity inline crates/horizon-client/src/mobs/armadillo.rs::register gap: no AnimalMakeLove, so armadillos never breed
MushroomCow.addAdditionalSaveData missing Type is not saved: a mooshroom turned brown by lightning loads red
NoiseRouterData skip:data a class row covers the class's methods without a row of their own
```
Verdicts: `port` (the fn that does the method's job), `inline` (the bigger fn its behaviour is folded into),
`missing`, `skip:<reason>` with a reason from `java`, `data`, `ui`, `debug`, `service`, `server`, `other`, and on
a class row `home` with the class's files. `where` names a fn by file, impl type and name, not by line, so rows
survive edits around them; a row whose class, method or fn doesn't exist shows up as a `map` gap.
`todo [--package P] [--limit N] [--after CLASS]` prints the next batch of methods with no answer, whole classes
at a time, with each class's Java source, home files, and Rust functions in them with similar names: the input
for whoever (or whichever agent) writes the next batch file. Set `PORT_LEDGER_OUT` to build into another
directory, so several people can check their own rows at once.
## Bug reports and branches
`issue N` reads a GitHub issue (`gh issue view`), or takes the report's text (`-` reads stdin), drops the
bug-report template, and ranks the vanilla classes it names the way players write them ("shulker bullet",
"eye of ender", and registry names from the entity, block and item registries: "mooshroom" is `MushroomCow`), then the methods its words name in those classes. For each class it lists where Horizon ports
it and the gaps around it: on #3123 ("an iron golem you built no longer attacks you") it points at
`IronGolem.isPlayerCreated` and `setPlayerCreated`, both missing.
`check --base origin/main` takes the branch's changes since its merge base (uncommitted work too), rebuilds the
ledger if it is older than them, and lists the ports the changes touch with their vanilla source and open gaps,
citations to add, and stale ones. It then builds the base in a throwaway worktree and lists the gaps the
branch opens and closes and the methods it newly ports (`--no-compare` skips that half, about 20 s).
+5 -1
View File
@@ -181,5 +181,9 @@
"These mods will run with full access to your computer": "Diese Mods erhalten vollen Zugriff auf deinen Computer",
"They can read, change or delete your files, and use your accounts and network, like any program you run. Build them only if you trust their authors: the Mods page names them.": "Sie können deine Dateien lesen, ändern oder löschen und deine Konten sowie dein Netzwerk nutzen wie jedes andere Programm, das du ausführst. Kompiliere sie nur, wenn du ihren Autoren vertraust: Die Mods-Seite nennt sie.",
"Mods: {mods}": "Mods: {mods}",
"The build compiles the game: about ten minutes and a few GB of disk the first time, a few minutes after that.": "Der Build kompiliert das Spiel: beim ersten Mal etwa zehn Minuten und einige GB Speicherplatz, danach einige Minuten."
"The build compiles the game: about ten minutes and a few GB of disk the first time, a few minutes after that.": "Der Build kompiliert das Spiel: beim ersten Mal etwa zehn Minuten und einige GB Speicherplatz, danach einige Minuten.",
"Delete old versions automatically": "Alte Versionen automatisch löschen",
"Keeps the {count} newest, the one in use and the ones your instances use. Deleted versions install again from the Versions page.": "Behält die {count} neuesten, die verwendete und die von deinen Instanzen genutzten. Gelöschte Versionen lassen sich auf der Seite Versionen wieder installieren.",
"Installed versions use {size}.": "Installierte Versionen belegen {size}.",
"{size} on disk": "{size} auf dem Datenträger"
}
+4
View File
@@ -173,6 +173,10 @@
"Not prepared. Horizon can download Minecraft {version} from Mojang for your account, or use your own install.": "Pas préparé. Horizon peut télécharger Minecraft {version} depuis Mojang pour votre compte, ou utiliser votre propre installation.",
"Not prepared. Sign in with the Microsoft account that owns Minecraft {version} first.": "Pas préparé. Connectez-vous d'abord avec le compte Microsoft qui possède Minecraft {version}.",
"Cancel": "Annuler",
"Delete old versions automatically": "Supprimer automatiquement les anciennes versions",
"Keeps the {count} newest, the one in use and the ones your instances use. Deleted versions install again from the Versions page.": "Garde les {count} plus récentes, celle utilisée et celles de vos instances. Une version supprimée se réinstalle depuis la page Versions.",
"Installed versions use {size}.": "Les versions installées occupent {size}.",
"{size} on disk": "{size} sur le disque",
"Native mods (experimental)": "Mods natifs (expérimental)",
"Native mods from the Mods page compile into the game with the launcher's own Rust. Not sandboxed: they can do anything you can on this computer.": "Les mods natifs de la page Mods sont compilés dans le jeu avec le Rust du launcher. Sans bac à sable : ils peuvent faire tout ce que vous pouvez faire sur cet ordinateur.",
"{version} plays in this instance.": "Cette instance joue {version}.",
+4
View File
@@ -173,6 +173,10 @@
"Not prepared. Horizon can download Minecraft {version} from Mojang for your account, or use your own install.": "Не подготовлено. Horizon может скачать Minecraft {version} у Mojang для вашего аккаунта или взять вашу установку.",
"Not prepared. Sign in with the Microsoft account that owns Minecraft {version} first.": "Не подготовлено. Сначала войдите в аккаунт Microsoft, у которого есть Minecraft {version}.",
"Cancel": "Отмена",
"Delete old versions automatically": "Автоматически удалять старые версии",
"Keeps the {count} newest, the one in use and the ones your instances use. Deleted versions install again from the Versions page.": "Оставляет {count} самых новых, используемую и те, что нужны вашим сборкам. Удалённую версию можно снова установить на странице «Версии».",
"Installed versions use {size}.": "Установленные версии занимают {size}.",
"{size} on disk": "{size} на диске",
"Native mods (experimental)": "Нативные моды (экспериментально)",
"Native mods from the Mods page compile into the game with the launcher's own Rust. Not sandboxed: they can do anything you can on this computer.": "Нативные моды со страницы «Моды» компилируются в игру собственным Rust лаунчера. Без песочницы: они могут делать на этом компьютере всё, что можете вы.",
"{version} plays in this instance.": "В этой сборке запускается {version}.",
+121
View File
@@ -666,6 +666,23 @@ pub fn remove(tag: &str) -> Result<(), String> {
Ok(())
}
/// The bytes an installed version takes on disk.
pub fn disk_use(tag: &str) -> u64 {
fn size(dir: &Path) -> u64 {
fs::read_dir(dir)
.into_iter()
.flatten()
.flatten()
.map(|e| match e.metadata() {
Ok(m) if m.is_dir() => size(&e.path()),
Ok(m) => m.len(),
Err(_) => 0,
})
.sum()
}
size(&version_dir(tag))
}
/// The Minecraft version a Horizon build targets, from its research-lock.json.
pub fn game_version(tag: &str) -> String {
game_version_at(&version_dir(tag))
@@ -1968,6 +1985,72 @@ pub fn remove_version(tag: &str) -> Result<(), String> {
Ok(())
}
/// How many of the newest release versions stay installed when the player has not said.
const KEEP_NEWEST: usize = 2;
/// The release versions to delete: all but the `keep` newest of `installed` (newest first), and
/// never one of `protected`. Nightly builds are left out: `nightly::after_update` removes the
/// older ones.
fn stale_versions(installed: &[String], keep: usize, protected: &[String]) -> Vec<String> {
installed
.iter()
.filter(|t| is_game_tag(t))
.skip(keep)
.filter(|t| !protected.contains(t))
.cloned()
.collect()
}
/// Whether a running program was started from the version's folder: the game and a server take
/// their program and `--resources` from it. Windows refuses to delete a running program's files,
/// so there the delete itself fails. With no answer from `ps` the version counts as running.
#[cfg(unix)]
fn in_use(tag: &str) -> bool {
let dir = format!("{}/", version_dir(tag).display());
Command::new("ps")
.args(["-A", "-ww", "-o", "args="])
.output()
.ok()
.is_none_or(|out| String::from_utf8_lossy(&out.stdout).contains(&dir))
}
#[cfg(not(unix))]
fn in_use(_tag: &str) -> bool {
false
}
/// Deletes the release versions nothing needs after an install or update, unless the player
/// turned that off: all but the newest few (`Settings::keep_newest`), the selected version, the
/// ones instances pin and the ones a program is running from. A version that does not delete
/// is logged and the rest still go. Returns the versions deleted. They install again from GitHub.
pub fn prune_old_versions() -> Vec<String> {
let settings = Settings::load();
if !settings.auto_prune() {
return Vec::new();
}
let mut protected: Vec<String> = settings.selected.iter().cloned().collect();
protected.extend(
crate::instances::list()
.into_iter()
.filter_map(|i| i.version),
);
let mut gone = Vec::new();
for tag in stale_versions(&installed(), settings.keep_newest(), &protected) {
if in_use(&tag) {
eprintln!("Keeping old version {tag}: the game is running from it.");
continue;
}
match remove(&tag) {
Ok(()) => {
eprintln!("Removed old version {tag}.");
gone.push(tag);
}
Err(e) => eprintln!("Could not remove old version {tag}: {e}"),
}
}
gone
}
/// The Minecraft folder to prepare from: the one given, the one chosen in the launcher, or the
/// official launcher's default. It may be absent when imported files can be reused.
pub fn minecraft_dir(requested: Option<PathBuf>) -> Result<PathBuf, String> {
@@ -2238,6 +2321,7 @@ pub fn install_tag(tag: &str, as_update: bool, progress: impl Fn(f32)) -> Result
if as_update && release.nightly.is_some() {
crate::nightly::after_update(&release.tag);
}
prune_old_versions();
Ok(release.tag.clone())
}
@@ -2563,6 +2647,10 @@ pub enum Msg {
Installed(String, Result<(), String>),
/// A version's files are gone (or could not be deleted).
Removed(String, Result<(), String>),
/// `prune_old_versions` ended; these versions were deleted.
Pruned(Vec<String>),
/// What each installed version takes on disk (`disk_use`).
DiskUse(Vec<(String, u64)>),
Line(Job, String),
Exit(Job, Result<(), String>),
/// Boxed: two releases, the largest message by far.
@@ -2724,6 +2812,13 @@ pub struct Settings {
/// `auto_install` (off by default) for everyone, so this is a new key and that one is ignored.
#[serde(default)]
pub install_new_versions: Option<bool>,
/// Unset means on: after an install the launcher deletes the release versions nothing needs
/// (`prune_old_versions`). Only a player who turned it off has `false` here.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prune_old_versions: Option<bool>,
/// How many of the newest release versions pruning keeps. Unset means [`KEEP_NEWEST`].
#[serde(default, skip_serializing_if = "Option::is_none")]
pub keep_versions: Option<usize>,
/// Off by default, so the opening animation shows unless the player turns it off.
#[serde(default)]
pub skip_opening: bool,
@@ -2830,6 +2925,14 @@ impl Settings {
pub fn auto_install(&self) -> bool {
self.install_new_versions.unwrap_or(true)
}
/// Whether old versions are deleted after an install.
pub fn auto_prune(&self) -> bool {
self.prune_old_versions.unwrap_or(true)
}
/// How many of the newest release versions pruning keeps: at least the newest.
pub fn keep_newest(&self) -> usize {
self.keep_versions.unwrap_or(KEEP_NEWEST).max(1)
}
pub fn save(&self) {
let _ = fs::create_dir_all(data_dir());
let _ = fs::write(
@@ -4279,6 +4382,24 @@ mod tests {
let _ = fs::remove_dir_all(&dir);
}
#[test]
fn pruning_keeps_the_newest_and_the_protected() {
let tags = |t: &[&str]| t.iter().map(|s| s.to_string()).collect::<Vec<_>>();
let installed = tags(&[
"v0.2.91", "v0.2.90", "v0.2.88", "v0.2.85", "v0.2.80", "nightly",
]);
assert_eq!(
stale_versions(&installed, 2, &tags(&["v0.2.85"])),
tags(&["v0.2.88", "v0.2.80"])
);
// A protected version among the newest still leaves the newest `keep` in place.
assert_eq!(
stale_versions(&installed, 2, &tags(&["v0.2.91"])),
tags(&["v0.2.88", "v0.2.85", "v0.2.80"])
);
assert!(stale_versions(&installed, 9, &[]).is_empty());
}
#[test]
fn crash_reports_are_found_and_summarised() {
let dir =
+21 -3
View File
@@ -675,8 +675,10 @@ enum Cmd {
},
/// Show the launcher's settings, or set one (the Settings page): selected-version TAG,
/// minecraft-dir PATH, server-dir PATH ("default" resets a folder), install-new-versions
/// on|off, opening-animation on|off, proxy http://host:port ("default" removes it),
/// while-playing stay|minimize|hide (what the window does while the game runs), language
/// on|off, prune-old-versions on|off (delete old versions after an install, keeping the
/// selected one, the ones instances use and the newest few), keep-versions N (how many of the
/// newest to keep; "default" is 2), opening-animation on|off, proxy http://host:port
/// ("default" removes it), while-playing stay|minimize|hide (what the window does while the game runs), language
/// system|en|fr|ru (the window's language; system follows the computer's), accent
/// violet|blue|teal|green|amber|red|pink, background PATH (a picture behind Home; "default"
/// shows Horizon's landscape)
@@ -827,11 +829,13 @@ pub fn command() -> clap::Command {
pub const AI_COMMANDS: [&str; 2] = ["mcp", "agent-config"];
/// The keys `settings` sets.
const SETTING_KEYS: [&str; 10] = [
const SETTING_KEYS: [&str; 12] = [
"selected-version",
"minecraft-dir",
"server-dir",
"install-new-versions",
"prune-old-versions",
"keep-versions",
"opening-animation",
"proxy",
"while-playing",
@@ -855,6 +859,18 @@ fn set_setting(s: &mut backend::Settings, key: &str, value: &str) -> Result<(),
"minecraft-dir" => s.minecraft_dir = folder(value),
"server-dir" => s.server_dir = folder(value),
"install-new-versions" => s.install_new_versions = Some(on_off(value)?),
"prune-old-versions" => s.prune_old_versions = Some(on_off(value)?),
"keep-versions" => {
s.keep_versions = match value {
"default" => None,
n => Some(
n.parse::<usize>()
.ok()
.filter(|n| *n > 0)
.ok_or_else(|| format!("{value}: say a number from 1, or default"))?,
),
}
}
"opening-animation" => s.skip_opening = !on_off(value)?,
"while-playing" => {
s.while_playing = backend::WhilePlaying::parse(value)
@@ -907,6 +923,8 @@ fn settings_json(s: &backend::Settings) -> serde_json::Value {
"minecraft_dir": s.minecraft_dir,
"server_dir": backend::server_dir(None),
"install_new_versions": s.install_new_versions.unwrap_or(true),
"prune_old_versions": s.auto_prune(),
"keep_versions": s.keep_newest(),
"opening_animation": !s.skip_opening,
"game_args": s.game_args,
"proxy": s.proxy,
+71 -1
View File
@@ -170,6 +170,10 @@ struct Launcher {
/// The version being deleted on a background thread. It is already out of `installed`, so
/// nothing can launch, select or prepare it, and its row can't install or remove it again.
removing: Option<String>,
/// What each installed version takes on disk, measured on a thread for the Versions page, and
/// the installed list it was measured for.
disk: Vec<(String, u64)>,
disk_for: Vec<String>,
install_error: Option<(String, String)>,
/// Native mods (`native_mods`): the build's step while it runs, why it failed, and the
/// warning before a build while it is open, with the mods it names.
@@ -391,6 +395,8 @@ impl Launcher {
installed,
installing: None,
removing: None,
disk: Vec::new(),
disk_for: Vec::new(),
install_error: None,
native_step: None,
native_error: None,
@@ -777,6 +783,11 @@ impl Launcher {
self.settings.selected = Some(tag);
}
self.settings.save();
// After the save: the selected version is never pruned.
let tx = self.tx.clone();
std::thread::spawn(move || {
let _ = tx.send(Msg::Pruned(backend::prune_old_versions()));
});
}
Err(e) => self.install_error = Some((tag, e)),
}
@@ -792,6 +803,12 @@ impl Launcher {
self.install_error = Some((tag, e));
}
}
Msg::DiskUse(disk) => self.disk = disk,
Msg::Pruned(gone) => {
if !gone.is_empty() {
self.installed = backend::installed();
}
}
Msg::Updates(Ok(updates)) => {
self.update_error = None;
self.updates = *updates;
@@ -2897,6 +2914,13 @@ impl Launcher {
cx.notify();
}),
);
let prune = switch("auto-prune", self.settings.auto_prune(), &t).on_click(cx.listener(
|this, _: &ClickEvent, _, cx| {
this.settings.prune_old_versions = Some(!this.settings.auto_prune());
this.settings.save();
cx.notify();
},
));
let opening = switch("opening", !self.settings.skip_opening, &t).on_click(cx.listener(
|this, _: &ClickEvent, _, cx| {
this.settings.skip_opening = !this.settings.skip_opening;
@@ -3047,6 +3071,20 @@ impl Launcher {
Some(toggle.into_any_element()),
&t,
))
.child(index_row(
n + 2,
tr("Delete old versions automatically"),
Some(
div()
.child(trf(
"Keeps the {count} newest, the one in use and the ones your instances use. Deleted versions install again from the Versions page.",
&[("count", &self.settings.keep_newest().to_string())],
))
.into_any_element(),
),
Some(prune.into_any_element()),
&t,
))
.child(group("Launcher", "monitor"))
.child(index_row(
n + 3,
@@ -3664,7 +3702,36 @@ impl Launcher {
"Builds from GitHub. Each one installs into its own folder.",
&t,
);
let page = div().flex().flex_col().gap(px(32.)).child(header);
// Measured again when the installed versions change.
if self.disk_for != self.installed {
self.disk_for = self.installed.clone();
let (tags, tx) = (self.installed.clone(), self.tx.clone());
std::thread::spawn(move || {
let disk = tags.into_iter().map(|t| {
let n = backend::disk_use(&t);
(t, n)
});
let _ = tx.send(Msg::DiskUse(disk.collect()));
});
}
let on_disk = |tag: &String| {
let found = self.disk.iter().find(|(t, _)| t == tag);
found
.filter(|_| self.installed.contains(tag))
.map(|(_, n)| *n)
};
let used: u64 = self.installed.iter().filter_map(on_disk).sum();
let page = div()
.flex()
.flex_col()
.gap(px(32.))
.child(header)
.children((used > 0).then(|| {
text(theme::UI).text_color(t.muted).child(trf(
"Installed versions use {size}.",
&[("size", &megabytes(used))],
))
}));
let releases = match &self.releases {
Load::Loading => return page.child(centered("Loading releases…", &t)),
Load::Failed(e) => {
@@ -3702,6 +3769,9 @@ impl Launcher {
if let Some((_, size)) = release.asset {
meta.push(megabytes(size));
}
if let Some(n) = on_disk(&tag) {
meta.push(trf("{size} on disk", &[("size", &megabytes(n))]));
}
let summary = release
.name
.split_once(": ")
+2730
View File
File diff suppressed because it is too large. Load diff
+143
View File
@@ -0,0 +1,143 @@
AgeableWaterCreature.handleAirSupply inline crates/horizon-client/src/mobs/ai.rs::base_tick the needs_water branch of base_tick; dolphins override it to nothing and refill air in aquatic.rs
AgeableWaterCreature.checkSurfaceAgeableWaterCreatureSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::surface_water
Animal.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt InLove is read; LoveCause is not kept
Animal.canMate port crates/horizon-client/src/mobs/animal_brain.rs::can_mate_with brain breeding; the Breed goal in goals.rs does the same for goal-driven animals
Animal.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 18 love hearts
Animal.getDismountLocationForPassenger port crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: tries both sides by the mob's yaw, then on top; not DismountHelper's offsets and pose boxes
Allay.createAttributes skip:data attributes come from entity-types.json
Allay.createNavigation port crates/horizon-client/src/mobs/allay.rs::register flying navigation, required path length 48
Allay.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta dancing and can_duplicate
Allay.isLikedPlayer inline crates/horizon-client/src/mobs/ai.rs::accepts_damage a tame allay ignores damage from any player (not compared by UUID); considersEntityAsAlly is not ported
Allay.setJukeboxPlaying inline crates/horizon-client/src/game/allays.rs::Game::tick_allays polls playing jukeboxes within 10 blocks every tick instead of listening for jukebox events; no remembered jukebox
Allay.wantsToPickUp inline crates/horizon-client/src/game/allays.rs::Game::tick_allays same item within 32 blocks, mob_griefing on
Allay.allayConsidersItemEqual inline crates/horizon-client/src/game/allays.rs::Game::tick_allays gap: compares item ids only, the held item keeps no potion contents
Allay.hasNonMatchingPotion missing an allay holding a potion also fetches other potion types; the held item is only an id
Allay.updateDynamicGameEventListener inline crates/horizon-client/src/game/allays.rs::Game::tick_allays jukebox is polled; there is no vibration listener
Allay.setDancing inline crates/horizon-client/src/game/allays.rs::Game::tick_allays dancing set while a jukebox plays and not panicking
Allay.shouldStopDancing inline crates/horizon-client/src/game/allays.rs::Game::tick_allays no jukebox within 10 blocks stops the dance
Allay.isSpinning inline crates/horizon-client/src/mobs/allay.rs::animate dance clock modulo 55 below 15
Allay.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt inventory, DuplicationCooldown and liked player; vibration listener data is not written
Allay.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt
Allay.updateDuplicationCooldown inline crates/horizon-client/src/mobs/allay.rs::ai_step egg_time counts down
Allay.setDuplicationCooldown inline crates/horizon-client/src/game/allays.rs::Game::interact_allay 6000 set here; can_duplicate is derived from egg_time in mob_meta
Allay.getLeashOffset missing lead hangs at the default offset (eye height), not 0.6 of it; leash::leash_offset only special-cases llamas
Allay.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 18, three hearts
Allay.spawnHeartParticle port crates/horizon-client/src/particles.rs::around_self one heart's random placement
Allay.VibrationUser.canReceiveVibration missing allays never listen for vibrations: a note block played near one is not remembered
AllayAi.initCoreActivity inline crates/horizon-client/src/mobs/allay.rs::register panic goal; the cooldown countdowns are plain ints
AllayAi.initIdleActivity inline crates/horizon-client/src/mobs/allay.rs::register fetch, deliver, stay close, stroll and look as goals instead of a brain
AllayAi.hearNoteblock missing no liked note block: an allay never learns one, so items always go to the player
AllayAi.getItemDepositPosition port crates/horizon-client/src/mobs/allay.rs::deposit
AllayAi.shouldDepositItemsAtLikedNoteblock inline crates/horizon-client/src/mobs/allay.rs::deposit cooldown test only; the note block's existence and distance are not rechecked
AllayAi.getLikedPlayerPositionTracker port crates/horizon-client/src/game/allays.rs::Game::allay_liked_player
Armadillo.shouldSwitchToScaredState inline crates/horizon-client/src/mobs/armadillo.rs::ball_up_tick rolling past its animation length
Armadillo.onSyncedDataUpdated port crates/horizon-client/src/mobs/armadillo.rs::set_state resets in_state_ticks on a state change
Armadillo.checkArmadilloSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
Armadillo.brushOffScute port crates/horizon-client/src/game/creatures.rs::Game::interact_armadillo brush use; dispenser.rs dispense_brush does the same for a dispenser
ArmadilloAi.initCoreActivity inline crates/horizon-client/src/mobs/armadillo.rs::register float and panic goals; rolling out is in server_ai_step
ArmadilloAi.initIdleActivity inline crates/horizon-client/src/mobs/armadillo.rs::register gap: only look, stroll and random look; no AnimalMakeLove, FollowTemptation or BabyFollowAdult, so armadillos never seek a partner, follow food or have babies follow adults
ArmadilloAi.initScaredActivity inline crates/horizon-client/src/mobs/armadillo.rs::server_ai_step the PANIC activity and ArmadilloBallUp
Axolotl.<init> port crates/horizon-client/src/mobs/aquatic.rs::register the Axolotl arm: smooth swimming move and look control, amphibious navigation, water malus 0
Axolotl.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta variant and playing_dead; from_bucket is not synced
Axolotl.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Variant is written; FromBucket is not
Axolotl.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant Variant is read; FromBucket is not
Axolotl.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize group variants and baby age
Axolotl.tickBabyAnimations inline crates/horizon-client/src/mobs/axolotl.rs::Animation::tick the baby branch
Axolotl.soloAnimation inline crates/horizon-client/src/mobs/axolotl.rs::Animation::tick one state started, the rest stopped
Axolotl.tickAdultAnimations inline crates/horizon-client/src/mobs/axolotl.rs::Animation::tick the binary animators
Axolotl.rehydrate missing a thrown water bottle does not refill an axolotl's air; splash water has no effect on mobs
Axolotl.get port crates/horizon-client/src/entity_nbt.rs::bucket_components axolotl/variant component written to the bucket
Axolotl.applyImplicitComponent port crates/horizon-client/src/entity_nbt.rs::load_bucket_data axolotl/variant read from the bucket
Axolotl.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: baby takes the first parent's colour; no random parent, no 1-in-1200 blue, not set persistent
Axolotl.createAttributes skip:data attributes come from entity-types.json
Axolotl.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob a water bucket scoops it up (bucketable)
Axolotl.loadFromBucketTag port crates/horizon-client/src/entity_nbt.rs::load_bucket_data age, age lock and hunting cooldown
Axolotl.applySupportingEffects inline crates/horizon-client/src/game/creatures.rs::Game::handle_mob_events the AxolotlSupportPlayer event: regeneration and no mining fatigue, host player only
Axolotl.usePlayerItem missing feeding a tropical fish bucket uses up the whole bucket; vanilla hands back a water bucket
Axolotl.Variant.getSpawnVariant port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: the common pick for spawn groups only; the rare (blue) pick is never drawn
AxolotlAi.initPlayDeadActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
AxolotlAi.initFightActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
AxolotlAi.initCoreActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
AxolotlAi.initIdleActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
AxolotlAi.canSetWalkTargetFromLookTarget port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_action the WalkFromLook arm
PlayDead.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::B::tick_or_stop the PlayDead behaviour: in water and ticks present
PlayDead.start inline crates/horizon-client/src/mobs/animal_brain.rs::B::try_start clears targets, regeneration for 200 ticks
Bee.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta flags and anger end time
Bee.registerGoals port crates/horizon-client/src/mobs/bee.rs::register
Bee.spawnFluidParticle port crates/horizon-client/src/mobs/ambient.rs::client_particles the nectar drip
Bee.updateRollAmount inline crates/horizon-client/src/mobs/bee.rs::tick
Bee.isHiveNearFire port crates/horizon-client/src/mobs/bee.rs::hive_near_fire
Bee.doesHiveHaveSpace inline crates/horizon-client/src/mobs/bee.rs::hives_with_space the beehive's full() filter
Bee.getFlag port crates/horizon-client/src/mobs/bee.rs::flag
Bee.createAttributes skip:data attributes come from entity-types.json
Bee.createNavigation port crates/horizon-client/src/mobs/bee.rs::register flying navigation; stable_destination is the isStableDestination override
Bee.isFlapping missing a flying bee gives off no flap vibration, so sculk sensors never hear it
Bee.getLeashOffset missing lead hangs at the default offset, not half the eye height
Bee.registerDebugValues skip:debug
Bee.BaseBeeGoal.canContinueToUse port crates/horizon-client/src/mobs/bee.rs::calm not angry
Bee.BeeBecomeAngryTargetGoal.canContinueToUse port crates/horizon-client/src/mobs/bee.rs::BecomeAngryTarget::can_continue
Bee.BeeGoToHiveGoal.blacklistTarget inline crates/horizon-client/src/mobs/bee.rs::GoToHive::drop_and_blacklist keeps the last three
Bee.BeeLocateHiveGoal.findNearbyHivesWithSpace port crates/horizon-client/src/mobs/bee.rs::hives_with_space
Bee.BeePollinateGoal.canBeeContinueToUse port crates/horizon-client/src/mobs/bee.rs::Pollinate::can_continue
Bee.BeePollinateGoal.setWantedPos port crates/horizon-client/src/mobs/bee.rs::Pollinate::set_wanted
Bee.BeeWanderGoal.findPos inline crates/horizon-client/src/mobs/bee.rs::Wander::start
Bee.BeeWanderGoal.getWanderThreshold inline crates/horizon-client/src/mobs/bee.rs::Wander::start always 24: it only applies with a valid hive
Bee.ValidateHiveGoal.canBeeUse port crates/horizon-client/src/mobs/bee.rs::ValidateHive::can_use
Camel.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt LastPoseTick is written as -1 or 0, not the real tick
Camel.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt sitting is read from the sign of LastPoseTick
Camel.createAttributes skip:data attributes come from entity-types.json
Camel.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta dash and last pose change tick
Camel.checkCamelSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
Camel.getDefaultDimensions missing a sitting camel keeps its standing hitbox; Mob::dims has no sitting size
Camel.updateWalkAnimation missing legs use the default walk animation: no zero while sitting or dashing, 0.4 smoothing, no x3 for babies
Camel.travel inline crates/horizon-client/src/mobs/camel.rs::ai_step refuse_to_move zeroes horizontal motion and input
Camel.getRiddenSpeed inline crates/horizon-client/src/mobs/equine.rs::ridden_step 0.1 sprint bonus when the dash is ready
Camel.getRiddenRotation missing a ridden camel that is sitting or changing pose still turns with the rider's view; vanilla holds its rotation
Camel.onPlayerJump inline crates/horizon-client/src/mobs/camel.rs::dash the cooldown, ground and refuse_to_move gates
Camel.handleStartJump port crates/horizon-client/src/mobs/camel.rs::dash dash sound and dashing flag; no entity_action game event
Camel.mobInteract port crates/horizon-client/src/game/mounts.rs::Game::interact_mount inventory on sneak, feeding, riding
Camel.onElasticLeashPull missing a leashed sitting camel does not stand up when the lead pulls
Camel.canMate port crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: no canParent checks for camels (full health, not ridden)
Camel.getBodyAnchorAnimationYOffset port crates/horizon-client/src/game/mounts.rs::Game::position_rider gap: sitting or standing height only, no sit/stand transition interpolation
Camel.getLeashOffset missing lead hangs at the default offset, not at the camel's body anchor
Camel.isCamelSitting port crates/horizon-client/src/mobs/camel.rs::sitting
Camel.isCamelVisuallySitting inline crates/horizon-client/src/mobs/camel.rs::animation_states
Camel.isInPoseTransition port crates/horizon-client/src/mobs/camel.rs::in_transition
Camel.isVisuallySittingDown inline crates/horizon-client/src/mobs/camel.rs::animation_states
Camel.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound gap: saddling by hand in interact_mount plays the horse sound for camels
CamelAi.initCoreActivity inline crates/horizon-client/src/mobs/camel.rs::register float and CamelPanic goals
CamelAi.initIdleActivity inline crates/horizon-client/src/mobs/camel.rs::register breed, tempt, follow parent, stroll, random sitting, look
CamelAi.CamelPanic.checkExtraStartConditions port crates/horizon-client/src/mobs/camel.rs::CamelPanic::can_use
CamelAi.RandomSitting.checkExtraStartConditions port crates/horizon-client/src/mobs/camel.rs::RandomSitting::can_use gap: no leash or suffocation (canCamelChangePose) check
Chicken.registerGoals port crates/horizon-client/src/mobs/farm.rs::register
Chicken.getSoundSet inline crates/horizon-client/src/mobs/ai.rs::voice_sounds gap: baby sets only; the picky sound variant is stored but never used
Chicken.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: baby copies the first parent's variant, no random parent
Chicken.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome and a random sound variant
Chicken.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: variant is synced, sound variant is not
Chicken.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt EggLayTime, variant, sound_variant; jockey in riders.rs
Chicken.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt
Chicken.get port crates/horizon-client/src/mobs/finalize.rs::variant_component gap: chicken/variant only, no chicken/sound_variant
Chicken.applyImplicitComponents missing variant components on a spawn egg or item are ignored; the mob gets its biome variant
Chicken.applyImplicitComponent missing see applyImplicitComponents
Chicken.positionRider inline crates/horizon-client/src/game/passengers.rs::Game::position_riders every mob rider copies its vehicle's body yaw, not only chicken riders
ChickenVariants skip:data chicken variants come from the registry data files
AbstractCow.registerGoals port crates/horizon-client/src/mobs/farm.rs::register
AbstractCow.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob the Cow/Mooshroom bucket arm gives milk
Cow.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: variant is synced, sound variant is not
Cow.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt
Cow.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt
Cow.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: baby copies the first parent's variant, no random parent
Cow.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome and a random sound variant
CowVariants skip:data cow variants come from the registry data files
MushroomCow.getWalkTargetValue port crates/horizon-client/src/mobs/spawn_selection.rs::mob_spawn_rules gap: only the spawn check has the mycelium rule; ai.rs walk_target_value uses the grass rule for strolling
MushroomCow.checkMushroomSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
MushroomCow.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit swaps colour once per bolt, convert sound
MushroomCow.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta the type entry
MushroomCow.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob gap: bowl stew and shearing are done; feeding a flower to a brown mooshroom (suspicious stew) is missing
MushroomCow.addAdditionalSaveData missing Type and stew_effects are not written from the live mob: a colour change (lightning) is not saved
MushroomCow.readAdditionalSaveData missing Type is not read: a saved brown mooshroom loads red
MushroomCow.getEffectsFromItemStack missing no suspicious stew effects from flowers: a brown mooshroom never takes a flower
MushroomCow.get missing mooshroom/variant component is not reported; species_variant_component has no mooshroom
MushroomCow.applyImplicitComponent missing mooshroom/variant component on a spawn egg is ignored
MushroomCow.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed see getOffspringVariant
MushroomCow.getOffspringVariant missing baby copies the first parent's colour: no 50/50 mix, no 1-in-1024 chance of the other colour
1 AgeableWaterCreature.handleAirSupply inline crates/horizon-client/src/mobs/ai.rs::base_tick the needs_water branch of base_tick; dolphins override it to nothing and refill air in aquatic.rs
2 AgeableWaterCreature.checkSurfaceAgeableWaterCreatureSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::surface_water
3 Animal.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt InLove is read; LoveCause is not kept
4 Animal.canMate port crates/horizon-client/src/mobs/animal_brain.rs::can_mate_with brain breeding; the Breed goal in goals.rs does the same for goal-driven animals
5 Animal.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 18 love hearts
6 Animal.getDismountLocationForPassenger port crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: tries both sides by the mob's yaw, then on top; not DismountHelper's offsets and pose boxes
7 Allay.createAttributes skip:data attributes come from entity-types.json
8 Allay.createNavigation port crates/horizon-client/src/mobs/allay.rs::register flying navigation, required path length 48
9 Allay.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta dancing and can_duplicate
10 Allay.isLikedPlayer inline crates/horizon-client/src/mobs/ai.rs::accepts_damage a tame allay ignores damage from any player (not compared by UUID); considersEntityAsAlly is not ported
11 Allay.setJukeboxPlaying inline crates/horizon-client/src/game/allays.rs::Game::tick_allays polls playing jukeboxes within 10 blocks every tick instead of listening for jukebox events; no remembered jukebox
12 Allay.wantsToPickUp inline crates/horizon-client/src/game/allays.rs::Game::tick_allays same item within 32 blocks, mob_griefing on
13 Allay.allayConsidersItemEqual inline crates/horizon-client/src/game/allays.rs::Game::tick_allays gap: compares item ids only, the held item keeps no potion contents
14 Allay.hasNonMatchingPotion missing an allay holding a potion also fetches other potion types; the held item is only an id
15 Allay.updateDynamicGameEventListener inline crates/horizon-client/src/game/allays.rs::Game::tick_allays jukebox is polled; there is no vibration listener
16 Allay.setDancing inline crates/horizon-client/src/game/allays.rs::Game::tick_allays dancing set while a jukebox plays and not panicking
17 Allay.shouldStopDancing inline crates/horizon-client/src/game/allays.rs::Game::tick_allays no jukebox within 10 blocks stops the dance
18 Allay.isSpinning inline crates/horizon-client/src/mobs/allay.rs::animate dance clock modulo 55 below 15
19 Allay.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt inventory, DuplicationCooldown and liked player; vibration listener data is not written
20 Allay.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt
21 Allay.updateDuplicationCooldown inline crates/horizon-client/src/mobs/allay.rs::ai_step egg_time counts down
22 Allay.setDuplicationCooldown inline crates/horizon-client/src/game/allays.rs::Game::interact_allay 6000 set here; can_duplicate is derived from egg_time in mob_meta
23 Allay.getLeashOffset missing lead hangs at the default offset (eye height), not 0.6 of it; leash::leash_offset only special-cases llamas
24 Allay.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 18, three hearts
25 Allay.spawnHeartParticle port crates/horizon-client/src/particles.rs::around_self one heart's random placement
26 Allay.VibrationUser.canReceiveVibration missing allays never listen for vibrations: a note block played near one is not remembered
27 AllayAi.initCoreActivity inline crates/horizon-client/src/mobs/allay.rs::register panic goal; the cooldown countdowns are plain ints
28 AllayAi.initIdleActivity inline crates/horizon-client/src/mobs/allay.rs::register fetch, deliver, stay close, stroll and look as goals instead of a brain
29 AllayAi.hearNoteblock missing no liked note block: an allay never learns one, so items always go to the player
30 AllayAi.getItemDepositPosition port crates/horizon-client/src/mobs/allay.rs::deposit
31 AllayAi.shouldDepositItemsAtLikedNoteblock inline crates/horizon-client/src/mobs/allay.rs::deposit cooldown test only; the note block's existence and distance are not rechecked
32 AllayAi.getLikedPlayerPositionTracker port crates/horizon-client/src/game/allays.rs::Game::allay_liked_player
33 Armadillo.shouldSwitchToScaredState inline crates/horizon-client/src/mobs/armadillo.rs::ball_up_tick rolling past its animation length
34 Armadillo.onSyncedDataUpdated port crates/horizon-client/src/mobs/armadillo.rs::set_state resets in_state_ticks on a state change
35 Armadillo.checkArmadilloSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
36 Armadillo.brushOffScute port crates/horizon-client/src/game/creatures.rs::Game::interact_armadillo brush use; dispenser.rs dispense_brush does the same for a dispenser
37 ArmadilloAi.initCoreActivity inline crates/horizon-client/src/mobs/armadillo.rs::register float and panic goals; rolling out is in server_ai_step
38 ArmadilloAi.initIdleActivity inline crates/horizon-client/src/mobs/armadillo.rs::register gap: only look, stroll and random look; no AnimalMakeLove, FollowTemptation or BabyFollowAdult, so armadillos never seek a partner, follow food or have babies follow adults
39 ArmadilloAi.initScaredActivity inline crates/horizon-client/src/mobs/armadillo.rs::server_ai_step the PANIC activity and ArmadilloBallUp
40 Axolotl.<init> port crates/horizon-client/src/mobs/aquatic.rs::register the Axolotl arm: smooth swimming move and look control, amphibious navigation, water malus 0
41 Axolotl.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta variant and playing_dead; from_bucket is not synced
42 Axolotl.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Variant is written; FromBucket is not
43 Axolotl.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant Variant is read; FromBucket is not
44 Axolotl.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize group variants and baby age
45 Axolotl.tickBabyAnimations inline crates/horizon-client/src/mobs/axolotl.rs::Animation::tick the baby branch
46 Axolotl.soloAnimation inline crates/horizon-client/src/mobs/axolotl.rs::Animation::tick one state started, the rest stopped
47 Axolotl.tickAdultAnimations inline crates/horizon-client/src/mobs/axolotl.rs::Animation::tick the binary animators
48 Axolotl.rehydrate missing a thrown water bottle does not refill an axolotl's air; splash water has no effect on mobs
49 Axolotl.get port crates/horizon-client/src/entity_nbt.rs::bucket_components axolotl/variant component written to the bucket
50 Axolotl.applyImplicitComponent port crates/horizon-client/src/entity_nbt.rs::load_bucket_data axolotl/variant read from the bucket
51 Axolotl.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: baby takes the first parent's colour; no random parent, no 1-in-1200 blue, not set persistent
52 Axolotl.createAttributes skip:data attributes come from entity-types.json
53 Axolotl.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob a water bucket scoops it up (bucketable)
54 Axolotl.loadFromBucketTag port crates/horizon-client/src/entity_nbt.rs::load_bucket_data age, age lock and hunting cooldown
55 Axolotl.applySupportingEffects inline crates/horizon-client/src/game/creatures.rs::Game::handle_mob_events the AxolotlSupportPlayer event: regeneration and no mining fatigue, host player only
56 Axolotl.usePlayerItem missing feeding a tropical fish bucket uses up the whole bucket; vanilla hands back a water bucket
57 Axolotl.Variant.getSpawnVariant port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: the common pick for spawn groups only; the rare (blue) pick is never drawn
58 AxolotlAi.initPlayDeadActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
59 AxolotlAi.initFightActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
60 AxolotlAi.initCoreActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
61 AxolotlAi.initIdleActivity port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_package
62 AxolotlAi.canSetWalkTargetFromLookTarget port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_action the WalkFromLook arm
63 PlayDead.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::B::tick_or_stop the PlayDead behaviour: in water and ticks present
64 PlayDead.start inline crates/horizon-client/src/mobs/animal_brain.rs::B::try_start clears targets, regeneration for 200 ticks
65 Bee.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta flags and anger end time
66 Bee.registerGoals port crates/horizon-client/src/mobs/bee.rs::register
67 Bee.spawnFluidParticle port crates/horizon-client/src/mobs/ambient.rs::client_particles the nectar drip
68 Bee.updateRollAmount inline crates/horizon-client/src/mobs/bee.rs::tick
69 Bee.isHiveNearFire port crates/horizon-client/src/mobs/bee.rs::hive_near_fire
70 Bee.doesHiveHaveSpace inline crates/horizon-client/src/mobs/bee.rs::hives_with_space the beehive's full() filter
71 Bee.getFlag port crates/horizon-client/src/mobs/bee.rs::flag
72 Bee.createAttributes skip:data attributes come from entity-types.json
73 Bee.createNavigation port crates/horizon-client/src/mobs/bee.rs::register flying navigation; stable_destination is the isStableDestination override
74 Bee.isFlapping missing a flying bee gives off no flap vibration, so sculk sensors never hear it
75 Bee.getLeashOffset missing lead hangs at the default offset, not half the eye height
76 Bee.registerDebugValues skip:debug
77 Bee.BaseBeeGoal.canContinueToUse port crates/horizon-client/src/mobs/bee.rs::calm not angry
78 Bee.BeeBecomeAngryTargetGoal.canContinueToUse port crates/horizon-client/src/mobs/bee.rs::BecomeAngryTarget::can_continue
79 Bee.BeeGoToHiveGoal.blacklistTarget inline crates/horizon-client/src/mobs/bee.rs::GoToHive::drop_and_blacklist keeps the last three
80 Bee.BeeLocateHiveGoal.findNearbyHivesWithSpace port crates/horizon-client/src/mobs/bee.rs::hives_with_space
81 Bee.BeePollinateGoal.canBeeContinueToUse port crates/horizon-client/src/mobs/bee.rs::Pollinate::can_continue
82 Bee.BeePollinateGoal.setWantedPos port crates/horizon-client/src/mobs/bee.rs::Pollinate::set_wanted
83 Bee.BeeWanderGoal.findPos inline crates/horizon-client/src/mobs/bee.rs::Wander::start
84 Bee.BeeWanderGoal.getWanderThreshold inline crates/horizon-client/src/mobs/bee.rs::Wander::start always 24: it only applies with a valid hive
85 Bee.ValidateHiveGoal.canBeeUse port crates/horizon-client/src/mobs/bee.rs::ValidateHive::can_use
86 Camel.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt LastPoseTick is written as -1 or 0, not the real tick
87 Camel.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt sitting is read from the sign of LastPoseTick
88 Camel.createAttributes skip:data attributes come from entity-types.json
89 Camel.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta dash and last pose change tick
90 Camel.checkCamelSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
91 Camel.getDefaultDimensions missing a sitting camel keeps its standing hitbox; Mob::dims has no sitting size
92 Camel.updateWalkAnimation missing legs use the default walk animation: no zero while sitting or dashing, 0.4 smoothing, no x3 for babies
93 Camel.travel inline crates/horizon-client/src/mobs/camel.rs::ai_step refuse_to_move zeroes horizontal motion and input
94 Camel.getRiddenSpeed inline crates/horizon-client/src/mobs/equine.rs::ridden_step 0.1 sprint bonus when the dash is ready
95 Camel.getRiddenRotation missing a ridden camel that is sitting or changing pose still turns with the rider's view; vanilla holds its rotation
96 Camel.onPlayerJump inline crates/horizon-client/src/mobs/camel.rs::dash the cooldown, ground and refuse_to_move gates
97 Camel.handleStartJump port crates/horizon-client/src/mobs/camel.rs::dash dash sound and dashing flag; no entity_action game event
98 Camel.mobInteract port crates/horizon-client/src/game/mounts.rs::Game::interact_mount inventory on sneak, feeding, riding
99 Camel.onElasticLeashPull missing a leashed sitting camel does not stand up when the lead pulls
100 Camel.canMate port crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: no canParent checks for camels (full health, not ridden)
101 Camel.getBodyAnchorAnimationYOffset port crates/horizon-client/src/game/mounts.rs::Game::position_rider gap: sitting or standing height only, no sit/stand transition interpolation
102 Camel.getLeashOffset missing lead hangs at the default offset, not at the camel's body anchor
103 Camel.isCamelSitting port crates/horizon-client/src/mobs/camel.rs::sitting
104 Camel.isCamelVisuallySitting inline crates/horizon-client/src/mobs/camel.rs::animation_states
105 Camel.isInPoseTransition port crates/horizon-client/src/mobs/camel.rs::in_transition
106 Camel.isVisuallySittingDown inline crates/horizon-client/src/mobs/camel.rs::animation_states
107 Camel.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound gap: saddling by hand in interact_mount plays the horse sound for camels
108 CamelAi.initCoreActivity inline crates/horizon-client/src/mobs/camel.rs::register float and CamelPanic goals
109 CamelAi.initIdleActivity inline crates/horizon-client/src/mobs/camel.rs::register breed, tempt, follow parent, stroll, random sitting, look
110 CamelAi.CamelPanic.checkExtraStartConditions port crates/horizon-client/src/mobs/camel.rs::CamelPanic::can_use
111 CamelAi.RandomSitting.checkExtraStartConditions port crates/horizon-client/src/mobs/camel.rs::RandomSitting::can_use gap: no leash or suffocation (canCamelChangePose) check
112 Chicken.registerGoals port crates/horizon-client/src/mobs/farm.rs::register
113 Chicken.getSoundSet inline crates/horizon-client/src/mobs/ai.rs::voice_sounds gap: baby sets only; the picky sound variant is stored but never used
114 Chicken.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: baby copies the first parent's variant, no random parent
115 Chicken.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome and a random sound variant
116 Chicken.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: variant is synced, sound variant is not
117 Chicken.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt EggLayTime, variant, sound_variant; jockey in riders.rs
118 Chicken.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt
119 Chicken.get port crates/horizon-client/src/mobs/finalize.rs::variant_component gap: chicken/variant only, no chicken/sound_variant
120 Chicken.applyImplicitComponents missing variant components on a spawn egg or item are ignored; the mob gets its biome variant
121 Chicken.applyImplicitComponent missing see applyImplicitComponents
122 Chicken.positionRider inline crates/horizon-client/src/game/passengers.rs::Game::position_riders every mob rider copies its vehicle's body yaw, not only chicken riders
123 ChickenVariants skip:data chicken variants come from the registry data files
124 AbstractCow.registerGoals port crates/horizon-client/src/mobs/farm.rs::register
125 AbstractCow.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob the Cow/Mooshroom bucket arm gives milk
126 Cow.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: variant is synced, sound variant is not
127 Cow.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt
128 Cow.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt
129 Cow.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: baby copies the first parent's variant, no random parent
130 Cow.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome and a random sound variant
131 CowVariants skip:data cow variants come from the registry data files
132 MushroomCow.getWalkTargetValue port crates/horizon-client/src/mobs/spawn_selection.rs::mob_spawn_rules gap: only the spawn check has the mycelium rule; ai.rs walk_target_value uses the grass rule for strolling
133 MushroomCow.checkMushroomSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
134 MushroomCow.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit swaps colour once per bolt, convert sound
135 MushroomCow.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta the type entry
136 MushroomCow.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob gap: bowl stew and shearing are done; feeding a flower to a brown mooshroom (suspicious stew) is missing
137 MushroomCow.addAdditionalSaveData missing Type and stew_effects are not written from the live mob: a colour change (lightning) is not saved
138 MushroomCow.readAdditionalSaveData missing Type is not read: a saved brown mooshroom loads red
139 MushroomCow.getEffectsFromItemStack missing no suspicious stew effects from flowers: a brown mooshroom never takes a flower
140 MushroomCow.get missing mooshroom/variant component is not reported; species_variant_component has no mooshroom
141 MushroomCow.applyImplicitComponent missing mooshroom/variant component on a spawn egg is ignored
142 MushroomCow.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed see getOffspringVariant
143 MushroomCow.getOffspringVariant missing baby copies the first parent's colour: no 50/50 mix, no 1-in-1024 chance of the other colour
+220
View File
@@ -0,0 +1,220 @@
GlowSquid.aiStep missing player: glow squids shed no glow particles and their dark timer is not kept, so a hit squid does not dim
GlowSquid.checkGlowSquidSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::GlowSquid arm: 33 blocks below sea level, dark, in water
GlowSquid.hurtServer missing player: a glow squid hit does not get the 100-tick dark timer, so it does not dim
WolfSoundVariants skip:data registry bootstrap of the wolf sound sets; sounds are in species.rs and finalize.rs
AbstractDragonPhaseInstance.getTurnSpeed inline crates/horizon-client/src/game/dragon.rs::Game::tick_dragon 0.7 / dist / rot turn for every phase but Landing; only applied while a fly target is set
DragonChargePlayerPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Charging arm: 10-tick countdown once close; gap: minor: no collision re-target
DragonDeathPhase.doClientTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_dragon_death gap: player: the phase's explosion puff every 10 ticks through the whole dying flight is missing; only the tickDeath bursts at 180 to 200 are drawn
DragonDeathPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Dying arm sets health 1 or 0; gap: minor: egg found with the leaves-excluded heightmap, vanilla uses MOTION_BLOCKING
DragonHoldingPatternPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Holding arm; gap: minor: horizontal and vertical collision re-target not tracked (always false)
DragonHoldingPatternPhase.findNewTarget inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Holding arm: landing roll, strafe pick by egg distance, ring path
DragonHoldingPatternPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
DragonHoldingPatternPhase.onCrystalDestroyed inline crates/horizon-client/src/game/dragon.rs::Game::destroy_crystal sets strafe_request for the killer or the nearest; tick_phase strafes from Holding only
DragonHoldingPatternPhase.strafePlayer inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase phase switch to Strafe and setTarget (strafe_begin) in the Holding arm and the strafe_request block
DragonLandingApproachPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase LandingApproach arm; gap: minor: no collision re-target
DragonLandingApproachPhase.findNewTarget inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase LandingApproach arm: path to the node by the nearest enemy to the egg, last node is the podium
DragonLandingApproachPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
DragonLandingPhase.doClientTick missing player: while the dragon comes down to land its head breathes a fan of dragon-breath particles; none are spawned
DragonLandingPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Landing arm: sets flame count 0 and goes to Scanning on reaching the podium
DragonLandingPhase.getTurnSpeed inline crates/horizon-client/src/game/dragon.rs::Game::tick_dragon Landing turn min(rot,40)/rot, the one turn formula that differs from the default
DragonSittingAttackingPhase.doClientTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase gap: player: the growl is played once at the start of the 40 ticks; vanilla replays it on every client tick
DragonSittingAttackingPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Attacking arm: 40 ticks then Flaming
DragonSittingFlamingPhase.doClientTick missing player: during the first 10 ticks of a flame attack the head breathes dragon-breath particles in a fan; none are spawned
DragonSittingFlamingPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Flaming arm: the flame cloud at tick 10, 200 ticks, flame count 4 leads to Takeoff
DragonSittingScanningPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Scanning arm; gap: minor: turns every tick, vanilla skips the turn while the target is within 10 degrees of the facing
DragonTakeoffPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Takeoff arm: first tick finds a new target, later ticks go to Holding once 10 blocks from the podium
DragonTakeoffPhase.findNewTarget inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Takeoff arm; gap: minor: no path leaves an empty path, vanilla leaves none and searches again next tick
DragonTakeoffPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
EnderDragonPhase.create skip:data phase registry; the ids are fixed in Phase::id
EnderDragonPhase.createInstance port crates/horizon-client/src/game/dragon.rs::Phase::from_id builds the default instance for an id
EnderDragonPhase.getById port crates/horizon-client/src/game/dragon.rs::Phase::from_id id to phase, unknown ids fall back to Holding
Mannequin.addAdditionalSaveData missing player: a saved mannequin is written without its profile, so after a reload it wears the default skin
Mannequin.applyImplicitComponent missing minor: the profile from a spawning item is not applied; Horizon has no mannequin item, only summon with a profile tag
Mannequin.defineSynchedData inline crates/horizon-client/src/game/remote_mob_data.rs::apply gap: player: reads the profile (slot 17) only; DATA_IMMOVABLE and DATA_DESCRIPTION are not read
Mannequin.get skip:other data-component getter for the PROFILE component; the profile is Mob.profile, read directly
Mannequin.readAdditionalSaveData missing player: the profile is not read back, so a reloaded mannequin wears the default skin
Mannequin.updateDescription missing player: the mannequin's description (default 'Mannequin') is never drawn under its name
Giant.createAttributes skip:data attributes come from entity-types.json
ShootWhenStuck.checkExtraStartConditions inline crates/horizon-client/src/mobs/breeze.rs::register
Evoker.createAttributes skip:data attributes come from entity-types.json
Evoker.registerGoals port crates/horizon-client/src/mobs/illager.rs::register_evoker
Evoker.EvokerCastingSpellGoal.tick port crates/horizon-client/src/mobs/illager.rs::CastingSpell::tick looks at the target, else the wololo sheep
Pillager.applyRaidBuffs port crates/horizon-client/src/game/mob_gear.rs::Game::apply_raid_buffs
Pillager.createAttributes skip:data attributes come from entity-types.json
Pillager.finalizeSpawn inline crates/horizon-client/src/mobs/finalize.rs::Ctx::mob crossbow in the main hand via populate; the enchant roll is in Ctx::enchant
Pillager.getArmPose port crates/horizon-client/src/mobs/illager.rs::arm_pose
Pillager.getSlot missing minor: the pillager's five spare slots (ids 300 and up, used by /item) are not modelled
Pillager.pickUpItem missing player: during a raid a pillager does not pick up a white banner lying on the ground
Pillager.registerGoals port crates/horizon-client/src/mobs/illager.rs::register_pillager
Pillager.wantsItem missing player: the raid banner pickup check is missing (see pickUpItem)
PiglinBrute.createAttributes skip:data attributes come from entity-types.json
PiglinBrute.customServerAiStep inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: the brain tick is replaced by the goals set in register_brute; the activity update is in PiglinBruteAi rows
PiglinBrute.finalizeSpawn inline crates/horizon-client/src/mobs/finalize.rs::Ctx::mob golden axe in the main hand via populate; initMemories is missing
PiglinBrute.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: retaliation is the HurtByTarget goal; no PiglinAi.maybeRetaliate for non-piglin attackers
PiglinBrute.wantsToPickUp missing player: a piglin brute does not pick up a golden axe lying on the ground; piglin_pickups only serves piglins
PiglinBruteAi.createIdleLookBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: looks at players only (LookAtPlayer); no look at piglins, random look or do-nothing pause
PiglinBruteAi.createIdleMovementBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: strolls anywhere; no visits to piglins and no return to its home point
PiglinBruteAi.findNearestValidAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: targets nearest player or wither skeleton through the target goals; no anger memory first
PiglinBruteAi.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: no door opening and no stop-anger-when-target-dead rule; panic-free float only
PiglinBruteAi.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute melee goal at priority 2; attacks as the MeleeAttack goal does
PiglinBruteAi.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute idle behaviour as goals: stroll, look at player, targets
PiglinBruteAi.initMemories missing minor: no home point is remembered, so the brute never returns to where it spawned
PiglinBruteAi.isNearestValidAttackTarget missing minor: the brute never drops a target for a nearer one; target goals keep theirs until it dies or is lost
PiglinBruteAi.maybePlayActivitySound missing player: a piglin brute never growls while it fights; the angry sound is not in Horizon
PiglinBruteAi.playActivitySound missing player: no angry sound when a piglin brute starts a fight (entity.piglin_brute.angry is not played)
PiglinBruteAi.setAngerTarget missing minor: no 600-tick anger memory; the target goals keep the target instead
PiglinBruteAi.updateActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: no fight and idle activity switch; the melee goal sets the aggressive flag
StartAdmiringItemIfSeen.create inline crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups gap: player: a piglin takes a wanted item and admires it in hand; it does not stop to admire one it only sees on the ground
StopAdmiringIfItemTooFarAway.create missing minor: no admire-on-the-ground phase, so no stop when the wanted item moves away
StopAdmiringIfTiredOfTryingToReachItem.create missing minor: no time limit on walking to an admired item; the piglin walks to the item as GoToWantedItem does
Parched.getArrow inline crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack Parched arrows carry weakness for 600 ticks
Stray.checkStraySpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Stray arm: powder snow skipped, sky must be visible
Stray.getArrow inline crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack Stray arrows carry slowness for 600 ticks
CaveSpider.getVehicleAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::vehicle_attachment gap: minor: rides at 0 height; vanilla uses 0.21875 when the vehicle is not wider
VillagerDataHolder.finalizeVillagerType inline crates/horizon-client/src/mobs/finalize.rs::Ctx::villager_type
Abilities.apply port crates/horizon-client/src/game/remote.rs::Game::apply_remote_abilities gap: minor: invulnerable, flying, may fly and flying speed only; instabuild, may build and walk speed are not applied
Abilities.pack skip:java record copy for the abilities packet; the flags are read in remote.rs
PlayerSkin.with missing minor: skin patches (body, cape, elytra and model overrides) are not applied on top of a profile skin
PlayerSkin.Patch.create skip:java record factory for the patch; the patch itself is missing (see PlayerSkin.with)
SpectralArrow.doPostHurtEffects missing player: a spectral arrow shot from a bow or crossbow does not make its target glow; release_bow and crossbow use no effect
SpectralArrow.tick missing player: a spectral arrow in flight leaves no yellow effect trail
Fireball.getSlot missing minor: the fireball's item slot (its displayed fire charge) is not modelled
Fireball.readAdditionalSaveData missing unsure: fireball_from_nbt reads no Item key, so the displayed item is not restored
Fireball.setItem missing minor: the displayed item of a fireball is not set
Fireball.shouldRenderAtSqrDistance skip:ui render distance rule for the first two ticks; Horizon draws the projectile as its own pass
LargeFireball.onHit port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit LargeFireball arm: explosion of the given power, then the projectile is gone
LargeFireball.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit LargeFireball arm: 6 damage to the entity
SmallFireball.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit SmallFireball arm: ignites for 5 seconds and deals 5 damage
AbstractThrownPotion.affectEntitiesAround missing player: a splash water potion does not hurt water-sensitive mobs or put out burning entities nearby
AbstractThrownPotion.calculateHorizontalHurtKnockbackDirection missing minor: the splash hurt pushes nothing away from the potion's position
AbstractThrownPotion.douseFire missing player: a splash water potion does not put out fire blocks, candles or campfires around where it lands
AbstractThrownPotion.onHitBlock missing player: a water splash that lands on a block does not douse fire, candles or campfires next to it
Snowball.getParticle port crates/horizon-client/src/game/creatures.rs::Game::item_burst snowball item burst on break
Snowball.handleEntityEvent port crates/horizon-client/src/game/creatures.rs::Game::thrown_break_event break event 3 for thrown items
Snowball.onHit inline crates/horizon-client/src/game/creatures.rs::Game::projectile_hit Snowball arm: 3 damage to blazes, then the break burst
ThrowableItemProjectile.readAdditionalSaveData missing minor: the thrown item is not read back from the save
Activity.equals skip:java value equality of a named activity; no Horizon counterpart needed
ModelAndTexture.codec skip:data codec for the variant model and texture asset; Horizon reads variant data from files
MoonBrightnessCheck.test inline crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select Condition::Moon arm: moon brightness of the phase against the range
PriorityProvider.select port crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select highest priority entries whose conditions hold, one picked at random
SpawnConditions.bootstrap skip:data registry bootstrap of spawn condition codecs; Horizon reads variant conditions from files
SpawnContext.create inline crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select the level and position passed to select; no separate context object
variant/StructureCheck.test inline crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select Condition::Structure arm: structures with a piece at the position
AbstractMinecartContainer.applyNaturalSlowdown inline crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown gap: minor: plain cart friction 0.96; the container's 0.98 plus 0.001 per empty redstone level is missing
AbstractMinecartContainer.createMenu inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart gap: minor: opens the chest for anyone; no refusal of a loot-table cart for spectators
AbstractMinecartContainer.remove inline crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart contents spill when the cart breaks, if entity_drops is on
MinecartChest.interact inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart chest arm: opens the cart's items and plays the chest sound
MinecartCommandBlock.activateMinecart inline crates/horizon-client/src/game/minecarts.rs::Game::activate_cart gap: minor: no command ever runs; the cart holds no command since its editor is missing
MinecartCommandBlock.defineSynchedData missing minor: the command text and last output are not synced; no command cart holds a command
MinecartCommandBlock.interact missing player: a creative player right-clicking a command minecart gets no command editor; vanilla opens it
MinecartCommandBlock.onSyncedDataUpdated missing minor: no synced command text to load into the cart
MinecartCommandBlock.readAdditionalSaveData inline crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt gap: minor: the saved Command text is not read
MinecartCommandBlock.MinecartCommandBase.createCommandSourceStack missing minor: no command runs from a cart, so no source stack is built
MinecartCommandBlock.MinecartCommandBase.onUpdated missing minor: no command text changes to push to the cart
MinecartFurnace.addAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt
MinecartFurnace.addFuel inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart furnace arm: coal or charcoal adds 3600 ticks of fuel up to 32000
MinecartFurnace.applyNaturalSlowdown port crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown
MinecartFurnace.calculateNewPushAlong inline crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown the push projected on the velocity, inside natural_slowdown
MinecartFurnace.getDefaultDisplayBlockState port crates/horizon-client/src/game/minecarts.rs::Game::display_state lit furnace while it has fuel
MinecartFurnace.getMaxSpeed port crates/horizon-client/src/game/minecarts.rs::Game::max_speed half speed on land, three quarters of 0.2 in water
MinecartFurnace.interact inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart furnace arm
MinecartFurnace.readAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt
MinecartFurnace.tick inline crates/horizon-client/src/game/minecarts.rs::Game::tick_cart furnace variant: fuel counts down, push clears at zero, smoke puffs
MinecartSpawner missing player: spawner minecarts do not exist in Horizon: no cart kind, so a spawner minecart item does nothing on a rail
NewMinecartBehavior skip:other experimental minecart_improvements physics; Horizon always runs the old behaviour in minecarts.rs and writes that pack disabled in save.rs
NewMinecartBehavior.TrackIteration skip:other part of the experimental minecart_improvements physics; see NewMinecartBehavior
FeatureFlagRegistry skip:data name table of the feature packs (functions.rs FEATURE_PACKS); codecs are not needed
FeatureFlagRegistry.Builder skip:java builder for the flag registry
FeatureFlagSet skip:java bit set of feature flags; Horizon only tracks the built-in packs by name
FeatureFlags skip:server message text for the server's pack feature check
AbstractCraftingMenu.addCraftingGridSlots skip:ui slot positions of the crafting grid; menu.rs keeps the vanilla slot indices
AbstractCraftingMenu.addResultSlot skip:ui result slot position; menu.rs keeps the vanilla slot index
AbstractCraftingMenu.handlePlacement port crates/horizon-client/src/menu/place.rs::Menu::place_recipe recipe placement from the book
ChestMenu.addChestGrid skip:ui slot grid layout of the chest screen, drawn by storage.rs
ChestMenu.quickMoveStack port crates/horizon-client/src/game/storage.rs::Game::container_quick_move
ChestMenu.sixRows skip:ui constructor shorthand for the six-row chest layout
ChestMenu.threeRows skip:ui constructor shorthand for the three-row chest layout
ContainerLevelAccess.execute skip:java level access wrapper for menus; Horizon's menus hold the game state directly
DataSlot.checkAndClearUpdateFlag skip:java dirty flag for data slot syncing; Horizon sends menu data as it changes
FurnaceFuelSlot.mayPlace inline crates/horizon-client/src/menu.rs::Menu::may_place fuel slot: only items that burn (is_fuel)
ItemCombinerMenuSlotDefinition.Builder.build skip:java builder for anvil and smithing slot definitions
ItemCombinerMenuSlotDefinition.Builder.withResultSlot skip:java builder for anvil and smithing slot definitions
ItemCombinerMenuSlotDefinition.Builder.withSlot skip:java builder for anvil and smithing slot definitions
PlayerEnderChestContainer.fromSlots skip:java builds the ender chest from saved slots; Horizon keeps ender_items
PlayerEnderChestContainer.startOpen port crates/horizon-client/src/game/storage.rs::Game::open_ender_chest
PlayerEnderChestContainer.stillValid inline crates/horizon-client/src/game/storage.rs::Game::tick_container_reach closes the chest when the player walks away
PlayerEnderChestContainer.stopOpen port crates/horizon-client/src/game/storage.rs::Game::close_ender_chest
PlayerEnderChestContainer.storeAsSlots skip:java saves the ender chest as slots; Horizon writes ender_items
RecipeCraftingHolder.setRecipeUsed missing minor: the last recipe used by a crafting block is not remembered
RemoteSlot.Synchronized.matches skip:java compares a slot with its last synced copy; Horizon sends the slot when it changes
ResultContainer.isEmpty port crates/horizon-client/src/menu.rs::Menu::has_item the result slot is empty when it has no item
ShulkerBoxMenu.quickMoveStack port crates/horizon-client/src/game/storage.rs::Game::container_quick_move
TransientCraftingContainer.fillStackedContents port crates/horizon-client/src/menu/place.rs::Menu::stacked_contents
TransientCraftingContainer.getItem skip:java slot read of a menu-owned grid; Horizon reads menu slots directly
TransientCraftingContainer.isEmpty skip:java emptiness of a menu-owned grid; Horizon reads menu slots directly
TransientCraftingContainer.removeItem skip:java slot removal of a menu-owned grid; Horizon takes from menu slots directly
TransientCraftingContainer.setItem skip:java slot write of a menu-owned grid; Horizon writes menu slots directly
AdventureModePredicate missing unsure: no can_place_on or can_break list check found in the client
ArrayItemProvider.findNext inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ArrayItemProvider.next inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ArrayItemProvider.peek inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ArrayItemProvider.setPosition inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ArrayItemProvider.Cycled.computeNextItem inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ArrayItemProvider.Cycled.findNext inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
BottleItem.use port crates/horizon-client/src/game/potions.rs::Game::use_potion_item glass bottle arm
CreativeModeTab.buildContents port crates/horizon-client/src/creative.rs::Creative::items
CreativeModeTab.getIconItem inline crates/horizon-client/src/creative.rs::Creative::tab_headers tab header carries the icon
CreativeModeTab.shouldDisplay inline crates/horizon-client/src/creative.rs::Creative::tab_headers tabs listed from the data file
CreativeModeTab.Builder.build skip:java builder for tab properties
CreativeModeTab.ItemDisplayBuilder.accept skip:data tab contents are read from the creative data file
CreativeModeTab.ItemDisplayParameters.needsUpdate skip:java cache check for tab contents
CreativeModeTab.Output.accept skip:data tab contents are read from the creative data file
CreativeModeTab.Output.acceptAll skip:data tab contents are read from the creative data file
CreativeModeTabs.buildAllTabContents port crates/horizon-client/src/creative.rs::Creative::from_json tabs and their items built from the data
CreativeModeTabs.copperBlockFamilies skip:data copper family list is in the data file
CreativeModeTabs.generateEnchantmentBookTypesAllLevels skip:data creative contents come from the data file
CreativeModeTabs.generateEnchantmentBookTypesOnlyMaxLevel skip:data creative contents come from the data file
CreativeModeTabs.generateFireworksAllDurations skip:data creative contents come from the data file
CreativeModeTabs.generateInstrumentTypes skip:data creative contents come from the data file
CreativeModeTabs.generateOminousBottles skip:data creative contents come from the data file
CreativeModeTabs.generatePotionEffectTypes skip:data creative contents come from the data file
CreativeModeTabs.generatePresetPaintings skip:data creative contents come from the data file
CreativeModeTabs.generateSuspiciousStews skip:data creative contents come from the data file
CreativeModeTabs.registerColoredItems skip:data creative contents come from the data file
CreativeModeTabs.tryRebuildTabContents port crates/horizon-client/src/creative.rs::Creative::items contents rebuilt on demand
DebugStickItem missing player: the debug stick does nothing in creative; no block state cycling or marker
DoubleHighBlockItem.placeBlock missing unsure: no code found that places the upper half of a tall block
DyeItem.interactLivingEntity missing unsure: no dye use on mobs (sheep, collars) found in the client
DyeItem.tryApplyToSign inline crates/horizon-client/src/game/sign_edit.rs::Game::use_sign_applicator dye colours the sign text
EggItem.asProjectile port crates/horizon-client/src/game/creatures.rs::Game::throw_item egg kinds in throw_item
EggItem.use inline crates/horizon-client/src/game/creatures.rs::Game::throw_item egg throw
EnderpearlItem.use inline crates/horizon-client/src/game/creatures.rs::Game::throw_item ender pearl throw
ExperienceBottleItem.asProjectile port crates/horizon-client/src/game/potions.rs::Game::thrown_kind thrown bottle entity type
ExperienceBottleItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile dispensed bottle flight
ExperienceBottleItem.use inline crates/horizon-client/src/game/potions.rs::Game::use_potion_item thrown bottle path
FireChargeItem.asProjectile port crates/horizon-client/src/game/dispenser.rs::Game::shoot_projectile_item fire charge becomes a small fireball
FireChargeItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile dispensed fire charge flight
FireChargeItem.useOn missing unsure: no fire charge use on blocks found in the client
GameMasterBlockItem.getPlacementState port crates/horizon-client/src/game/block_items.rs::Game::apply_item_block_state default state for the placed block
GlowInkSacItem.tryApplyToSign inline crates/horizon-client/src/game/sign_edit.rs::Game::use_sign_applicator glow ink on a sign
HangingSignItem.canPlace missing unsure: no hanging sign placement check found
InkSacItem.tryApplyToSign inline crates/horizon-client/src/game/sign_edit.rs::Game::use_sign_applicator ink on a sign
InstrumentItem.create skip:java builds the horn stack
InstrumentItem.getInstrument skip:data instrument read from the item data
InstrumentItem.getUseDuration port crates/horizon-client/src/game/item_draw.rs::use_duration goat horn use duration 72000
InstrumentItem.play missing player: using a goat horn plays no sound; Horizon has no horn playback
InstrumentItem.use missing player: using a goat horn plays no sound and does not start the horn cooldown
Instruments.bootstrap skip:data registry bootstrap of the instrument list
Instruments.register skip:data registry bootstrap of the instrument list
ItemFrameItem.mayPlace port crates/horizon-client/src/game/frames.rs::Game::place_item_frame
ItemProvider.cycle inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot shows its items in turn
ItemProvider.of inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ItemProvider.FallbackItemProvider.findNext inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ItemProvider.FallbackItemProvider.next inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
ItemProvider.FallbackItemProvider.peek inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
JukeboxSongs skip:data registry of jukebox songs; song data is read from files
KnowledgeBookItem.use missing minor: using a knowledge book (recipe unlock) does nothing in Horizon
LingeringPotionItem.createPotion port crates/horizon-client/src/game/potions.rs::thrown_kind lingering entity type
LingeringPotionItem.use inline crates/horizon-client/src/game/potions.rs::Game::use_potion_item lingering potion throw
NameTagItem.interactLivingEntity missing unsure: name tag use on a mob is only forwarded on remote games (remote_mob_use.rs); no local rename found
PlaceOnWaterBlockItem.use inline crates/horizon-client/src/game/block_items.rs::Game::apply_placed_item placed by generic block placement; the water rule is not checked here
1 GlowSquid.aiStep missing player: glow squids shed no glow particles and their dark timer is not kept, so a hit squid does not dim
2 GlowSquid.checkGlowSquidSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::GlowSquid arm: 33 blocks below sea level, dark, in water
3 GlowSquid.hurtServer missing player: a glow squid hit does not get the 100-tick dark timer, so it does not dim
4 WolfSoundVariants skip:data registry bootstrap of the wolf sound sets; sounds are in species.rs and finalize.rs
5 AbstractDragonPhaseInstance.getTurnSpeed inline crates/horizon-client/src/game/dragon.rs::Game::tick_dragon 0.7 / dist / rot turn for every phase but Landing; only applied while a fly target is set
6 DragonChargePlayerPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Charging arm: 10-tick countdown once close; gap: minor: no collision re-target
7 DragonDeathPhase.doClientTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_dragon_death gap: player: the phase's explosion puff every 10 ticks through the whole dying flight is missing; only the tickDeath bursts at 180 to 200 are drawn
8 DragonDeathPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Dying arm sets health 1 or 0; gap: minor: egg found with the leaves-excluded heightmap, vanilla uses MOTION_BLOCKING
9 DragonHoldingPatternPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Holding arm; gap: minor: horizontal and vertical collision re-target not tracked (always false)
10 DragonHoldingPatternPhase.findNewTarget inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Holding arm: landing roll, strafe pick by egg distance, ring path
11 DragonHoldingPatternPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
12 DragonHoldingPatternPhase.onCrystalDestroyed inline crates/horizon-client/src/game/dragon.rs::Game::destroy_crystal sets strafe_request for the killer or the nearest; tick_phase strafes from Holding only
13 DragonHoldingPatternPhase.strafePlayer inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase phase switch to Strafe and setTarget (strafe_begin) in the Holding arm and the strafe_request block
14 DragonLandingApproachPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase LandingApproach arm; gap: minor: no collision re-target
15 DragonLandingApproachPhase.findNewTarget inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase LandingApproach arm: path to the node by the nearest enemy to the egg, last node is the podium
16 DragonLandingApproachPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
17 DragonLandingPhase.doClientTick missing player: while the dragon comes down to land its head breathes a fan of dragon-breath particles; none are spawned
18 DragonLandingPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Landing arm: sets flame count 0 and goes to Scanning on reaching the podium
19 DragonLandingPhase.getTurnSpeed inline crates/horizon-client/src/game/dragon.rs::Game::tick_dragon Landing turn min(rot,40)/rot, the one turn formula that differs from the default
20 DragonSittingAttackingPhase.doClientTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase gap: player: the growl is played once at the start of the 40 ticks; vanilla replays it on every client tick
21 DragonSittingAttackingPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Attacking arm: 40 ticks then Flaming
22 DragonSittingFlamingPhase.doClientTick missing player: during the first 10 ticks of a flame attack the head breathes dragon-breath particles in a fan; none are spawned
23 DragonSittingFlamingPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Flaming arm: the flame cloud at tick 10, 200 ticks, flame count 4 leads to Takeoff
24 DragonSittingScanningPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Scanning arm; gap: minor: turns every tick, vanilla skips the turn while the target is within 10 degrees of the facing
25 DragonTakeoffPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Takeoff arm: first tick finds a new target, later ticks go to Holding once 10 blocks from the podium
26 DragonTakeoffPhase.findNewTarget inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Takeoff arm; gap: minor: no path leaves an empty path, vanilla leaves none and searches again next tick
27 DragonTakeoffPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
28 EnderDragonPhase.create skip:data phase registry; the ids are fixed in Phase::id
29 EnderDragonPhase.createInstance port crates/horizon-client/src/game/dragon.rs::Phase::from_id builds the default instance for an id
30 EnderDragonPhase.getById port crates/horizon-client/src/game/dragon.rs::Phase::from_id id to phase, unknown ids fall back to Holding
31 Mannequin.addAdditionalSaveData missing player: a saved mannequin is written without its profile, so after a reload it wears the default skin
32 Mannequin.applyImplicitComponent missing minor: the profile from a spawning item is not applied; Horizon has no mannequin item, only summon with a profile tag
33 Mannequin.defineSynchedData inline crates/horizon-client/src/game/remote_mob_data.rs::apply gap: player: reads the profile (slot 17) only; DATA_IMMOVABLE and DATA_DESCRIPTION are not read
34 Mannequin.get skip:other data-component getter for the PROFILE component; the profile is Mob.profile, read directly
35 Mannequin.readAdditionalSaveData missing player: the profile is not read back, so a reloaded mannequin wears the default skin
36 Mannequin.updateDescription missing player: the mannequin's description (default 'Mannequin') is never drawn under its name
37 Giant.createAttributes skip:data attributes come from entity-types.json
38 ShootWhenStuck.checkExtraStartConditions inline crates/horizon-client/src/mobs/breeze.rs::register
39 Evoker.createAttributes skip:data attributes come from entity-types.json
40 Evoker.registerGoals port crates/horizon-client/src/mobs/illager.rs::register_evoker
41 Evoker.EvokerCastingSpellGoal.tick port crates/horizon-client/src/mobs/illager.rs::CastingSpell::tick looks at the target, else the wololo sheep
42 Pillager.applyRaidBuffs port crates/horizon-client/src/game/mob_gear.rs::Game::apply_raid_buffs
43 Pillager.createAttributes skip:data attributes come from entity-types.json
44 Pillager.finalizeSpawn inline crates/horizon-client/src/mobs/finalize.rs::Ctx::mob crossbow in the main hand via populate; the enchant roll is in Ctx::enchant
45 Pillager.getArmPose port crates/horizon-client/src/mobs/illager.rs::arm_pose
46 Pillager.getSlot missing minor: the pillager's five spare slots (ids 300 and up, used by /item) are not modelled
47 Pillager.pickUpItem missing player: during a raid a pillager does not pick up a white banner lying on the ground
48 Pillager.registerGoals port crates/horizon-client/src/mobs/illager.rs::register_pillager
49 Pillager.wantsItem missing player: the raid banner pickup check is missing (see pickUpItem)
50 PiglinBrute.createAttributes skip:data attributes come from entity-types.json
51 PiglinBrute.customServerAiStep inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: the brain tick is replaced by the goals set in register_brute; the activity update is in PiglinBruteAi rows
52 PiglinBrute.finalizeSpawn inline crates/horizon-client/src/mobs/finalize.rs::Ctx::mob golden axe in the main hand via populate; initMemories is missing
53 PiglinBrute.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: retaliation is the HurtByTarget goal; no PiglinAi.maybeRetaliate for non-piglin attackers
54 PiglinBrute.wantsToPickUp missing player: a piglin brute does not pick up a golden axe lying on the ground; piglin_pickups only serves piglins
55 PiglinBruteAi.createIdleLookBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: looks at players only (LookAtPlayer); no look at piglins, random look or do-nothing pause
56 PiglinBruteAi.createIdleMovementBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: strolls anywhere; no visits to piglins and no return to its home point
57 PiglinBruteAi.findNearestValidAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: targets nearest player or wither skeleton through the target goals; no anger memory first
58 PiglinBruteAi.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: no door opening and no stop-anger-when-target-dead rule; panic-free float only
59 PiglinBruteAi.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute melee goal at priority 2; attacks as the MeleeAttack goal does
60 PiglinBruteAi.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute idle behaviour as goals: stroll, look at player, targets
61 PiglinBruteAi.initMemories missing minor: no home point is remembered, so the brute never returns to where it spawned
62 PiglinBruteAi.isNearestValidAttackTarget missing minor: the brute never drops a target for a nearer one; target goals keep theirs until it dies or is lost
63 PiglinBruteAi.maybePlayActivitySound missing player: a piglin brute never growls while it fights; the angry sound is not in Horizon
64 PiglinBruteAi.playActivitySound missing player: no angry sound when a piglin brute starts a fight (entity.piglin_brute.angry is not played)
65 PiglinBruteAi.setAngerTarget missing minor: no 600-tick anger memory; the target goals keep the target instead
66 PiglinBruteAi.updateActivity inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: no fight and idle activity switch; the melee goal sets the aggressive flag
67 StartAdmiringItemIfSeen.create inline crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups gap: player: a piglin takes a wanted item and admires it in hand; it does not stop to admire one it only sees on the ground
68 StopAdmiringIfItemTooFarAway.create missing minor: no admire-on-the-ground phase, so no stop when the wanted item moves away
69 StopAdmiringIfTiredOfTryingToReachItem.create missing minor: no time limit on walking to an admired item; the piglin walks to the item as GoToWantedItem does
70 Parched.getArrow inline crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack Parched arrows carry weakness for 600 ticks
71 Stray.checkStraySpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Stray arm: powder snow skipped, sky must be visible
72 Stray.getArrow inline crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack Stray arrows carry slowness for 600 ticks
73 CaveSpider.getVehicleAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::vehicle_attachment gap: minor: rides at 0 height; vanilla uses 0.21875 when the vehicle is not wider
74 VillagerDataHolder.finalizeVillagerType inline crates/horizon-client/src/mobs/finalize.rs::Ctx::villager_type
75 Abilities.apply port crates/horizon-client/src/game/remote.rs::Game::apply_remote_abilities gap: minor: invulnerable, flying, may fly and flying speed only; instabuild, may build and walk speed are not applied
76 Abilities.pack skip:java record copy for the abilities packet; the flags are read in remote.rs
77 PlayerSkin.with missing minor: skin patches (body, cape, elytra and model overrides) are not applied on top of a profile skin
78 PlayerSkin.Patch.create skip:java record factory for the patch; the patch itself is missing (see PlayerSkin.with)
79 SpectralArrow.doPostHurtEffects missing player: a spectral arrow shot from a bow or crossbow does not make its target glow; release_bow and crossbow use no effect
80 SpectralArrow.tick missing player: a spectral arrow in flight leaves no yellow effect trail
81 Fireball.getSlot missing minor: the fireball's item slot (its displayed fire charge) is not modelled
82 Fireball.readAdditionalSaveData missing unsure: fireball_from_nbt reads no Item key, so the displayed item is not restored
83 Fireball.setItem missing minor: the displayed item of a fireball is not set
84 Fireball.shouldRenderAtSqrDistance skip:ui render distance rule for the first two ticks; Horizon draws the projectile as its own pass
85 LargeFireball.onHit port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit LargeFireball arm: explosion of the given power, then the projectile is gone
86 LargeFireball.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit LargeFireball arm: 6 damage to the entity
87 SmallFireball.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit SmallFireball arm: ignites for 5 seconds and deals 5 damage
88 AbstractThrownPotion.affectEntitiesAround missing player: a splash water potion does not hurt water-sensitive mobs or put out burning entities nearby
89 AbstractThrownPotion.calculateHorizontalHurtKnockbackDirection missing minor: the splash hurt pushes nothing away from the potion's position
90 AbstractThrownPotion.douseFire missing player: a splash water potion does not put out fire blocks, candles or campfires around where it lands
91 AbstractThrownPotion.onHitBlock missing player: a water splash that lands on a block does not douse fire, candles or campfires next to it
92 Snowball.getParticle port crates/horizon-client/src/game/creatures.rs::Game::item_burst snowball item burst on break
93 Snowball.handleEntityEvent port crates/horizon-client/src/game/creatures.rs::Game::thrown_break_event break event 3 for thrown items
94 Snowball.onHit inline crates/horizon-client/src/game/creatures.rs::Game::projectile_hit Snowball arm: 3 damage to blazes, then the break burst
95 ThrowableItemProjectile.readAdditionalSaveData missing minor: the thrown item is not read back from the save
96 Activity.equals skip:java value equality of a named activity; no Horizon counterpart needed
97 ModelAndTexture.codec skip:data codec for the variant model and texture asset; Horizon reads variant data from files
98 MoonBrightnessCheck.test inline crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select Condition::Moon arm: moon brightness of the phase against the range
99 PriorityProvider.select port crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select highest priority entries whose conditions hold, one picked at random
100 SpawnConditions.bootstrap skip:data registry bootstrap of spawn condition codecs; Horizon reads variant conditions from files
101 SpawnContext.create inline crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select the level and position passed to select; no separate context object
102 variant/StructureCheck.test inline crates/horizon-client/src/mobs/finalize.rs::VariantRegistry::select Condition::Structure arm: structures with a piece at the position
103 AbstractMinecartContainer.applyNaturalSlowdown inline crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown gap: minor: plain cart friction 0.96; the container's 0.98 plus 0.001 per empty redstone level is missing
104 AbstractMinecartContainer.createMenu inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart gap: minor: opens the chest for anyone; no refusal of a loot-table cart for spectators
105 AbstractMinecartContainer.remove inline crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart contents spill when the cart breaks, if entity_drops is on
106 MinecartChest.interact inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart chest arm: opens the cart's items and plays the chest sound
107 MinecartCommandBlock.activateMinecart inline crates/horizon-client/src/game/minecarts.rs::Game::activate_cart gap: minor: no command ever runs; the cart holds no command since its editor is missing
108 MinecartCommandBlock.defineSynchedData missing minor: the command text and last output are not synced; no command cart holds a command
109 MinecartCommandBlock.interact missing player: a creative player right-clicking a command minecart gets no command editor; vanilla opens it
110 MinecartCommandBlock.onSyncedDataUpdated missing minor: no synced command text to load into the cart
111 MinecartCommandBlock.readAdditionalSaveData inline crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt gap: minor: the saved Command text is not read
112 MinecartCommandBlock.MinecartCommandBase.createCommandSourceStack missing minor: no command runs from a cart, so no source stack is built
113 MinecartCommandBlock.MinecartCommandBase.onUpdated missing minor: no command text changes to push to the cart
114 MinecartFurnace.addAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt
115 MinecartFurnace.addFuel inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart furnace arm: coal or charcoal adds 3600 ticks of fuel up to 32000
116 MinecartFurnace.applyNaturalSlowdown port crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown
117 MinecartFurnace.calculateNewPushAlong inline crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown the push projected on the velocity, inside natural_slowdown
118 MinecartFurnace.getDefaultDisplayBlockState port crates/horizon-client/src/game/minecarts.rs::Game::display_state lit furnace while it has fuel
119 MinecartFurnace.getMaxSpeed port crates/horizon-client/src/game/minecarts.rs::Game::max_speed half speed on land, three quarters of 0.2 in water
120 MinecartFurnace.interact inline crates/horizon-client/src/game/minecarts.rs::Game::interact_cart furnace arm
121 MinecartFurnace.readAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt
122 MinecartFurnace.tick inline crates/horizon-client/src/game/minecarts.rs::Game::tick_cart furnace variant: fuel counts down, push clears at zero, smoke puffs
123 MinecartSpawner missing player: spawner minecarts do not exist in Horizon: no cart kind, so a spawner minecart item does nothing on a rail
124 NewMinecartBehavior skip:other experimental minecart_improvements physics; Horizon always runs the old behaviour in minecarts.rs and writes that pack disabled in save.rs
125 NewMinecartBehavior.TrackIteration skip:other part of the experimental minecart_improvements physics; see NewMinecartBehavior
126 FeatureFlagRegistry skip:data name table of the feature packs (functions.rs FEATURE_PACKS); codecs are not needed
127 FeatureFlagRegistry.Builder skip:java builder for the flag registry
128 FeatureFlagSet skip:java bit set of feature flags; Horizon only tracks the built-in packs by name
129 FeatureFlags skip:server message text for the server's pack feature check
130 AbstractCraftingMenu.addCraftingGridSlots skip:ui slot positions of the crafting grid; menu.rs keeps the vanilla slot indices
131 AbstractCraftingMenu.addResultSlot skip:ui result slot position; menu.rs keeps the vanilla slot index
132 AbstractCraftingMenu.handlePlacement port crates/horizon-client/src/menu/place.rs::Menu::place_recipe recipe placement from the book
133 ChestMenu.addChestGrid skip:ui slot grid layout of the chest screen, drawn by storage.rs
134 ChestMenu.quickMoveStack port crates/horizon-client/src/game/storage.rs::Game::container_quick_move
135 ChestMenu.sixRows skip:ui constructor shorthand for the six-row chest layout
136 ChestMenu.threeRows skip:ui constructor shorthand for the three-row chest layout
137 ContainerLevelAccess.execute skip:java level access wrapper for menus; Horizon's menus hold the game state directly
138 DataSlot.checkAndClearUpdateFlag skip:java dirty flag for data slot syncing; Horizon sends menu data as it changes
139 FurnaceFuelSlot.mayPlace inline crates/horizon-client/src/menu.rs::Menu::may_place fuel slot: only items that burn (is_fuel)
140 ItemCombinerMenuSlotDefinition.Builder.build skip:java builder for anvil and smithing slot definitions
141 ItemCombinerMenuSlotDefinition.Builder.withResultSlot skip:java builder for anvil and smithing slot definitions
142 ItemCombinerMenuSlotDefinition.Builder.withSlot skip:java builder for anvil and smithing slot definitions
143 PlayerEnderChestContainer.fromSlots skip:java builds the ender chest from saved slots; Horizon keeps ender_items
144 PlayerEnderChestContainer.startOpen port crates/horizon-client/src/game/storage.rs::Game::open_ender_chest
145 PlayerEnderChestContainer.stillValid inline crates/horizon-client/src/game/storage.rs::Game::tick_container_reach closes the chest when the player walks away
146 PlayerEnderChestContainer.stopOpen port crates/horizon-client/src/game/storage.rs::Game::close_ender_chest
147 PlayerEnderChestContainer.storeAsSlots skip:java saves the ender chest as slots; Horizon writes ender_items
148 RecipeCraftingHolder.setRecipeUsed missing minor: the last recipe used by a crafting block is not remembered
149 RemoteSlot.Synchronized.matches skip:java compares a slot with its last synced copy; Horizon sends the slot when it changes
150 ResultContainer.isEmpty port crates/horizon-client/src/menu.rs::Menu::has_item the result slot is empty when it has no item
151 ShulkerBoxMenu.quickMoveStack port crates/horizon-client/src/game/storage.rs::Game::container_quick_move
152 TransientCraftingContainer.fillStackedContents port crates/horizon-client/src/menu/place.rs::Menu::stacked_contents
153 TransientCraftingContainer.getItem skip:java slot read of a menu-owned grid; Horizon reads menu slots directly
154 TransientCraftingContainer.isEmpty skip:java emptiness of a menu-owned grid; Horizon reads menu slots directly
155 TransientCraftingContainer.removeItem skip:java slot removal of a menu-owned grid; Horizon takes from menu slots directly
156 TransientCraftingContainer.setItem skip:java slot write of a menu-owned grid; Horizon writes menu slots directly
157 AdventureModePredicate missing unsure: no can_place_on or can_break list check found in the client
158 ArrayItemProvider.findNext inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
159 ArrayItemProvider.next inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
160 ArrayItemProvider.peek inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
161 ArrayItemProvider.setPosition inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
162 ArrayItemProvider.Cycled.computeNextItem inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
163 ArrayItemProvider.Cycled.findNext inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
164 BottleItem.use port crates/horizon-client/src/game/potions.rs::Game::use_potion_item glass bottle arm
165 CreativeModeTab.buildContents port crates/horizon-client/src/creative.rs::Creative::items
166 CreativeModeTab.getIconItem inline crates/horizon-client/src/creative.rs::Creative::tab_headers tab header carries the icon
167 CreativeModeTab.shouldDisplay inline crates/horizon-client/src/creative.rs::Creative::tab_headers tabs listed from the data file
168 CreativeModeTab.Builder.build skip:java builder for tab properties
169 CreativeModeTab.ItemDisplayBuilder.accept skip:data tab contents are read from the creative data file
170 CreativeModeTab.ItemDisplayParameters.needsUpdate skip:java cache check for tab contents
171 CreativeModeTab.Output.accept skip:data tab contents are read from the creative data file
172 CreativeModeTab.Output.acceptAll skip:data tab contents are read from the creative data file
173 CreativeModeTabs.buildAllTabContents port crates/horizon-client/src/creative.rs::Creative::from_json tabs and their items built from the data
174 CreativeModeTabs.copperBlockFamilies skip:data copper family list is in the data file
175 CreativeModeTabs.generateEnchantmentBookTypesAllLevels skip:data creative contents come from the data file
176 CreativeModeTabs.generateEnchantmentBookTypesOnlyMaxLevel skip:data creative contents come from the data file
177 CreativeModeTabs.generateFireworksAllDurations skip:data creative contents come from the data file
178 CreativeModeTabs.generateInstrumentTypes skip:data creative contents come from the data file
179 CreativeModeTabs.generateOminousBottles skip:data creative contents come from the data file
180 CreativeModeTabs.generatePotionEffectTypes skip:data creative contents come from the data file
181 CreativeModeTabs.generatePresetPaintings skip:data creative contents come from the data file
182 CreativeModeTabs.generateSuspiciousStews skip:data creative contents come from the data file
183 CreativeModeTabs.registerColoredItems skip:data creative contents come from the data file
184 CreativeModeTabs.tryRebuildTabContents port crates/horizon-client/src/creative.rs::Creative::items contents rebuilt on demand
185 DebugStickItem missing player: the debug stick does nothing in creative; no block state cycling or marker
186 DoubleHighBlockItem.placeBlock missing unsure: no code found that places the upper half of a tall block
187 DyeItem.interactLivingEntity missing unsure: no dye use on mobs (sheep, collars) found in the client
188 DyeItem.tryApplyToSign inline crates/horizon-client/src/game/sign_edit.rs::Game::use_sign_applicator dye colours the sign text
189 EggItem.asProjectile port crates/horizon-client/src/game/creatures.rs::Game::throw_item egg kinds in throw_item
190 EggItem.use inline crates/horizon-client/src/game/creatures.rs::Game::throw_item egg throw
191 EnderpearlItem.use inline crates/horizon-client/src/game/creatures.rs::Game::throw_item ender pearl throw
192 ExperienceBottleItem.asProjectile port crates/horizon-client/src/game/potions.rs::Game::thrown_kind thrown bottle entity type
193 ExperienceBottleItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile dispensed bottle flight
194 ExperienceBottleItem.use inline crates/horizon-client/src/game/potions.rs::Game::use_potion_item thrown bottle path
195 FireChargeItem.asProjectile port crates/horizon-client/src/game/dispenser.rs::Game::shoot_projectile_item fire charge becomes a small fireball
196 FireChargeItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile dispensed fire charge flight
197 FireChargeItem.useOn missing unsure: no fire charge use on blocks found in the client
198 GameMasterBlockItem.getPlacementState port crates/horizon-client/src/game/block_items.rs::Game::apply_item_block_state default state for the placed block
199 GlowInkSacItem.tryApplyToSign inline crates/horizon-client/src/game/sign_edit.rs::Game::use_sign_applicator glow ink on a sign
200 HangingSignItem.canPlace missing unsure: no hanging sign placement check found
201 InkSacItem.tryApplyToSign inline crates/horizon-client/src/game/sign_edit.rs::Game::use_sign_applicator ink on a sign
202 InstrumentItem.create skip:java builds the horn stack
203 InstrumentItem.getInstrument skip:data instrument read from the item data
204 InstrumentItem.getUseDuration port crates/horizon-client/src/game/item_draw.rs::use_duration goat horn use duration 72000
205 InstrumentItem.play missing player: using a goat horn plays no sound; Horizon has no horn playback
206 InstrumentItem.use missing player: using a goat horn plays no sound and does not start the horn cooldown
207 Instruments.bootstrap skip:data registry bootstrap of the instrument list
208 Instruments.register skip:data registry bootstrap of the instrument list
209 ItemFrameItem.mayPlace port crates/horizon-client/src/game/frames.rs::Game::place_item_frame
210 ItemProvider.cycle inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot shows its items in turn
211 ItemProvider.of inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
212 ItemProvider.FallbackItemProvider.findNext inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
213 ItemProvider.FallbackItemProvider.next inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
214 ItemProvider.FallbackItemProvider.peek inline crates/horizon-client/src/game/recipe_book.rs::Game::draw_ghost ghost slot item list
215 JukeboxSongs skip:data registry of jukebox songs; song data is read from files
216 KnowledgeBookItem.use missing minor: using a knowledge book (recipe unlock) does nothing in Horizon
217 LingeringPotionItem.createPotion port crates/horizon-client/src/game/potions.rs::thrown_kind lingering entity type
218 LingeringPotionItem.use inline crates/horizon-client/src/game/potions.rs::Game::use_potion_item lingering potion throw
219 NameTagItem.interactLivingEntity missing unsure: name tag use on a mob is only forwarded on remote games (remote_mob_use.rs); no local rename found
220 PlaceOnWaterBlockItem.use inline crates/horizon-client/src/game/block_items.rs::Game::apply_placed_item placed by generic block placement; the water rule is not checked here
+158
View File
@@ -0,0 +1,158 @@
PlayerHeadItem.getName missing minor: a head whose profile has a name should read "<name>'s Head"; Horizon shows the plain item name
ShearsItem.createToolProperties skip:data tool rules (cobweb speed, shears breaking-speed tags) come from item data; items.rs reads minecraft:tool
ShearsItem.mineBlock port crates/horizon-client/src/game.rs::Game::mine_block_with_held shears wear one damage_per_block on any block but fire
ShearsItem.useOn missing unsure: SHEARS_TRIM is a NeoForge ability that no block in the pinned sources registers; pumpkin carving is a separate path (game/pumpkin.rs)
SnowballItem.asProjectile port crates/horizon-client/src/game/dispenser.rs::Game::shoot_projectile_item a dispensed snowball or egg is shot with the dispenser's own config
SnowballItem.use port crates/horizon-client/src/game/creatures.rs::Game::throw_item throw at 1.5 power, throw sound, use cooldown, one consumed
SplashPotionItem.createPotion port crates/horizon-client/src/game/potions.rs::Game::launch_thrown the thrown splash potion entity is launched with the stack
SplashPotionItem.use port crates/horizon-client/src/game/potions.rs::Game::use_potion_item splash throw sound, throw at -20 degrees, one consumed
ThrowablePotionItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile splash, lingering and XP bottle: uncertainty 3.0 and power 1.375
ThrowablePotionItem.use port crates/horizon-client/src/game/potions.rs::Game::use_potion_item throw at -20 degrees, one consumed
StandingAndWallBlockItem.getPlacementState port crates/horizon-world/src/level/place.rs::Sim::placement standing or wall state by nearest looking direction, with survival and unobstructed checks
StandingAndWallBlockItem.registerBlocks skip:data wall block to item bindings come from the generated item table (level/data.rs)
SwingAnimationType.byName skip:data swing names are data; Horizon hardcodes spear swings (spear.rs) and reads no swing_animation component
ToolMaterial.applyCommonProperties skip:data material numbers come from item data (items.rs), not built in code
ToolMaterial.applySwordProperties skip:data sword properties come from item data (items.rs)
ToolMaterial.applyToolProperties skip:data tool properties come from item data (items.rs)
ToolMaterial.createSwordAttributes skip:data sword attribute modifiers come from item data (items.rs)
ToolMaterial.createToolAttributes skip:data tool attribute modifiers come from item data (items.rs)
TippedArrowItem.getDefaultInstance skip:data creative entries come from the exported creative list (creative.rs), not a default stack built in code
TippedArrowItem.getName port crates/horizon-client/src/game/commands.rs::Game::stack_display_name the hover name takes the potion's name key for a tipped arrow
BlockTransformers.axe skip:data axe rules are built in code; Horizon loads block transforms from data (block_transform.rs)
BlockTransformers.axeStrippables skip:data stripping table is data; Horizon loads it from block_transform.rs
BlockTransformers.bootstrap skip:data registry bootstrap; transforms are read from data
CustomData.equals skip:java
CustomData.set inline crates/horizon-client/src/game/commands/items.rs::edit_components gap: minor: does not remove the component when the tag ends up empty
CustomData.update inline crates/horizon-client/src/game/commands/items.rs::edit_components gap: minor: does not remove the component when the tag ends up empty
CustomModelData.getSafe port crates/horizon-assets/src/item_model.rs::custom_data_at index bounds check for flags, floats, strings and colors
DeathProtection.applyEffects port crates/horizon-client/src/game/totem.rs::Game::apply_totem totem use: clears effects, then the totem's regeneration, absorption and fire resistance
GrowableMutableContainer.replaceSlotItems inline crates/horizon-items/src/bundle.rs::Contents::try_insert gap: minor: the loop that adds slots while items remain is not ported; bundles insert one stack at a time
ItemAttributeModifiers.compute inline crates/horizon-world/src/attributes/mod.rs::Instance::value item modifiers are added to the attribute instance and summed by operation; slot filtering is in the equipment code
ItemAttributeModifiers.forEach inline crates/horizon-client/src/item_tooltip.rs::attribute_lines tooltip lines per slot group
ItemAttributeModifiers.withModifierAdded missing minor: the loot set_attributes function (SetAttributesFunction) is not ported; no loot path adds a modifier to a stack
ItemAttributeModifiers.Builder.add skip:java
ItemAttributeModifiers.Entry.matches inline crates/horizon-world/src/attributes/mod.rs::Instance::add_or_replace_permanent modifier identity by id within one attribute
OminousBottleAmplifier.addToTooltip missing player: an ominous bottle's tooltip shows no Bad Omen line for its level; Horizon's potion tooltip covers potion items only
SimpleMutableContainer.modifySlots port crates/horizon-client/src/game/commands/items.rs::Game::cmd_item_modify each slot is visited and set
SimpleMutableContainer.replaceSlotItems port crates/horizon-client/src/game/commands/items.rs::Game::cmd_item /item replace fills slots from the item list
SulfurCubeContent.addToTooltip missing minor: Horizon never writes sulfur_cube_content, so no item shows the absorbed block line
SuspiciousStewEffects.addToTooltip missing player: in creative, a suspicious stew's tooltip should list its effects; Horizon's stack tooltip shows none
TypedEntityData.addToTooltip missing player: in Peaceful, a hostile mob's spawn egg should show a red Peaceful line; Horizon shows only the OP-only warning
TypedEntityData.equals skip:java
TypedEntityData.stripId skip:other the stored entity data keeps its id; block_entity_item.rs reads it from the tag
WritableBookContent.getPages missing minor: the filtered page text (chat filter) is not ported; pages always show raw text
PlaySoundConsumeEffect.apply port crates/horizon-world/src/consume_effect.rs::ConsumeEffect::apply the play_sound arm
RemoveStatusEffectsConsumeEffect.apply port crates/horizon-world/src/consume_effect.rs::ConsumeEffect::apply the remove_status arm
AbstractCookingRecipe.cookingStreamCodec skip:java
AbstractCookingRecipe.display port crates/horizon-client/src/recipe_book.rs::Book::build furnace display (Display::Furnace) for each cooking recipe
BannerDuplicateRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble copies the patterns of the banner onto a blank one
BannerDuplicateRecipe.getRemainingItems port crates/horizon-client/src/crafting.rs::Recipes::remainders a patterned banner stays as one copy
BannerDuplicateRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
BlastingRecipe.recipeBookCategory skip:data book category comes from the recipe JSON (Recipes::load keeps recipes.meta)
BrewingInput.getItem skip:java
BrewingRecipe.matches port crates/horizon-client/src/brewing.rs::Brewing::find input and reagent both tested
CraftingRecipe.recipeBookCategory skip:java
DecoratedPotRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble
DecoratedPotRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches four sherds or bricks in the four pattern cells
DyeRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble
DyeRecipe.display port crates/horizon-client/src/crafting.rs::Special::book_displays
DyeRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
FireworkRocketRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble
FireworkRocketRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
FireworkStarFadeRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble
FireworkStarFadeRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
FireworkStarRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble
FireworkStarRecipe.findShape inline crates/horizon-client/src/crafting.rs::Special::assemble the shape is looked up from the shapes table while assembling
FireworkStarRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
ImbueRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble tipped arrows
ImbueRecipe.createPlacementInfo port crates/horizon-client/src/crafting.rs::Recipes::placement
ImbueRecipe.display port crates/horizon-client/src/crafting.rs::Special::book_displays
ImbueRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
MapExtendingRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble
MapExtendingRecipe.findFilledMap inline crates/horizon-client/src/crafting.rs::Special::matches the filled map must have scale under 4
MapExtendingRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
RecipeCache.compute skip:java
RecipeCache.insert skip:java
RecipeCache.moveEntryToFront skip:java
RecipeCache.validateRecipeManager skip:java
RecipeCache.Entry.matches skip:java
RecipeHolder.equals skip:java
RecipeInput.isEmpty skip:java
RecipeMap.create skip:java
RecipeMap.getRecipesFor port crates/horizon-client/src/crafting.rs::Recipes::find_with the recipes that match the input, in order
RecipePropertySet.create skip:java
SelectableRecipe.noRecipeCodec skip:java
SelectableRecipe.SingleInputSet.acceptsInput port crates/horizon-client/src/stations.rs::StationRecipes::stonecutter any stonecutting recipe takes the input
SelectableRecipe.SingleInputSet.selectByInput port crates/horizon-client/src/stations.rs::StationRecipes::stonecutter the stonecutting recipes that take the input
ShapedRecipe.display port crates/horizon-client/src/recipe_book.rs::Book::build shaped grid display
ShapelessRecipe.display port crates/horizon-client/src/recipe_book.rs::Book::build shapeless display
ShapelessRecipe.matches port crates/horizon-client/src/crafting.rs::Recipes::recipe_matches
ShieldDecorationRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble
ShieldDecorationRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches
SingleItemRecipe.placementInfo port crates/horizon-client/src/crafting.rs::Recipes::placement
SingleItemRecipe.simpleMapCodec skip:java
SingleItemRecipe.simpleStreamCodec skip:java
SingleRecipeInput.getItem skip:java
SmeltingRecipe.recipeBookCategory skip:data book category comes from the recipe JSON (Recipes::load keeps recipes.meta)
SmithingRecipe.matches port crates/horizon-client/src/stations.rs::StationRecipes::smithing_result template, base and addition tested together; the result is shown only when they match
SmithingRecipeInput.getItem skip:java
SmithingRecipeInput.isEmpty skip:java
StonecutterRecipe.display port crates/horizon-client/src/stations.rs::StationRecipes::stonecutter stonecutting recipe with its input and result
TransmuteResult.fromTemplate inline crates/horizon-client/src/crafting.rs::Template::create the transmute result is kept as the template
TransmuteResult.resolve port crates/horizon-client/src/crafting.rs::Template::over item from the input when the template has none; count and components from the template
DisplayContentsFactory.ForStacks.forStack skip:java
FurnaceRecipeDisplay.isEnabled skip:data feature flags: Horizon's recipe set is the pinned pack's, with no flags to check
ShapedCraftingRecipeDisplay.isEnabled skip:data feature flags: Horizon's recipe set is the pinned pack's, with no flags to check
ShapelessCraftingRecipeDisplay.isEnabled skip:data feature flags: Horizon's recipe set is the pinned pack's, with no flags to check
SlotDisplays.bootstrap skip:data registry bootstrap
ConditionalEffect.codec skip:java
ConditionalEffect.matches inline crates/horizon-client/src/game/enchant_effects.rs::Game::post_attack the requirements check is repeated per hook: post_attack, post_attack_bursts, thorns_damage, bow_projectile_ignite
ItemEnchantments.addToTooltip port crates/horizon-client/src/game/stations.rs::Game::stack_tooltip_lines enchantment lines; stored enchantments for books
ItemEnchantments.equals skip:java
ItemEnchantments.getTagOrEmpty skip:java
TargetedConditionalEffect.equipmentDropsCodec skip:java
TargetedConditionalEffect.matches port crates/horizon-world/src/loot.rs::LootData::equipment_drops equipment_drops (Looting) checks the requirements per enchanted slot
AllOf.codec skip:java
AllOf.EntityEffects.apply inline crates/horizon-client/src/game/enchant_effects.rs::Game::apply_piercing_effect gap: minor: nested all_of is walked only for the post-piercing hook
AllOf.LocationBasedEffects.onChangedBlock inline crates/horizon-client/src/game/enchant_effects.rs::Game::location_changed_effects gap: minor: only the replace_disk effect is handled; the nested list is not walked
AllOf.LocationBasedEffects.onDeactivated inline crates/horizon-client/src/game/enchant_effects.rs::Game::location_changed_effects gap: minor: only the replace_disk effect is handled; the nested list is not walked
AllOf.ValueEffects.process port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with each value effect in turn
ApplyEntityImpulse.apply port crates/horizon-client/src/game/enchant_effects.rs::Game::apply_piercing_effect impulse along the look direction on the post-piercing hook
ApplyExhaustion.apply port crates/horizon-client/src/game/enchant_effects.rs::Game::apply_piercing_effect food exhaustion on the post-piercing hook
DamageEntity.apply port crates/horizon-client/src/game/enchant_effects.rs::Game::thorns_damage thorns damage, random between min and max
ExplodeEffect.apply port crates/horizon-client/src/game/enchant_effects.rs::Game::post_attack_bursts wind burst at the player's feet
ExplodeEffect.getDamageSource inline crates/horizon-client/src/game/enchant_effects.rs::Game::post_attack_bursts gap: minor: the burst builds no damage source; it knocks back and triggers blocks only
PlaySoundEffect.apply port crates/horizon-client/src/game/enchant_effects.rs::Game::apply_piercing_effect sound by level, heard by all
RemoveBinomial.process port crates/horizon-items/src/enchant.rs::apply_value_effect the binomial drop count for unbreaking
ReplaceBlock.apply missing minor: no enchantment in the pinned data uses replace_block
RunFunction.apply missing minor: no enchantment in the pinned data uses run_function
ScaleExponentially.process missing minor: no enchantment in the pinned data uses the exponential value effect
SetBlockProperties.apply missing minor: no enchantment in the pinned data uses set_block_properties
SpawnParticlesEffect.apply port crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: soul speed's particles are hardcoded, not read from the effect data
SpawnParticlesEffect.PositionSource.getCoordinate inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: the particle position is hardcoded
SpawnParticlesEffect.VelocitySource.getVelocity inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: the particle velocity is hardcoded
SummonEntityEffect.apply port crates/horizon-client/src/game/trident.rs::Game::channel_lightning gap: minor: only the lightning bolt of channeling; other summon_entity types are not ported
EnchantmentProviderTypes.bootstrap skip:data registry bootstrap
EnchantmentsByCost.enchant port crates/horizon-world/src/loot.rs::LootData::select_enchantments EnchantmentHelper.selectEnchantment with a cost budget
SingleEnchantment.enchant port crates/horizon-world/src/loot.rs::enchant one enchantment at a level
VanillaEnchantmentProviders.bootstrap skip:data registry bootstrap
ArmorMaterials.makeDefense skip:data armour defence values come from item data
ArmorTrim.addToTooltip port crates/horizon-client/src/game/stations.rs::Game::stack_tooltip_lines upgrade title, trim pattern and material lines
TrimMaterials.bootstrap skip:data registry bootstrap
TrimMaterials.register skip:data trim materials are read from data
TrimPatterns.bootstrap skip:data registry bootstrap
TrimPatterns.register skip:data trim patterns are read from data
CompositeSlotSource.createCodec skip:java
CompositeSlotSource.group missing minor: composite slot groups (loot-style term lists) are not ported; /item takes one slot name
CountingModifier.accept port crates/horizon-client/src/game/commands/items.rs::Game::cmd_item_modify counts each slot set, limited to the max stack size
RangeSlotSource.provide port crates/horizon-client/src/game/commands/items.rs::Game::slots_named gap: minor: slots by name pattern only, no slot_range argument
SlotCollection.concat inline crates/horizon-client/src/game/commands/items.rs::Game::slots_named the slots of several names become one list
SlotCollection.of port crates/horizon-client/src/game/commands/items.rs::Game::slot_get
SlotCollection.FlatMapped.modifySlots inline crates/horizon-client/src/game/commands/items.rs::Game::cmd_item_modify per-target slot loop
SlotCollection.FlatMapped.replaceSlotItems inline crates/horizon-client/src/game/commands/items.rs::Game::cmd_item per-target slot loop
SlotSelector.FilteringSelector.trySelectSlot inline crates/horizon-client/src/game/commands/items.rs::Game::cmd_item_modify gap: minor: only the non-empty filter (SlotSelector.NON_EMPTY_SLOTS); predicate filters are not ported
SlotSelector.TrackingSelector.filter missing minor: slot limit selectors are not ported
SlotSelector.TrackingSelector.trySelectSlot missing minor: slot limit selectors are not ported
SlotSources.bootstrap skip:data registry bootstrap
TransformedSlotSource.commonFields skip:java
TradeCost.toItemCost port crates/horizon-client/src/merchant.rs::cost count plus the extra cost, clamped to the max stack size
Can't render this file because it contains an unexpected character in line 1 and column 84.
+316
View File
@@ -0,0 +1,316 @@
TradeRebalanceVillagerTrades skip:data rebalanced villager trade definitions are data; Horizon reads trade_set JSON (merchant.rs Trades::load)
TradeSets skip:data registry bootstrap; trade sets come from the trade_set data (merchant.rs Trades::load)
VillagerTrades skip:data trade definitions are data; read from data/minecraft/trade_set and villager_trade (merchant.rs Trades::load)
BlockCollisions.<init> port crates/horizon-world/src/block_collision_scan.rs::BlockCollisionScan::new scan set-up over the box
BlockCollisions.computeNext port crates/horizon-world/src/block_collision_scan.rs::BlockCollisionScan::find_next next block shape along the box
BlockCollisions.getChunk inline crates/horizon-world/src/block_collision_scan.rs::BlockCollisionScan::find_next chunk fetch through collision_chunk inside find_next
CardinalLighting.byFace port crates/horizon-client/src/mesher/lighting.rs::cardinal per-face directional shade; nether flag handled in the same fn
ClipContext.getFluidShape inline crates/horizon-world/src/world_ray.rs::clip_world pick_fluid decides canPick; the shape is clipped in clip_world
ColorMapColorUtil.get port crates/horizon-client/src/biome.rs::sample colormap lookup by temperature and downfall
EntityBasedExplosionDamageCalculator.getBlockExplosionResistance missing unsure: source-entity overrides (wither skull, minecart TNT, primed TNT keeping nether portals) are not read; explosion_hit_block uses the block's own resistance
ExplosionDamageCalculator.getEntityDamageAmount inline crates/horizon-client/src/game/explosion.rs::Game::explosion_hurt_entities damage formula inline; the player copy is in explosion_hurt_player
LevelSettings.copy skip:java immutable record copy; Horizon keeps level fields on its own struct
LevelSettings.parse port crates/horizon-client/src/save.rs::Level::read reads difficulty, lock, allowCommands and game type from level.dat
LevelSettings.withAllowCommands skip:java immutable record builder
LevelSettings.withDataConfiguration skip:java immutable record builder
LevelSettings.withDifficulty skip:java immutable record builder
LevelSettings.withDifficultyLock skip:java immutable record builder
LevelSettings.withGameType skip:java immutable record builder
PathNavigationRegion skip:other pathfinding reads the live level (mobs/path.rs); no region snapshot is built
SimpleExplosionDamageCalculator.getBlockExplosionResistance inline crates/horizon-client/src/game/wind.rs::Game::wind_positions gap: minor: only the wind charge tag stops the rays; enchantment immune_blocks are not read
SimpleExplosionDamageCalculator.getKnockbackMultiplier inline crates/horizon-client/src/game/wind.rs::Game::wind_push_player creative-flying zero is here; the enchantment multiplier is in post_attack_bursts (enchant_effects.rs)
TicketStorage.activateAllDeactivatedTickets skip:other no deactivated-ticket state; ticket_levels.rs recomputes from players and forced chunks
TicketStorage.addTicket missing unsure: portal and teleport tickets are not modelled; ticket_levels.rs counts only players and forced chunks
TicketStorage.addTicketWithRadius missing unsure: radius tickets (portal, teleport) are not modelled; ticket_levels.rs counts only players and forced chunks
TicketStorage.canTicketExpire skip:other ticket expiry is not modelled; no timed tickets in ticket_levels.rs
TicketStorage.deactivateTicketsOnClosing skip:other chunk-unload bookkeeping; no per-ticket state
TicketStorage.forEachTicket skip:other iteration over stored tickets; ticket_levels.rs walks its own sources
TicketStorage.fromPacked skip:other saved tickets are not read; Horizon does not save chunk tickets
TicketStorage.getAllChunksWithTicketThat skip:other query over stored tickets; ticket_levels.rs answers per chunk
TicketStorage.getLowestTicket port crates/horizon-client/src/ticket_levels.rs::Map::get gap: minor: lowest level from player and forced sources only
TicketStorage.getOrCreateTickets skip:java per-chunk cache of tickets
TicketStorage.getTicketDebugString skip:debug debug text
TicketStorage.getTicketLevelAt port crates/horizon-client/src/ticket_levels.rs::Map::get gap: minor: levels from player and forced sources only
TicketStorage.isTicketSameTypeAndLevel skip:other compares stored tickets; Horizon stores none, levels come from ticket_levels.rs
TicketStorage.packTickets skip:other saves stored tickets; Horizon saves forced chunks as their own file (save.rs save_forced_chunks)
TicketStorage.purgeStaleTickets skip:other drops expired tickets; ticket_levels.rs has no timed tickets
TicketStorage.removeTicket inline crates/horizon-client/src/game/commands/terrain_cmds.rs::Game::cmd_forceload gap: minor: only the forced-chunk path; portal and teleport tickets are not modelled
TicketStorage.removeTicketIf skip:other predicate removal over stored tickets; forced chunks are changed by cmd_forceload
TicketStorage.removeTicketWithRadius missing unsure: radius tickets (portal, teleport) are not modelled
TicketStorage.replaceTicketLevelOfType skip:other re-levels stored tickets; ticket_levels.rs computes levels from positions
TicketStorage.shouldKeepDimensionActive missing unsure: whether a dimension stays ticking because of forced chunks was not checked
TicketStorage.updateChunkForced inline crates/horizon-client/src/game/commands/terrain_cmds.rs::Game::cmd_forceload the per-chunk add or remove of a forced chunk
TicketStorage.updateForcedChunks inline crates/horizon-client/src/save.rs::SaveDir::load_forced_chunks gap: minor: restores the saved forced set on load; no forced-chunk packet is sent here
BiomeSpecialEffects.Builder.build skip:java builder for biome effects; Horizon reads the effects from biome data (biome.rs)
CheckerboardColumnBiomeSource.getNoiseBiome port crates/horizon-world/src/worldgen/biome_source.rs::CheckerboardBiomeSource::noise_biome checkerboard column pick
FeatureSorter.buildFeaturesPerStep port crates/horizon-world/src/worldgen/feature_sort.rs::build_features_per_step
MobSpawnSettings.Builder skip:java builder for spawn data; Horizon reads spawn costs and entries from biome data (biome.rs, spawn_selection.rs)
MultiNoiseBiomeSourceParameterList skip:data knownPresets is the datagen preset table; Horizon reads biome-parameters copied by horizon-prepare
MultiNoiseBiomeSourceParameterList.Preset skip:data preset biome lists are datagen output; read from biome-parameters data
MultiNoiseBiomeSourceParameterLists skip:data bootstrap of the datagen parameter lists; Horizon reads biome-parameters
OverworldBiomeBuilder skip:data builds the overworld parameter tree at datagen time; Horizon reads biome-parameters JSON
TheEndBiomeSource.collectPossibleBiomes skip:java the five End biomes are fields of EndBiomeSource; no collection step
TheEndBiomeSource.create skip:java factory; the End source is built from the dimension data
TheEndBiomeSource.getNoiseBiome port crates/horizon-world/src/worldgen/biome_source.rs::EndBiomeSource::noise_biome central circle, then erosion bands
AbstractFurnaceBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
AbstractFurnaceBlock.createFurnaceTicker port crates/horizon-client/src/game/block_entity_ticks.rs::Game::tick_furnace furnace ticker
AbstractFurnaceBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
AmethystBlock missing player: an arrow or other projectile that hits an amethyst block plays no chime (vanilla plays block.amethyst_block.chime)
AmethystClusterBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
AmethystClusterBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
AmethystClusterBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state waterlogged state from block data
AmethystClusterBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
AmethystClusterBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
AmethystClusterBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
AttachedStemBlock.getCloneItemStack missing unsure: middle-click pick of an attached stem; pick_item.rs was not checked for block-to-item picks
AttachedStemBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
AttachedStemBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
AzaleaBlock.isBonemealSuccess port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_success
AzaleaBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
AzaleaBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
BambooSaplingBlock.growBamboo port crates/horizon-world/src/level/tick.rs::Sim::bamboo_grow sets the stalk above with small leaves
BambooSaplingBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
BambooSaplingBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::bamboo_sapling_grow
BambooSaplingBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
BarrelBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
BarrelBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
BarrelBlock.tick port crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed gap: minor: recheckOpen is the open-viewer count, checked where the lid state is set
BarrelBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
BarrierBlock.canPlaceLiquid port crates/horizon-world/src/level/fluids.rs::Sim::can_place_liquid
BarrierBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
BarrierBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
BarrierBlock.pickupBlock port crates/horizon-world/src/level/fluids.rs::Sim::pickup_block gap: minor: vanilla lets only a creative player pick it up; that rule is not checked here
BarrierBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
BaseCoralWallFanBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
BaseCoralWallFanBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
BaseCoralWallFanBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
BaseCoralWallFanBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
BaseCoralWallFanBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
BaseEntityBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item menu opened from the block's use action
BaseEntityBlock.triggerEvent port crates/horizon-world/src/level/pistons.rs::Sim::trigger_event
BaseTorchBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
BeetrootBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::crop_random_tick
BigDripleafStemBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
BigDripleafStemBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
BigDripleafStemBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
BigDripleafStemBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
BigDripleafStemBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
BigDripleafStemBlock.place port crates/horizon-world/src/level/bonemeal.rs::Sim::dripleaf_stem_place places the stem with waterlogging and facing
BigDripleafStemBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick
BigDripleafStemBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
BlastFurnaceBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick lit blast furnace smoke and flame
BlastFurnaceBlock.openContainer port crates/horizon-world/src/level/interact.rs::Sim::use_without_item opens the blast furnace menu
BonemealableFeaturePlacerBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Behaviours::place_feature places the configured feature
BrewingStandBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick brewing bubbles
BrewingStandBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
BrewingStandBlock.getTicker port crates/horizon-client/src/brewing.rs::BrewingStand::brew the stand's brewing step
BuddingAmethystBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::budding_amethyst_tick
BushBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
CactusFlowerBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
CakeBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CakeBlock.useItemOn port crates/horizon-world/src/level/interact.rs::Behaviours::use_item_on
CakeBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
CalibratedSculkSensorBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
CalibratedSculkSensorBlock.getSignal port crates/horizon-world/src/level/sculk.rs::Behaviours::calibrated_back_signal
CalibratedSculkSensorBlock.getTicker port crates/horizon-world/src/level/sculk.rs::Sim::sculk_sensor_tick
CalibratedSculkSensorBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
CarpetBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CartographyTableBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
CartographyTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
CaveVines.hasGlowBerries port crates/horizon-world/src/level/interact.rs::Sim::use_without_item berries check on the pick branch
CaveVinesBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
CaveVinesBlock.getGrowIntoState port crates/horizon-world/src/level/tick.rs::Sim::growing_plant_grow_into_state 11% berries roll
CaveVinesPlantBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
CeilingHangingSignBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
CeilingHangingSignBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
CeilingHangingSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
CeilingHangingSignBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
CeilingHangingSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
CeilingHangingSignBlock.shouldTryToChainAnotherHangingSign inline crates/horizon-world/src/level/place.rs::Sim::placement_class chain check sits in the ceiling sign arm
CeilingHangingSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CeilingHangingSignBlock.useItemOn port crates/horizon-world/src/level/interact.rs::Behaviours::use_item_on
CocoaBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
CocoaBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
CocoaBlock.getShape skip:data block shape is a per-state table from the vanilla data
CocoaBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
CocoaBlock.isRandomlyTicking port crates/horizon-world/src/level/mod.rs::Behaviours::is_randomly_ticking
CocoaBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
CocoaBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
CocoaBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
CocoaBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
ColorCollection skip:data registry helper for colour families of blocks and items; the variants are data in horizon-items
ConduitBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
ConduitBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
ConduitBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CoralBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
CoralBlock.scanForWater port crates/horizon-world/src/level/shapes.rs::Sim::coral_scan_for_water
CoralBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
CoralBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CoralFanBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
CoralFanBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CoralPlantBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
CoralPlantBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CoralWallFanBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
CoralWallFanBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
CrossCollisionBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
CrossCollisionBlock.makeShapes skip:java builds the VoxelShape arrays; shapes are data
CrossCollisionBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
CrossCollisionBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
CryingObsidianBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick crying tear particles
DropExperienceBlock.spawnAfterBreak port crates/horizon-world/src/level/removal.rs::break_experience
EnchantingTableBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick book and rune particles
EnchantingTableBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
EnchantingTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
EndRodBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
EndRodBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
EnderChestBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
EnderChestBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
EnderChestBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
EnderChestBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
EnderChestBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
EnderChestBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
EnderChestBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
FenceGateBlock.connectsToDirection port crates/horizon-world/src/level/shapes.rs::Sim::fence_connects_to
FenceGateBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
FenceGateBlock.getBlockSupportShape skip:data block shape is a per-state table from the vanilla data
FenceGateBlock.getCollisionShape skip:data block shape is a per-state table from the vanilla data
FenceGateBlock.getOcclusionShape skip:data block shape is a per-state table from the vanilla data
FenceGateBlock.getShape skip:data block shape is a per-state table from the vanilla data
FenceGateBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
FenceGateBlock.isPathfindable skip:data path types come from the per-state path data (mobs/path.rs)
FenceGateBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::gate_neighbor_changed
FenceGateBlock.onExplosionHit missing player: an explosion (TNT, creeper) does not open a closed, unpowered fence gate; vanilla toggles it open
FenceGateBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
FenceGateBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
FireflyBushBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
FlowerBedBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced
FlowerBedBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
FlowerBedBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
FlowerBedBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
FlowerBlock.makeEffectList skip:data suspicious stew effects are item data (stew_effects component)
FrogspawnBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::frogspawn_may_place_on
FrogspawnBlock.spawnTadpoles port crates/horizon-client/src/game.rs::Game::process_level_events handles the hatch block event: 2 to 5 tadpoles
FrogspawnBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
FrogspawnBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
FrostedIceBlock.fewerNeigboursThan port crates/horizon-world/src/level/hooks.rs::Sim::frosted_ice_fewer_neighbours_than
FrostedIceBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
FrostedIceBlock.slightlyMelt port crates/horizon-world/src/level/tick.rs::Sim::frosted_slightly_melt
FrostedIceBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::frosted_ice_tick
FurnaceBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick lit furnace smoke and flame
FurnaceBlock.openContainer port crates/horizon-world/src/level/interact.rs::Sim::use_without_item opens the furnace menu
GlowLichenBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
GrindstoneBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
GrindstoneBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
GrindstoneBlock.makeShapes skip:java builds the VoxelShape arrays; shapes are data
GrindstoneBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
GrindstoneBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
HalfTransparentBlock.skipRendering port crates/horizon-world/src/block_render.rs::FaceVisibility::skips neighbour faces of the same block
HangingRootsBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
HangingRootsBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
HangingRootsBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
HangingRootsBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
HangingSignBlock.getAttachmentPoint inline crates/horizon-world/src/level/place.rs::Sim::placement_class attach point is the wall or ceiling arm of placement_class
HeavyCoreBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
HeavyCoreBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
HeavyCoreBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
HopperBlock.checkPoweredState port crates/horizon-world/src/level/redstone.rs::Sim::hopper_check_powered
HopperBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
HopperBlock.entityInside inline crates/horizon-client/src/game/machines.rs::Game::suck_item_entities gap: minor: the hopper pulls item entities every tick, not on contact
HopperBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
HopperBlock.makeShapes skip:java builds the VoxelShape arrays; shapes are data
HopperBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place
HopperBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
HopperBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
HorizontalDirectionalBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
HugeMushroomBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
HugeMushroomBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
HugeMushroomBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
HugeMushroomBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
HugeMushroomBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
KelpBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
LadderBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
LadderBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
LadderBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
LadderBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
LadderBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
LadderBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
LanternBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
LanternBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
LanternBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
LanternBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
LanternBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
LeafLitterBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced
LeafLitterBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
LeafLitterBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
LeafLitterBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
LilyPadBlock.entityInside missing player: a boat that drives over a lily pad does not break it; vanilla destroys it
LilyPadBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
MagmaBlock.stepOn missing player: standing on magma does not hurt (vanilla deals 1 hot-floor damage unless sneaking)
MangrovePropaguleBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
MangrovePropaguleBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
MangrovePropaguleBlock.createNewHangingPropagule inline crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal hanging state set when a propagule grows down
MangrovePropaguleBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
MangrovePropaguleBlock.getShape skip:data block shape is a per-state table from the vanilla data
MangrovePropaguleBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
MangrovePropaguleBlock.isBonemealSuccess port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_success
MangrovePropaguleBlock.isFullyGrown inline crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid age 4 check in the propagule arm
MangrovePropaguleBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
MangrovePropaguleBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
MangrovePropaguleBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
MangroveRootsBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
MangroveRootsBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
MangroveRootsBlock.skipRendering port crates/horizon-world/src/block_render.rs::FaceVisibility::skips
MangroveRootsBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
MyceliumBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick mycelium spore particles
NetherFungusBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
NetherFungusBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
NetherWartBlock.isRandomlyTicking port crates/horizon-world/src/level/mod.rs::Behaviours::is_randomly_ticking
NetherWartBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
NetherrackBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid netherrack beside nylium
NetherrackBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
NyliumBlock.canBeNylium port crates/horizon-world/src/level/tick.rs::Sim::can_be_nylium
NyliumBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
NyliumBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
NyliumBlock.place inline crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal fungus placement folded into the bonemeal step
NyliumBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
ObserverBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal
ObserverBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
ObserverBlock.getSignal port crates/horizon-world/src/level/redstone.rs::Sim::signal
ObserverBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place
ObserverBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
ObserverBlock.startSignal port crates/horizon-world/src/level/redstone.rs::Sim::observer_start_signal
ObserverBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
ObserverBlock.updateNeighborsInFront port crates/horizon-world/src/level/redstone.rs::Sim::observer_update_in_front
ObserverBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
PipeBlock skip:java makeShapes builds the VoxelShape arrays; shapes are data
PlainSignBlock skip:java constant accessor for the attach point; sign placement picks standing or wall signs in place.rs
PoweredRailBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
PoweredRailBlock.findPoweredRailSignal port crates/horizon-world/src/level/rails.rs::Sim::powered_rail_find
PoweredRailBlock.isSameRailWithPower port crates/horizon-world/src/level/rails.rs::Sim::powered_rail_same_with_power
PoweredRailBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
PoweredRailBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
PoweredRailBlock.updateState port crates/horizon-world/src/level/rails.rs::Sim::powered_rail_update
PressurePlateBlock.getSignalStrength port crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_strength
PressurePlateBlock.setSignalForState port crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_for_state
RedstoneLampBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
RedstoneLampBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
RedstoneLampBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
RedstoneTorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick redstone torch smoke
RedstoneTorchBlock.getDirectSignal port crates/horizon-world/src/level/redstone.rs::Sim::direct_signal
RedstoneTorchBlock.getSignal port crates/horizon-world/src/level/redstone.rs::Sim::signal
RedstoneTorchBlock.isToggledTooFrequently port crates/horizon-world/src/level/redstone.rs::Sim::torch_toggled_too_frequently
RedstoneTorchBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
RedstoneTorchBlock.notifyNeighbors port crates/horizon-world/src/level/redstone.rs::Sim::torch_notify_neighbors
RedstoneTorchBlock.tick port crates/horizon-world/src/level/redstone.rs::Sim::torch_tick
RedstoneWallTorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
RedstoneWallTorchBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
RedstoneWallTorchBlock.getSignal port crates/horizon-world/src/level/redstone.rs::Sim::signal
RedstoneWallTorchBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
RedstoneWallTorchBlock.hasNeighborSignal port crates/horizon-world/src/level/redstone.rs::Sim::torch_has_neighbor_signal
RedstoneWallTorchBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
RedstoneWallTorchBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
RepeaterBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
RepeaterBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
RepeaterBlock.shouldRedstoneWireConnectTo port crates/horizon-world/src/level/redstone.rs::Sim::should_wire_connect_to
RepeaterBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
RepeaterBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
1 TradeRebalanceVillagerTrades skip:data rebalanced villager trade definitions are data; Horizon reads trade_set JSON (merchant.rs Trades::load)
2 TradeSets skip:data registry bootstrap; trade sets come from the trade_set data (merchant.rs Trades::load)
3 VillagerTrades skip:data trade definitions are data; read from data/minecraft/trade_set and villager_trade (merchant.rs Trades::load)
4 BlockCollisions.<init> port crates/horizon-world/src/block_collision_scan.rs::BlockCollisionScan::new scan set-up over the box
5 BlockCollisions.computeNext port crates/horizon-world/src/block_collision_scan.rs::BlockCollisionScan::find_next next block shape along the box
6 BlockCollisions.getChunk inline crates/horizon-world/src/block_collision_scan.rs::BlockCollisionScan::find_next chunk fetch through collision_chunk inside find_next
7 CardinalLighting.byFace port crates/horizon-client/src/mesher/lighting.rs::cardinal per-face directional shade; nether flag handled in the same fn
8 ClipContext.getFluidShape inline crates/horizon-world/src/world_ray.rs::clip_world pick_fluid decides canPick; the shape is clipped in clip_world
9 ColorMapColorUtil.get port crates/horizon-client/src/biome.rs::sample colormap lookup by temperature and downfall
10 EntityBasedExplosionDamageCalculator.getBlockExplosionResistance missing unsure: source-entity overrides (wither skull, minecart TNT, primed TNT keeping nether portals) are not read; explosion_hit_block uses the block's own resistance
11 ExplosionDamageCalculator.getEntityDamageAmount inline crates/horizon-client/src/game/explosion.rs::Game::explosion_hurt_entities damage formula inline; the player copy is in explosion_hurt_player
12 LevelSettings.copy skip:java immutable record copy; Horizon keeps level fields on its own struct
13 LevelSettings.parse port crates/horizon-client/src/save.rs::Level::read reads difficulty, lock, allowCommands and game type from level.dat
14 LevelSettings.withAllowCommands skip:java immutable record builder
15 LevelSettings.withDataConfiguration skip:java immutable record builder
16 LevelSettings.withDifficulty skip:java immutable record builder
17 LevelSettings.withDifficultyLock skip:java immutable record builder
18 LevelSettings.withGameType skip:java immutable record builder
19 PathNavigationRegion skip:other pathfinding reads the live level (mobs/path.rs); no region snapshot is built
20 SimpleExplosionDamageCalculator.getBlockExplosionResistance inline crates/horizon-client/src/game/wind.rs::Game::wind_positions gap: minor: only the wind charge tag stops the rays; enchantment immune_blocks are not read
21 SimpleExplosionDamageCalculator.getKnockbackMultiplier inline crates/horizon-client/src/game/wind.rs::Game::wind_push_player creative-flying zero is here; the enchantment multiplier is in post_attack_bursts (enchant_effects.rs)
22 TicketStorage.activateAllDeactivatedTickets skip:other no deactivated-ticket state; ticket_levels.rs recomputes from players and forced chunks
23 TicketStorage.addTicket missing unsure: portal and teleport tickets are not modelled; ticket_levels.rs counts only players and forced chunks
24 TicketStorage.addTicketWithRadius missing unsure: radius tickets (portal, teleport) are not modelled; ticket_levels.rs counts only players and forced chunks
25 TicketStorage.canTicketExpire skip:other ticket expiry is not modelled; no timed tickets in ticket_levels.rs
26 TicketStorage.deactivateTicketsOnClosing skip:other chunk-unload bookkeeping; no per-ticket state
27 TicketStorage.forEachTicket skip:other iteration over stored tickets; ticket_levels.rs walks its own sources
28 TicketStorage.fromPacked skip:other saved tickets are not read; Horizon does not save chunk tickets
29 TicketStorage.getAllChunksWithTicketThat skip:other query over stored tickets; ticket_levels.rs answers per chunk
30 TicketStorage.getLowestTicket port crates/horizon-client/src/ticket_levels.rs::Map::get gap: minor: lowest level from player and forced sources only
31 TicketStorage.getOrCreateTickets skip:java per-chunk cache of tickets
32 TicketStorage.getTicketDebugString skip:debug debug text
33 TicketStorage.getTicketLevelAt port crates/horizon-client/src/ticket_levels.rs::Map::get gap: minor: levels from player and forced sources only
34 TicketStorage.isTicketSameTypeAndLevel skip:other compares stored tickets; Horizon stores none, levels come from ticket_levels.rs
35 TicketStorage.packTickets skip:other saves stored tickets; Horizon saves forced chunks as their own file (save.rs save_forced_chunks)
36 TicketStorage.purgeStaleTickets skip:other drops expired tickets; ticket_levels.rs has no timed tickets
37 TicketStorage.removeTicket inline crates/horizon-client/src/game/commands/terrain_cmds.rs::Game::cmd_forceload gap: minor: only the forced-chunk path; portal and teleport tickets are not modelled
38 TicketStorage.removeTicketIf skip:other predicate removal over stored tickets; forced chunks are changed by cmd_forceload
39 TicketStorage.removeTicketWithRadius missing unsure: radius tickets (portal, teleport) are not modelled
40 TicketStorage.replaceTicketLevelOfType skip:other re-levels stored tickets; ticket_levels.rs computes levels from positions
41 TicketStorage.shouldKeepDimensionActive missing unsure: whether a dimension stays ticking because of forced chunks was not checked
42 TicketStorage.updateChunkForced inline crates/horizon-client/src/game/commands/terrain_cmds.rs::Game::cmd_forceload the per-chunk add or remove of a forced chunk
43 TicketStorage.updateForcedChunks inline crates/horizon-client/src/save.rs::SaveDir::load_forced_chunks gap: minor: restores the saved forced set on load; no forced-chunk packet is sent here
44 BiomeSpecialEffects.Builder.build skip:java builder for biome effects; Horizon reads the effects from biome data (biome.rs)
45 CheckerboardColumnBiomeSource.getNoiseBiome port crates/horizon-world/src/worldgen/biome_source.rs::CheckerboardBiomeSource::noise_biome checkerboard column pick
46 FeatureSorter.buildFeaturesPerStep port crates/horizon-world/src/worldgen/feature_sort.rs::build_features_per_step
47 MobSpawnSettings.Builder skip:java builder for spawn data; Horizon reads spawn costs and entries from biome data (biome.rs, spawn_selection.rs)
48 MultiNoiseBiomeSourceParameterList skip:data knownPresets is the datagen preset table; Horizon reads biome-parameters copied by horizon-prepare
49 MultiNoiseBiomeSourceParameterList.Preset skip:data preset biome lists are datagen output; read from biome-parameters data
50 MultiNoiseBiomeSourceParameterLists skip:data bootstrap of the datagen parameter lists; Horizon reads biome-parameters
51 OverworldBiomeBuilder skip:data builds the overworld parameter tree at datagen time; Horizon reads biome-parameters JSON
52 TheEndBiomeSource.collectPossibleBiomes skip:java the five End biomes are fields of EndBiomeSource; no collection step
53 TheEndBiomeSource.create skip:java factory; the End source is built from the dimension data
54 TheEndBiomeSource.getNoiseBiome port crates/horizon-world/src/worldgen/biome_source.rs::EndBiomeSource::noise_biome central circle, then erosion bands
55 AbstractFurnaceBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
56 AbstractFurnaceBlock.createFurnaceTicker port crates/horizon-client/src/game/block_entity_ticks.rs::Game::tick_furnace furnace ticker
57 AbstractFurnaceBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
58 AmethystBlock missing player: an arrow or other projectile that hits an amethyst block plays no chime (vanilla plays block.amethyst_block.chime)
59 AmethystClusterBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
60 AmethystClusterBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
61 AmethystClusterBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state waterlogged state from block data
62 AmethystClusterBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
63 AmethystClusterBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
64 AmethystClusterBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
65 AttachedStemBlock.getCloneItemStack missing unsure: middle-click pick of an attached stem; pick_item.rs was not checked for block-to-item picks
66 AttachedStemBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
67 AttachedStemBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
68 AzaleaBlock.isBonemealSuccess port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_success
69 AzaleaBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
70 AzaleaBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
71 BambooSaplingBlock.growBamboo port crates/horizon-world/src/level/tick.rs::Sim::bamboo_grow sets the stalk above with small leaves
72 BambooSaplingBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
73 BambooSaplingBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::bamboo_sapling_grow
74 BambooSaplingBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
75 BarrelBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
76 BarrelBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
77 BarrelBlock.tick port crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed gap: minor: recheckOpen is the open-viewer count, checked where the lid state is set
78 BarrelBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
79 BarrierBlock.canPlaceLiquid port crates/horizon-world/src/level/fluids.rs::Sim::can_place_liquid
80 BarrierBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
81 BarrierBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
82 BarrierBlock.pickupBlock port crates/horizon-world/src/level/fluids.rs::Sim::pickup_block gap: minor: vanilla lets only a creative player pick it up; that rule is not checked here
83 BarrierBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
84 BaseCoralWallFanBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
85 BaseCoralWallFanBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
86 BaseCoralWallFanBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
87 BaseCoralWallFanBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
88 BaseCoralWallFanBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
89 BaseEntityBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item menu opened from the block's use action
90 BaseEntityBlock.triggerEvent port crates/horizon-world/src/level/pistons.rs::Sim::trigger_event
91 BaseTorchBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
92 BeetrootBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::crop_random_tick
93 BigDripleafStemBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
94 BigDripleafStemBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
95 BigDripleafStemBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
96 BigDripleafStemBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
97 BigDripleafStemBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
98 BigDripleafStemBlock.place port crates/horizon-world/src/level/bonemeal.rs::Sim::dripleaf_stem_place places the stem with waterlogging and facing
99 BigDripleafStemBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick
100 BigDripleafStemBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
101 BlastFurnaceBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick lit blast furnace smoke and flame
102 BlastFurnaceBlock.openContainer port crates/horizon-world/src/level/interact.rs::Sim::use_without_item opens the blast furnace menu
103 BonemealableFeaturePlacerBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Behaviours::place_feature places the configured feature
104 BrewingStandBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick brewing bubbles
105 BrewingStandBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
106 BrewingStandBlock.getTicker port crates/horizon-client/src/brewing.rs::BrewingStand::brew the stand's brewing step
107 BuddingAmethystBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::budding_amethyst_tick
108 BushBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
109 CactusFlowerBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
110 CakeBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
111 CakeBlock.useItemOn port crates/horizon-world/src/level/interact.rs::Behaviours::use_item_on
112 CakeBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
113 CalibratedSculkSensorBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
114 CalibratedSculkSensorBlock.getSignal port crates/horizon-world/src/level/sculk.rs::Behaviours::calibrated_back_signal
115 CalibratedSculkSensorBlock.getTicker port crates/horizon-world/src/level/sculk.rs::Sim::sculk_sensor_tick
116 CalibratedSculkSensorBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
117 CarpetBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
118 CartographyTableBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
119 CartographyTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
120 CaveVines.hasGlowBerries port crates/horizon-world/src/level/interact.rs::Sim::use_without_item berries check on the pick branch
121 CaveVinesBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
122 CaveVinesBlock.getGrowIntoState port crates/horizon-world/src/level/tick.rs::Sim::growing_plant_grow_into_state 11% berries roll
123 CaveVinesPlantBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
124 CeilingHangingSignBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
125 CeilingHangingSignBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
126 CeilingHangingSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
127 CeilingHangingSignBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
128 CeilingHangingSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
129 CeilingHangingSignBlock.shouldTryToChainAnotherHangingSign inline crates/horizon-world/src/level/place.rs::Sim::placement_class chain check sits in the ceiling sign arm
130 CeilingHangingSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
131 CeilingHangingSignBlock.useItemOn port crates/horizon-world/src/level/interact.rs::Behaviours::use_item_on
132 CocoaBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
133 CocoaBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
134 CocoaBlock.getShape skip:data block shape is a per-state table from the vanilla data
135 CocoaBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
136 CocoaBlock.isRandomlyTicking port crates/horizon-world/src/level/mod.rs::Behaviours::is_randomly_ticking
137 CocoaBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
138 CocoaBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
139 CocoaBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
140 CocoaBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
141 ColorCollection skip:data registry helper for colour families of blocks and items; the variants are data in horizon-items
142 ConduitBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
143 ConduitBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
144 ConduitBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
145 CoralBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
146 CoralBlock.scanForWater port crates/horizon-world/src/level/shapes.rs::Sim::coral_scan_for_water
147 CoralBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
148 CoralBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
149 CoralFanBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
150 CoralFanBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
151 CoralPlantBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
152 CoralPlantBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
153 CoralWallFanBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
154 CoralWallFanBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
155 CrossCollisionBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
156 CrossCollisionBlock.makeShapes skip:java builds the VoxelShape arrays; shapes are data
157 CrossCollisionBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
158 CrossCollisionBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
159 CryingObsidianBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick crying tear particles
160 DropExperienceBlock.spawnAfterBreak port crates/horizon-world/src/level/removal.rs::break_experience
161 EnchantingTableBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick book and rune particles
162 EnchantingTableBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
163 EnchantingTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
164 EndRodBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
165 EndRodBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
166 EnderChestBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
167 EnderChestBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
168 EnderChestBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
169 EnderChestBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
170 EnderChestBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
171 EnderChestBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
172 EnderChestBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
173 FenceGateBlock.connectsToDirection port crates/horizon-world/src/level/shapes.rs::Sim::fence_connects_to
174 FenceGateBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
175 FenceGateBlock.getBlockSupportShape skip:data block shape is a per-state table from the vanilla data
176 FenceGateBlock.getCollisionShape skip:data block shape is a per-state table from the vanilla data
177 FenceGateBlock.getOcclusionShape skip:data block shape is a per-state table from the vanilla data
178 FenceGateBlock.getShape skip:data block shape is a per-state table from the vanilla data
179 FenceGateBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
180 FenceGateBlock.isPathfindable skip:data path types come from the per-state path data (mobs/path.rs)
181 FenceGateBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::gate_neighbor_changed
182 FenceGateBlock.onExplosionHit missing player: an explosion (TNT, creeper) does not open a closed, unpowered fence gate; vanilla toggles it open
183 FenceGateBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
184 FenceGateBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
185 FireflyBushBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
186 FlowerBedBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced
187 FlowerBedBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
188 FlowerBedBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
189 FlowerBedBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
190 FlowerBlock.makeEffectList skip:data suspicious stew effects are item data (stew_effects component)
191 FrogspawnBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::frogspawn_may_place_on
192 FrogspawnBlock.spawnTadpoles port crates/horizon-client/src/game.rs::Game::process_level_events handles the hatch block event: 2 to 5 tadpoles
193 FrogspawnBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
194 FrogspawnBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
195 FrostedIceBlock.fewerNeigboursThan port crates/horizon-world/src/level/hooks.rs::Sim::frosted_ice_fewer_neighbours_than
196 FrostedIceBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
197 FrostedIceBlock.slightlyMelt port crates/horizon-world/src/level/tick.rs::Sim::frosted_slightly_melt
198 FrostedIceBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::frosted_ice_tick
199 FurnaceBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick lit furnace smoke and flame
200 FurnaceBlock.openContainer port crates/horizon-world/src/level/interact.rs::Sim::use_without_item opens the furnace menu
201 GlowLichenBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
202 GrindstoneBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
203 GrindstoneBlock.getMenuProvider port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
204 GrindstoneBlock.makeShapes skip:java builds the VoxelShape arrays; shapes are data
205 GrindstoneBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
206 GrindstoneBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
207 HalfTransparentBlock.skipRendering port crates/horizon-world/src/block_render.rs::FaceVisibility::skips neighbour faces of the same block
208 HangingRootsBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
209 HangingRootsBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
210 HangingRootsBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
211 HangingRootsBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
212 HangingSignBlock.getAttachmentPoint inline crates/horizon-world/src/level/place.rs::Sim::placement_class attach point is the wall or ceiling arm of placement_class
213 HeavyCoreBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
214 HeavyCoreBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
215 HeavyCoreBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
216 HopperBlock.checkPoweredState port crates/horizon-world/src/level/redstone.rs::Sim::hopper_check_powered
217 HopperBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
218 HopperBlock.entityInside inline crates/horizon-client/src/game/machines.rs::Game::suck_item_entities gap: minor: the hopper pulls item entities every tick, not on contact
219 HopperBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
220 HopperBlock.makeShapes skip:java builds the VoxelShape arrays; shapes are data
221 HopperBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place
222 HopperBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
223 HopperBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
224 HorizontalDirectionalBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
225 HugeMushroomBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
226 HugeMushroomBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
227 HugeMushroomBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
228 HugeMushroomBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
229 HugeMushroomBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
230 KelpBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
231 LadderBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
232 LadderBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
233 LadderBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
234 LadderBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
235 LadderBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
236 LadderBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
237 LanternBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
238 LanternBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
239 LanternBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
240 LanternBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
241 LanternBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
242 LeafLitterBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced
243 LeafLitterBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
244 LeafLitterBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
245 LeafLitterBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
246 LilyPadBlock.entityInside missing player: a boat that drives over a lily pad does not break it; vanilla destroys it
247 LilyPadBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
248 MagmaBlock.stepOn missing player: standing on magma does not hurt (vanilla deals 1 hot-floor damage unless sneaking)
249 MangrovePropaguleBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
250 MangrovePropaguleBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
251 MangrovePropaguleBlock.createNewHangingPropagule inline crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal hanging state set when a propagule grows down
252 MangrovePropaguleBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
253 MangrovePropaguleBlock.getShape skip:data block shape is a per-state table from the vanilla data
254 MangrovePropaguleBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
255 MangrovePropaguleBlock.isBonemealSuccess port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_success
256 MangrovePropaguleBlock.isFullyGrown inline crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid age 4 check in the propagule arm
257 MangrovePropaguleBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
258 MangrovePropaguleBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
259 MangrovePropaguleBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
260 MangroveRootsBlock.getFluidState port crates/horizon-world/src/registry_fluid.rs::RegistryFluidWorld::fluid_state
261 MangroveRootsBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
262 MangroveRootsBlock.skipRendering port crates/horizon-world/src/block_render.rs::FaceVisibility::skips
263 MangroveRootsBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
264 MyceliumBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick mycelium spore particles
265 NetherFungusBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
266 NetherFungusBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
267 NetherWartBlock.isRandomlyTicking port crates/horizon-world/src/level/mod.rs::Behaviours::is_randomly_ticking
268 NetherWartBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
269 NetherrackBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid netherrack beside nylium
270 NetherrackBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
271 NyliumBlock.canBeNylium port crates/horizon-world/src/level/tick.rs::Sim::can_be_nylium
272 NyliumBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
273 NyliumBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
274 NyliumBlock.place inline crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal fungus placement folded into the bonemeal step
275 NyliumBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block
276 ObserverBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal
277 ObserverBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
278 ObserverBlock.getSignal port crates/horizon-world/src/level/redstone.rs::Sim::signal
279 ObserverBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place
280 ObserverBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
281 ObserverBlock.startSignal port crates/horizon-world/src/level/redstone.rs::Sim::observer_start_signal
282 ObserverBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
283 ObserverBlock.updateNeighborsInFront port crates/horizon-world/src/level/redstone.rs::Sim::observer_update_in_front
284 ObserverBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
285 PipeBlock skip:java makeShapes builds the VoxelShape arrays; shapes are data
286 PlainSignBlock skip:java constant accessor for the attach point; sign placement picks standing or wall signs in place.rs
287 PoweredRailBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
288 PoweredRailBlock.findPoweredRailSignal port crates/horizon-world/src/level/rails.rs::Sim::powered_rail_find
289 PoweredRailBlock.isSameRailWithPower port crates/horizon-world/src/level/rails.rs::Sim::powered_rail_same_with_power
290 PoweredRailBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
291 PoweredRailBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
292 PoweredRailBlock.updateState port crates/horizon-world/src/level/rails.rs::Sim::powered_rail_update
293 PressurePlateBlock.getSignalStrength port crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_strength
294 PressurePlateBlock.setSignalForState port crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_for_state
295 RedstoneLampBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
296 RedstoneLampBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
297 RedstoneLampBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
298 RedstoneTorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick redstone torch smoke
299 RedstoneTorchBlock.getDirectSignal port crates/horizon-world/src/level/redstone.rs::Sim::direct_signal
300 RedstoneTorchBlock.getSignal port crates/horizon-world/src/level/redstone.rs::Sim::signal
301 RedstoneTorchBlock.isToggledTooFrequently port crates/horizon-world/src/level/redstone.rs::Sim::torch_toggled_too_frequently
302 RedstoneTorchBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
303 RedstoneTorchBlock.notifyNeighbors port crates/horizon-world/src/level/redstone.rs::Sim::torch_notify_neighbors
304 RedstoneTorchBlock.tick port crates/horizon-world/src/level/redstone.rs::Sim::torch_tick
305 RedstoneWallTorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
306 RedstoneWallTorchBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
307 RedstoneWallTorchBlock.getSignal port crates/horizon-world/src/level/redstone.rs::Sim::signal
308 RedstoneWallTorchBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
309 RedstoneWallTorchBlock.hasNeighborSignal port crates/horizon-world/src/level/redstone.rs::Sim::torch_has_neighbor_signal
310 RedstoneWallTorchBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
311 RedstoneWallTorchBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
312 RepeaterBlock.createBlockStateDefinition skip:data block state definition is data (blocks table in horizon-items)
313 RepeaterBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
314 RepeaterBlock.shouldRedstoneWireConnectTo port crates/horizon-world/src/level/redstone.rs::Sim::should_wire_connect_to
315 RepeaterBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
316 RepeaterBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
+231
View File
@@ -0,0 +1,231 @@
RodBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror rod facing mirrored through the state table
RodBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rod facing turned through the state table
RootedDirtBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid needs air below
RotatedPillarBlock.rotatePillar port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate axis swap is in the rotate table
SandBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick desert sand ambient sound
SeagrassBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
SeagrassBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
SeagrassBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
SeagrassBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SegmentableBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced leaf litter and flower bed segments
SegmentableBlock.getShapeCalculator port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
SegmentableBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
ShelfMushroomBlock.bounceOn port crates/horizon-world/src/block_landing.rs::BlockLandingRegistry::fall_on shelf bounce flag of the landing rule
ShelfMushroomBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
ShelfMushroomBlock.createBlockStateDefinition skip:data states come from the generated block state table
ShelfMushroomBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
ShelfMushroomBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
ShelfMushroomBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
ShelfMushroomBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
ShelfMushroomBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SimpleWaterloggedBlock.pickupBlock port crates/horizon-world/src/level/fluids.rs::Sim::pickup_block
SimpleWaterloggedBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid
SkullBlock.createBlockStateDefinition skip:data states come from the generated block state table
SkullBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
SkullBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
SkullBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
SkullBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
SlabBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced
SlabBlock.canPlaceLiquid port crates/horizon-world/src/level/fluids.rs::Sim::can_place_liquid
SlabBlock.createBlockStateDefinition skip:data states come from the generated block state table
SlabBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
SlabBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
SlabBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
SlabBlock.isPathfindable skip:data per-state path type is exported state data (StateData.path)
SlabBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SlimeBlock.fallOn port crates/horizon-world/src/block_landing.rs::BlockLandingRegistry::fall_on slime landing rule
SmallDripleafBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
SmallDripleafBlock.createBlockStateDefinition skip:data states come from the generated block state table
SmallDripleafBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
SmallDripleafBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
SmallDripleafBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
SmallDripleafBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
SmallDripleafBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
SmallDripleafBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by
SmallDripleafBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SmithingTableBlock.getMenuProvider inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item station menu is opened by the use arm
SmithingTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
SmokerBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick lit smoker smoke
SmokerBlock.openContainer inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item furnace-family arm, which the smoker shares
SnowyBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
SnowyBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SoulFireBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SporeBlossomBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
SporeBlossomBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
SporeBlossomBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SpreadingSnowyBlock.canPropagate inline crates/horizon-world/src/level/tick.rs::Sim::spreading_snowy_tick spread test folded into the tick
SpreadingSnowyBlock.canStayAlive inline crates/horizon-world/src/level/tick.rs::Sim::spreading_snowy_tick survival test folded into the tick
SpreadingSnowyBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::spreading_snowy_tick
StandingSignBlock.createBlockStateDefinition skip:data states come from the generated block state table
StandingSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
StandingSignBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
StandingSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
StandingSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
StemBlock.getCloneItemStack missing unsure: minor: middle-click on a stem may not return its seed item; no stem case found in the pick code
StemBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
StemBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
StemBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::stem_random_tick
StonecutterBlock.getMenuProvider inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item station menu opened by the use arm
StonecutterBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
StonecutterBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
SugarCaneBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block growth arm of the random tick
SugarCaneBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
SugarCaneBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
SuspiciousEffectHolder.tryGet skip:data the effect comes from the item's stew effects data (item_data.rs)
TallSeagrassBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
TallSeagrassBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
TallSeagrassBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
TestBlock missing minor: game-test block for operators; Horizon keeps only its NBT
TestInstanceBlock missing minor: game-test instance block; Horizon keeps only its NBT
TintedParticleLeavesBlock.spawnFallingLeavesParticle port crates/horizon-client/src/animate_tick.rs::block_animate_tick falling tinted leaf particle
TorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick torch flame
TorchflowerCropBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block growth arm
TrapDoorBlock.createBlockStateDefinition skip:data states come from the generated block state table
TrapDoorBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
TrapDoorBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
TrapDoorBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
TrapDoorBlock.isPathfindable skip:data per-state path type is exported state data (StateData.path)
TrapDoorBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed redstone update arm for trapdoors
TrapDoorBlock.onExplosionHit missing player: a wind burst or explosion that could open a trapdoor leaves it shut; the explosion code has no trapdoor case
TrapDoorBlock.playSound port crates/horizon-world/src/level/redstone.rs::Sim::trapdoor_sound
TrapDoorBlock.toggle inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item the trapdoor arm cycles the open state
TrapDoorBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
TrapDoorBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
TrappedChestBlock.getDirectSignal port crates/horizon-world/src/level/redstone.rs::Sim::state_direct_signal
WallBannerBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
WallBannerBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
WallBannerBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
WallBannerBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
WallHangingSignBlock.canAttachTo inline crates/horizon-world/src/level/place.rs::Sim::wall_hanging_sign_can_place attach test folded into the placement check
WallHangingSignBlock.canPlace port crates/horizon-world/src/level/place.rs::Sim::wall_hanging_sign_can_place
WallHangingSignBlock.createBlockStateDefinition skip:data states come from the generated block state table
WallHangingSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
WallHangingSignBlock.isHittingEditableSide missing unsure: player: a hanging sign clicked on its side may not chain onto a wall hanging sign
WallHangingSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
WallHangingSignBlock.shouldTryToChainAnotherHangingSign missing unsure: player: a second hanging sign used on a wall sign may not chain on
WallHangingSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
WallHangingSignBlock.useItemOn port crates/horizon-world/src/level/interact.rs::Behaviours::use_item_on gap: player: chaining a hanging sign onto a wall hanging sign is not ported here
WallSignBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
WallSignBlock.createBlockStateDefinition skip:data states come from the generated block state table
WallSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
WallSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
WallSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
WallSkullBlock.createBlockStateDefinition skip:data states come from the generated block state table
WallSkullBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
WallSkullBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
WallTorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick wall torch flame
WallTorchBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
WallTorchBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
WallTorchBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
WallTorchBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
WaterloggedTransparentBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
WaterloggedTransparentBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
WaterloggedTransparentBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
WeatheringCopperChestBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block oxidation through the weathering interface branch
WeatheringCopperCollection skip:data block family registry; oxidation links come from the block data
WeatheringCopperCollection.ByState skip:data helper over the oxidation stages of the block family registry
WeatheringCopperDoorBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block oxidation through the weathering interface branch
WeightedPressurePlateBlock.getSignalStrength port crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_strength
WetSpongeBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick wet sponge drip
WetSpongeBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place wet sponge drying arm
BannerPatternLayers.removeLast inline crates/horizon-client/src/cauldron.rs::interact banner wash pops the last pattern in its arm
BannerPatternLayers.Builder skip:java builder for banner pattern layers
BannerPatterns skip:data registry bootstrap
BarrelBlockEntity.loadAdditional port crates/horizon-client-core/src/block_entity_nbt.rs::canonical gap: minor: canonical NBT form only, no load step of its own
BarrelBlockEntity.recheckOpen missing unsure: player: a barrel lid may stay open after a player walks away; only golem openers are rechecked on a timer
BarrelBlockEntity.saveAdditional port crates/horizon-client-core/src/block_entity_nbt.rs::canonical gap: minor: canonical NBT form only
BarrelBlockEntity.startOpen port crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed
BarrelBlockEntity.stopOpen port crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed
BarrelBlockEntity.updateBlockState inline crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed sets the open property when the count crosses zero
BlockEntityTicker skip:java ticker combinator; Horizon ticks each block entity directly
BlockEntityType.getBlockEntity skip:java factory that makes the block entity object for a state
BlockEntityTypes skip:data registry
BoundingBoxRenderable.RenderableBox skip:debug test box outline renderer
CopperGolemStatueBlockEntity.createStatue port crates/horizon-client/src/game/copper_golems.rs::Game::golem_turn_to_statue gap: minor: the golem's custom name is not copied onto the statue
CopperGolemStatueBlockEntity.getItem port crates/horizon-client/src/game/block_items.rs::Game::picked_stack statue pose on the picked item
CopperGolemStatueBlockEntity.initCopperGolem port crates/horizon-client/src/game/copper_golems.rs::Game::use_golem_statue axe on an unaffected statue brings the golem back
DecoratedPotPatterns skip:data bootstrap and asset registration
EnchantingTableBlockEntity.bookAnimationTick port crates/horizon-client/src/block_entity_anim.rs::EnchantingBook::tick
ListBackedContainer skip:java slot helpers over a plain list
PotDecorations.addSideDetailsToTooltip port crates/horizon-client/src/item_tooltip.rs::TooltipDisplay::detail_lines sherd lines of the decorated pot tooltip
PotDecorations.allBrick skip:data constant brick decoration set
PotentSulfurBlockEntity.applyNauseaEffect missing player: standing in potent sulfur gas gives no nausea, since the geyser never erupts
PotentSulfurBlockEntity.canBeReachedByNoxiousGas missing player: gas from a potent sulfur geyser never reaches players
PotentSulfurBlockEntity.findNoxiousGasSourceBlock missing minor: helper of the geyser gas, not ported
PotentSulfurBlockEntity.getNearbyLivingEntities missing minor: helper of the geyser gas, not ported
PotentSulfurBlockEntity.getUnobstructedBlockCount missing minor: helper of the geyser gas, not ported
PotentSulfurBlockEntity.geyserPositional missing player: no potent sulfur geyser eruption, so no geyser plume or sound
PotentSulfurBlockEntity.haveLineOfSight missing minor: helper of the geyser gas, not ported
PotentSulfurBlockEntity.isGeyserPassableBlock missing minor: helper of the geyser, not ported
PotentSulfurBlockEntity.loadAdditional missing minor: the eruption timer is not loaded; Horizon keeps only the countdown in NBT
PotentSulfurBlockEntity.setLevel missing minor: the eruption timer is not started on load
PotentSulfurBlockEntity.spawnGeyserParticle missing player: no geyser particles over a potent sulfur block
PotentSulfurBlockEntity.spawnNoxiousGasCloudParticle missing player: no noxious gas cloud particles over a potent sulfur block
RandomizableContainerBlockEntity.applyImplicitComponents missing minor: a chest item does not hand its loot table back to the block
RandomizableContainerBlockEntity.canOpen missing unsure: minor: the spectator and loot-table open checks were not found
RandomizableContainerBlockEntity.collectImplicitComponents missing minor: a container does not save its loot table onto the item it drops
RandomizableContainerBlockEntity.createMenu port crates/horizon-client/src/game.rs::Game::open_menu gap: minor: the spectator and loot-table checks are not ported here
SculkSensorBlockEntity.loadAdditional port crates/horizon-client/src/sculk.rs::SculkEntity::load
SculkSensorBlockEntity.saveAdditional port crates/horizon-client/src/sculk.rs::SculkEntity::to_nbt
SculkSensorBlockEntity.VibrationUser.canReceiveVibration port crates/horizon-client/src/sculk.rs::valid_vibration
SculkSensorBlockEntity.VibrationUser.onReceiveVibration port crates/horizon-client/src/sculk.rs::Data::schedule
TestBlockEntity missing minor: game-test block entity; reset, trigger and logging are not ported, NBT only
TestInstanceBlockEntity missing minor: game-test structure tooling; export and chunk forcing are not ported
TrialSpawnerConfig.calculateTargetSimultaneousMobs port crates/horizon-client/src/mobs/trial_spawner.rs::TrialConfig::target_simultaneous_mobs
TrialSpawnerConfig.calculateTargetTotalMobs port crates/horizon-client/src/mobs/trial_spawner.rs::TrialConfig::target_total_mobs
TrialSpawnerConfig.withSpawning skip:java builder-style setter on the config record
TrialSpawnerConfig.Builder skip:java builder for the trial config
TrialSpawnerConfigs skip:data registry bootstrap and equipment spawn data
SolidDebugger skip:debug debug dump of a block state
StateDefinition skip:java codecs and state builders; states come from the generated block state table
StateDefinition.Builder skip:java state builder
StateDefinition.StateCollection skip:data neighbour tables of the state graph are generated data
BlockInWorld skip:java accessor over the level's state and block entity
BlockPattern.matches port crates/horizon-client/src/game/golems.rs::Game::find_golem golem head and body patterns only, not a generic pattern matcher
BlockPattern.translateAndRotate inline crates/horizon-client/src/game/golems.rs::Game::find_golem pattern placement folded into golem search
BlockPattern.BlockPatternMatch skip:java match result accessor
BlockPatternBuilder skip:java builder for block patterns
BlockStatePredicate skip:java predicate builder
BooleanProperty skip:java property accessor
ChestType skip:java enum helper
EnumProperty skip:java property factory and hashing
IntegerProperty skip:java property accessor
BlockMatcher skip:java block scan helpers; Horizon scans with direct loops
BoxBlockMatcher skip:java block scan helpers; Horizon scans with direct loops
FilteredSectionCache skip:java section cache for block scans
OrderedBlockMatcher skip:java block scan helpers; Horizon scans with direct loops
BulkSectionAccess skip:java section cache for bulk writes
ChunkGenerators skip:data bootstrap
ChunkSource.hasChunk port crates/horizon-client/src/game.rs::GameLevel::is_loaded
GlobalPalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
HashMapPalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
ImposterProtoChunk skip:other wrapper so the vanilla status pipeline can read a loaded chunk; streaming keeps its own protos
LinearPalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
PalettedContainerFactory skip:java factory for palette storage; Horizon's chunk.rs keeps block ids in plain arrays
SingleValuePalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
UpgradeData missing unsure: minor: block upgrades of old chunks on load are not ported
ChunkDependencies.getRadiusOf inline crates/horizon-client/src/streaming.rs::Ranges::margins fixed margins instead of a per-status radius
ChunkPyramid.Builder skip:java builder for the status pyramid; Horizon uses fixed margins
ChunkStatusTasks.buildTerrain inline crates/horizon-world/src/worldgen/generator.rs::Pipeline::generate_with_context terrain pass
ChunkStatusTasks.collectPossibleBiomes inline crates/horizon-world/src/worldgen/generator.rs::Pipeline::biome_chunk biome set folded into the biome pass
ChunkStatusTasks.full skip:other turns the proto into the finished chunk; the generator returns the finished chunk
ChunkStatusTasks.generateBiomes port crates/horizon-world/src/worldgen/generator.rs::Pipeline::biome_chunk
ChunkStatusTasks.generateFeatures port crates/horizon-world/src/worldgen/generator_decoration.rs::Decoration::decorate
ChunkStatusTasks.generateSpawn port crates/horizon-world/src/worldgen/spawn_finder.rs::find_spawn_position
ChunkStatusTasks.generateStructureReferences port crates/horizon-world/src/worldgen/generator_structures.rs::StructureState::references
ChunkStatusTasks.generateStructureStarts port crates/horizon-world/src/worldgen/generator_structures.rs::StructureState::starts_at
ChunkStatusTasks.initializeLight port crates/horizon-client/src/light.rs::light_chunk
ChunkStatusTasks.isLighted skip:other status check; streaming tracks which chunks are lit
ChunkStep.apply inline crates/horizon-client/src/streaming.rs::Streaming::update stage advance
ChunkStep.completeChunkGeneration inline crates/horizon-client/src/streaming.rs::Streaming::update final stage hand-over
ChunkStep.getAccumulatedRadiusOf inline crates/horizon-client/src/streaming.rs::Ranges::margins fixed margins
ChunkStep.Builder skip:java builder for chunk steps
ChunkIOErrorReporter.createMisplacedChunkReport skip:other report text for a chunk saved at another position; Horizon logs its own load error
RecreatingSimpleRegionStorage skip:java close: Rust closes the file on drop
RegionFileStorage.cache port crates/horizon-client/src/save.rs::cached_region
RegionFileStorage.close skip:java files close on drop
RegionFileStorage.flush port crates/horizon-world/src/region.rs::RegionFile::sync
RegionFileStorage.getRegionFile port crates/horizon-client/src/save.rs::cached_region
RegionFileStorage.read port crates/horizon-world/src/region.rs::RegionFile::read
RegionFileStorage.scanChunk port crates/horizon-client/src/save.rs::read_region_record
RegionFileStorage.write port crates/horizon-world/src/region.rs::RegionFile::write
1 RodBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror rod facing mirrored through the state table
2 RodBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rod facing turned through the state table
3 RootedDirtBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid needs air below
4 RotatedPillarBlock.rotatePillar port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate axis swap is in the rotate table
5 SandBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick desert sand ambient sound
6 SeagrassBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
7 SeagrassBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
8 SeagrassBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
9 SeagrassBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
10 SegmentableBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced leaf litter and flower bed segments
11 SegmentableBlock.getShapeCalculator port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
12 SegmentableBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
13 ShelfMushroomBlock.bounceOn port crates/horizon-world/src/block_landing.rs::BlockLandingRegistry::fall_on shelf bounce flag of the landing rule
14 ShelfMushroomBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
15 ShelfMushroomBlock.createBlockStateDefinition skip:data states come from the generated block state table
16 ShelfMushroomBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
17 ShelfMushroomBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
18 ShelfMushroomBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
19 ShelfMushroomBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
20 ShelfMushroomBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
21 SimpleWaterloggedBlock.pickupBlock port crates/horizon-world/src/level/fluids.rs::Sim::pickup_block
22 SimpleWaterloggedBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid
23 SkullBlock.createBlockStateDefinition skip:data states come from the generated block state table
24 SkullBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
25 SkullBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
26 SkullBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
27 SkullBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
28 SlabBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced
29 SlabBlock.canPlaceLiquid port crates/horizon-world/src/level/fluids.rs::Sim::can_place_liquid
30 SlabBlock.createBlockStateDefinition skip:data states come from the generated block state table
31 SlabBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
32 SlabBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
33 SlabBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
34 SlabBlock.isPathfindable skip:data per-state path type is exported state data (StateData.path)
35 SlabBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
36 SlimeBlock.fallOn port crates/horizon-world/src/block_landing.rs::BlockLandingRegistry::fall_on slime landing rule
37 SmallDripleafBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
38 SmallDripleafBlock.createBlockStateDefinition skip:data states come from the generated block state table
39 SmallDripleafBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
40 SmallDripleafBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
41 SmallDripleafBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
42 SmallDripleafBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
43 SmallDripleafBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
44 SmallDripleafBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by
45 SmallDripleafBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
46 SmithingTableBlock.getMenuProvider inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item station menu is opened by the use arm
47 SmithingTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
48 SmokerBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick lit smoker smoke
49 SmokerBlock.openContainer inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item furnace-family arm, which the smoker shares
50 SnowyBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
51 SnowyBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
52 SoulFireBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
53 SporeBlossomBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick
54 SporeBlossomBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
55 SporeBlossomBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
56 SpreadingSnowyBlock.canPropagate inline crates/horizon-world/src/level/tick.rs::Sim::spreading_snowy_tick spread test folded into the tick
57 SpreadingSnowyBlock.canStayAlive inline crates/horizon-world/src/level/tick.rs::Sim::spreading_snowy_tick survival test folded into the tick
58 SpreadingSnowyBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::spreading_snowy_tick
59 StandingSignBlock.createBlockStateDefinition skip:data states come from the generated block state table
60 StandingSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
61 StandingSignBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror
62 StandingSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
63 StandingSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
64 StemBlock.getCloneItemStack missing unsure: minor: middle-click on a stem may not return its seed item; no stem case found in the pick code
65 StemBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid
66 StemBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal
67 StemBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::stem_random_tick
68 StonecutterBlock.getMenuProvider inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item station menu opened by the use arm
69 StonecutterBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
70 StonecutterBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
71 SugarCaneBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block growth arm of the random tick
72 SugarCaneBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block
73 SugarCaneBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
74 SuspiciousEffectHolder.tryGet skip:data the effect comes from the item's stew effects data (item_data.rs)
75 TallSeagrassBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
76 TallSeagrassBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
77 TallSeagrassBlock.mayPlaceOn port crates/horizon-world/src/level/survive.rs::Sim::may_place_on
78 TestBlock missing minor: game-test block for operators; Horizon keeps only its NBT
79 TestInstanceBlock missing minor: game-test instance block; Horizon keeps only its NBT
80 TintedParticleLeavesBlock.spawnFallingLeavesParticle port crates/horizon-client/src/animate_tick.rs::block_animate_tick falling tinted leaf particle
81 TorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick torch flame
82 TorchflowerCropBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block growth arm
83 TrapDoorBlock.createBlockStateDefinition skip:data states come from the generated block state table
84 TrapDoorBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
85 TrapDoorBlock.getShape port crates/horizon-world/src/interaction_shapes.rs::InteractionShapes::shape shape per state from the table
86 TrapDoorBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
87 TrapDoorBlock.isPathfindable skip:data per-state path type is exported state data (StateData.path)
88 TrapDoorBlock.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed redstone update arm for trapdoors
89 TrapDoorBlock.onExplosionHit missing player: a wind burst or explosion that could open a trapdoor leaves it shut; the explosion code has no trapdoor case
90 TrapDoorBlock.playSound port crates/horizon-world/src/level/redstone.rs::Sim::trapdoor_sound
91 TrapDoorBlock.toggle inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item the trapdoor arm cycles the open state
92 TrapDoorBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
93 TrapDoorBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item
94 TrappedChestBlock.getDirectSignal port crates/horizon-world/src/level/redstone.rs::Sim::state_direct_signal
95 WallBannerBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
96 WallBannerBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
97 WallBannerBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
98 WallBannerBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
99 WallHangingSignBlock.canAttachTo inline crates/horizon-world/src/level/place.rs::Sim::wall_hanging_sign_can_place attach test folded into the placement check
100 WallHangingSignBlock.canPlace port crates/horizon-world/src/level/place.rs::Sim::wall_hanging_sign_can_place
101 WallHangingSignBlock.createBlockStateDefinition skip:data states come from the generated block state table
102 WallHangingSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
103 WallHangingSignBlock.isHittingEditableSide missing unsure: player: a hanging sign clicked on its side may not chain onto a wall hanging sign
104 WallHangingSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
105 WallHangingSignBlock.shouldTryToChainAnotherHangingSign missing unsure: player: a second hanging sign used on a wall sign may not chain on
106 WallHangingSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
107 WallHangingSignBlock.useItemOn port crates/horizon-world/src/level/interact.rs::Behaviours::use_item_on gap: player: chaining a hanging sign onto a wall hanging sign is not ported here
108 WallSignBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
109 WallSignBlock.createBlockStateDefinition skip:data states come from the generated block state table
110 WallSignBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
111 WallSignBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
112 WallSignBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
113 WallSkullBlock.createBlockStateDefinition skip:data states come from the generated block state table
114 WallSkullBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
115 WallSkullBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
116 WallTorchBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick wall torch flame
117 WallTorchBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class
118 WallTorchBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
119 WallTorchBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate
120 WallTorchBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
121 WaterloggedTransparentBlock.getFluidState port crates/horizon-world/src/fluid.rs::FluidStateTable::get
122 WaterloggedTransparentBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class
123 WaterloggedTransparentBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class
124 WeatheringCopperChestBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block oxidation through the weathering interface branch
125 WeatheringCopperCollection skip:data block family registry; oxidation links come from the block data
126 WeatheringCopperCollection.ByState skip:data helper over the oxidation stages of the block family registry
127 WeatheringCopperDoorBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block oxidation through the weathering interface branch
128 WeightedPressurePlateBlock.getSignalStrength port crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_strength
129 WetSpongeBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick wet sponge drip
130 WetSpongeBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place wet sponge drying arm
131 BannerPatternLayers.removeLast inline crates/horizon-client/src/cauldron.rs::interact banner wash pops the last pattern in its arm
132 BannerPatternLayers.Builder skip:java builder for banner pattern layers
133 BannerPatterns skip:data registry bootstrap
134 BarrelBlockEntity.loadAdditional port crates/horizon-client-core/src/block_entity_nbt.rs::canonical gap: minor: canonical NBT form only, no load step of its own
135 BarrelBlockEntity.recheckOpen missing unsure: player: a barrel lid may stay open after a player walks away; only golem openers are rechecked on a timer
136 BarrelBlockEntity.saveAdditional port crates/horizon-client-core/src/block_entity_nbt.rs::canonical gap: minor: canonical NBT form only
137 BarrelBlockEntity.startOpen port crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed
138 BarrelBlockEntity.stopOpen port crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed
139 BarrelBlockEntity.updateBlockState inline crates/horizon-client/src/game/block_entity_anims.rs::Game::barrel_openers_changed sets the open property when the count crosses zero
140 BlockEntityTicker skip:java ticker combinator; Horizon ticks each block entity directly
141 BlockEntityType.getBlockEntity skip:java factory that makes the block entity object for a state
142 BlockEntityTypes skip:data registry
143 BoundingBoxRenderable.RenderableBox skip:debug test box outline renderer
144 CopperGolemStatueBlockEntity.createStatue port crates/horizon-client/src/game/copper_golems.rs::Game::golem_turn_to_statue gap: minor: the golem's custom name is not copied onto the statue
145 CopperGolemStatueBlockEntity.getItem port crates/horizon-client/src/game/block_items.rs::Game::picked_stack statue pose on the picked item
146 CopperGolemStatueBlockEntity.initCopperGolem port crates/horizon-client/src/game/copper_golems.rs::Game::use_golem_statue axe on an unaffected statue brings the golem back
147 DecoratedPotPatterns skip:data bootstrap and asset registration
148 EnchantingTableBlockEntity.bookAnimationTick port crates/horizon-client/src/block_entity_anim.rs::EnchantingBook::tick
149 ListBackedContainer skip:java slot helpers over a plain list
150 PotDecorations.addSideDetailsToTooltip port crates/horizon-client/src/item_tooltip.rs::TooltipDisplay::detail_lines sherd lines of the decorated pot tooltip
151 PotDecorations.allBrick skip:data constant brick decoration set
152 PotentSulfurBlockEntity.applyNauseaEffect missing player: standing in potent sulfur gas gives no nausea, since the geyser never erupts
153 PotentSulfurBlockEntity.canBeReachedByNoxiousGas missing player: gas from a potent sulfur geyser never reaches players
154 PotentSulfurBlockEntity.findNoxiousGasSourceBlock missing minor: helper of the geyser gas, not ported
155 PotentSulfurBlockEntity.getNearbyLivingEntities missing minor: helper of the geyser gas, not ported
156 PotentSulfurBlockEntity.getUnobstructedBlockCount missing minor: helper of the geyser gas, not ported
157 PotentSulfurBlockEntity.geyserPositional missing player: no potent sulfur geyser eruption, so no geyser plume or sound
158 PotentSulfurBlockEntity.haveLineOfSight missing minor: helper of the geyser gas, not ported
159 PotentSulfurBlockEntity.isGeyserPassableBlock missing minor: helper of the geyser, not ported
160 PotentSulfurBlockEntity.loadAdditional missing minor: the eruption timer is not loaded; Horizon keeps only the countdown in NBT
161 PotentSulfurBlockEntity.setLevel missing minor: the eruption timer is not started on load
162 PotentSulfurBlockEntity.spawnGeyserParticle missing player: no geyser particles over a potent sulfur block
163 PotentSulfurBlockEntity.spawnNoxiousGasCloudParticle missing player: no noxious gas cloud particles over a potent sulfur block
164 RandomizableContainerBlockEntity.applyImplicitComponents missing minor: a chest item does not hand its loot table back to the block
165 RandomizableContainerBlockEntity.canOpen missing unsure: minor: the spectator and loot-table open checks were not found
166 RandomizableContainerBlockEntity.collectImplicitComponents missing minor: a container does not save its loot table onto the item it drops
167 RandomizableContainerBlockEntity.createMenu port crates/horizon-client/src/game.rs::Game::open_menu gap: minor: the spectator and loot-table checks are not ported here
168 SculkSensorBlockEntity.loadAdditional port crates/horizon-client/src/sculk.rs::SculkEntity::load
169 SculkSensorBlockEntity.saveAdditional port crates/horizon-client/src/sculk.rs::SculkEntity::to_nbt
170 SculkSensorBlockEntity.VibrationUser.canReceiveVibration port crates/horizon-client/src/sculk.rs::valid_vibration
171 SculkSensorBlockEntity.VibrationUser.onReceiveVibration port crates/horizon-client/src/sculk.rs::Data::schedule
172 TestBlockEntity missing minor: game-test block entity; reset, trigger and logging are not ported, NBT only
173 TestInstanceBlockEntity missing minor: game-test structure tooling; export and chunk forcing are not ported
174 TrialSpawnerConfig.calculateTargetSimultaneousMobs port crates/horizon-client/src/mobs/trial_spawner.rs::TrialConfig::target_simultaneous_mobs
175 TrialSpawnerConfig.calculateTargetTotalMobs port crates/horizon-client/src/mobs/trial_spawner.rs::TrialConfig::target_total_mobs
176 TrialSpawnerConfig.withSpawning skip:java builder-style setter on the config record
177 TrialSpawnerConfig.Builder skip:java builder for the trial config
178 TrialSpawnerConfigs skip:data registry bootstrap and equipment spawn data
179 SolidDebugger skip:debug debug dump of a block state
180 StateDefinition skip:java codecs and state builders; states come from the generated block state table
181 StateDefinition.Builder skip:java state builder
182 StateDefinition.StateCollection skip:data neighbour tables of the state graph are generated data
183 BlockInWorld skip:java accessor over the level's state and block entity
184 BlockPattern.matches port crates/horizon-client/src/game/golems.rs::Game::find_golem golem head and body patterns only, not a generic pattern matcher
185 BlockPattern.translateAndRotate inline crates/horizon-client/src/game/golems.rs::Game::find_golem pattern placement folded into golem search
186 BlockPattern.BlockPatternMatch skip:java match result accessor
187 BlockPatternBuilder skip:java builder for block patterns
188 BlockStatePredicate skip:java predicate builder
189 BooleanProperty skip:java property accessor
190 ChestType skip:java enum helper
191 EnumProperty skip:java property factory and hashing
192 IntegerProperty skip:java property accessor
193 BlockMatcher skip:java block scan helpers; Horizon scans with direct loops
194 BoxBlockMatcher skip:java block scan helpers; Horizon scans with direct loops
195 FilteredSectionCache skip:java section cache for block scans
196 OrderedBlockMatcher skip:java block scan helpers; Horizon scans with direct loops
197 BulkSectionAccess skip:java section cache for bulk writes
198 ChunkGenerators skip:data bootstrap
199 ChunkSource.hasChunk port crates/horizon-client/src/game.rs::GameLevel::is_loaded
200 GlobalPalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
201 HashMapPalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
202 ImposterProtoChunk skip:other wrapper so the vanilla status pipeline can read a loaded chunk; streaming keeps its own protos
203 LinearPalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
204 PalettedContainerFactory skip:java factory for palette storage; Horizon's chunk.rs keeps block ids in plain arrays
205 SingleValuePalette skip:java palette storage; Horizon's chunk.rs keeps block ids in plain arrays
206 UpgradeData missing unsure: minor: block upgrades of old chunks on load are not ported
207 ChunkDependencies.getRadiusOf inline crates/horizon-client/src/streaming.rs::Ranges::margins fixed margins instead of a per-status radius
208 ChunkPyramid.Builder skip:java builder for the status pyramid; Horizon uses fixed margins
209 ChunkStatusTasks.buildTerrain inline crates/horizon-world/src/worldgen/generator.rs::Pipeline::generate_with_context terrain pass
210 ChunkStatusTasks.collectPossibleBiomes inline crates/horizon-world/src/worldgen/generator.rs::Pipeline::biome_chunk biome set folded into the biome pass
211 ChunkStatusTasks.full skip:other turns the proto into the finished chunk; the generator returns the finished chunk
212 ChunkStatusTasks.generateBiomes port crates/horizon-world/src/worldgen/generator.rs::Pipeline::biome_chunk
213 ChunkStatusTasks.generateFeatures port crates/horizon-world/src/worldgen/generator_decoration.rs::Decoration::decorate
214 ChunkStatusTasks.generateSpawn port crates/horizon-world/src/worldgen/spawn_finder.rs::find_spawn_position
215 ChunkStatusTasks.generateStructureReferences port crates/horizon-world/src/worldgen/generator_structures.rs::StructureState::references
216 ChunkStatusTasks.generateStructureStarts port crates/horizon-world/src/worldgen/generator_structures.rs::StructureState::starts_at
217 ChunkStatusTasks.initializeLight port crates/horizon-client/src/light.rs::light_chunk
218 ChunkStatusTasks.isLighted skip:other status check; streaming tracks which chunks are lit
219 ChunkStep.apply inline crates/horizon-client/src/streaming.rs::Streaming::update stage advance
220 ChunkStep.completeChunkGeneration inline crates/horizon-client/src/streaming.rs::Streaming::update final stage hand-over
221 ChunkStep.getAccumulatedRadiusOf inline crates/horizon-client/src/streaming.rs::Ranges::margins fixed margins
222 ChunkStep.Builder skip:java builder for chunk steps
223 ChunkIOErrorReporter.createMisplacedChunkReport skip:other report text for a chunk saved at another position; Horizon logs its own load error
224 RecreatingSimpleRegionStorage skip:java close: Rust closes the file on drop
225 RegionFileStorage.cache port crates/horizon-client/src/save.rs::cached_region
226 RegionFileStorage.close skip:java files close on drop
227 RegionFileStorage.flush port crates/horizon-world/src/region.rs::RegionFile::sync
228 RegionFileStorage.getRegionFile port crates/horizon-client/src/save.rs::cached_region
229 RegionFileStorage.read port crates/horizon-world/src/region.rs::RegionFile::read
230 RegionFileStorage.scanChunk port crates/horizon-client/src/save.rs::read_region_record
231 RegionFileStorage.write port crates/horizon-world/src/region.rs::RegionFile::write
+227
View File
@@ -0,0 +1,227 @@
RegionFileVersion.configure missing minor: region-file-compression is read from server.properties (horizon-server-files properties.rs) but nothing applies it; chunk saves always write zlib (save.rs compress_records)
RegionFileVersion.register skip:data static version table; Horizon's codecs are the Compression enum (compression.rs)
RegionFileVersion.wrap port crates/horizon-world/src/compression.rs::Compression::encode whole-buffer codec; output side (input side is Compression::decode)
RegionStorageInfo.withTypeSuffix port crates/horizon-client/src/save.rs::Folder::name folder name per region kind; only the fixed region, entities and poi folders exist, none is suffixed
EntityLookup.add skip:java index insert; Horizon keeps entities in per-kind Vecs (game.rs) and a uuid map (game/persist.rs)
EntityLookup.getEntities port crates/horizon-client/src/mobs/seen_grid.rs::SeenGrid::candidates gap: minor: returns mob candidates only (only mobs are indexed); callers test the boxes exactly
EntityLookup.getEntity skip:java lookup by id or uuid over Horizon's per-kind lists and the uuid map
EntityLookup.remove skip:java index removal; Horizon removes the entity from its per-kind list
EntitySection skip:java section container; Horizon has no section index, only the mob grid (mobs/seen_grid.rs)
EntitySectionStorage skip:java spatial section index; Horizon has no section storage, the mob grid is its only spatial index
EntityTickList skip:java ticking list; Horizon ticks its per-kind Vecs in order (game.rs)
LevelEntityGetterAdapter skip:java adapter over the section storage; no equivalent needed
PersistentEntitySectionManager.addEntity skip:java section and visibility bookkeeping; Horizon spawns entities into its per-kind Vecs (game.rs)
PersistentEntitySectionManager.addEntityUuid skip:java uuid set kept in persist.uuids (game/persist.rs)
PersistentEntitySectionManager.addLegacyChunkEntities port crates/horizon-client/src/game/persist.rs::Game::spawn_loaded_entities saved chunk entity tags are spawned here once the chunk's entities arrive
PersistentEntitySectionManager.addWorldGenChunkEntities port crates/horizon-client/src/game/persist.rs::Game::spawn_loaded_entities worldgen entities arrive as saved tags and are spawned the same way
PersistentEntitySectionManager.canPositionTick port crates/horizon-client/src/ticket_levels.rs::Levels::entity_ticking_at a position ticks entities when its chunk is entity ticking
PersistentEntitySectionManager.dumpSections skip:debug section dump for debugging
PersistentEntitySectionManager.ensureChunkQueuedForLoad skip:other async load queue; Horizon's streaming hands the saved entity tags over with the chunk
PersistentEntitySectionManager.gatherStats skip:debug statistics string
PersistentEntitySectionManager.getAllChunksToSave inline crates/horizon-client/src/game/persist.rs::Game::save_entities the resident chunk keys that save_entities writes
PersistentEntitySectionManager.processChunkUnload port crates/horizon-client/src/game/persist.rs::Game::unload_entities saves and removes the entities of an unloaded chunk
PersistentEntitySectionManager.processUnloads inline crates/horizon-client/src/game/persist.rs::Game::unload_entities the batch of unloaded chunks handed over by the tick
PersistentEntitySectionManager.requestChunkLoad port crates/horizon-client/src/save.rs::SaveDir::load_entities reads the saved entity record of the chunk; the chunk load itself is streaming
PersistentEntitySectionManager.saveAll port crates/horizon-client/src/game/persist.rs::Game::save_entities the waiting form (quit path) writes every resident chunk and flushes
PersistentEntitySectionManager.storeChunkSections port crates/horizon-client/src/game/persist.rs::Game::entity_chunks the saved entity tags of a chunk; with remove the entities leave the world
PersistentEntitySectionManager.updateChunkStatus skip:other visibility per chunk status; Horizon derives entity ticking from ticket levels (ticket_levels.rs) instead of storing it
PersistentEntitySectionManager.Callback.onMove skip:java section membership change; Horizon has no sections
PersistentEntitySectionManager.Callback.onRemove port crates/horizon-client/src/game/persist.rs::Game::prune_entity_memory gap: minor: removal is batched; dead ids are dropped from persist memory on save, not per removal
PersistentEntitySectionManager.Callback.updateStatus skip:other visibility changes are chunk ticket levels in Horizon (ticket_levels.rs)
TransientEntitySectionManager skip:java sections for entities that are not saved; Horizon keeps them in its per-kind lists (game.rs)
TransientEntitySectionManager.Callback skip:java section callbacks of the transient manager; no sections in Horizon
DynamicGameEventListener.ifChunkExists port crates/horizon-client/src/game/sculk.rs::Game::sculk_listen a sensor in an unloaded chunk has no entity, so the listener is dropped
DynamicGameEventListener.move skip:other listeners are fixed block positions in Horizon; sculk blocks do not move
DynamicGameEventListener.remove port crates/horizon-client/src/game/sculk.rs::Game::sculk_sync_index drops the listener's index entry when its block is gone
EntityPositionSource.getId skip:java accessor; Horizon's listeners hold the source as a Who (sculk.rs Info)
EntityPositionSource.getPosition port crates/horizon-client/src/mobs/warden.rs::listen gap: minor: covers the warden's eye-height listener only; no other position source is used
EntityPositionSource.getUuid skip:java accessor; Horizon holds the source as a Who
EntityPositionSource.resolveEntity skip:other the source is a Who held by the listener, so there is no entity lookup to port
EuclideanGameEventListenerRegistry.getPostableListenerPosition inline crates/horizon-client/src/game/sculk.rs::Game::post_game_event the in-range distance test that picks the listeners
EuclideanGameEventListenerRegistry.register port crates/horizon-client/src/game/sculk.rs::Game::sculk_scan_chunk a sculk block found in a loaded chunk enters the index
EuclideanGameEventListenerRegistry.sendDebugInfo skip:debug debug rendering of listeners
EuclideanGameEventListenerRegistry.unregister port crates/horizon-client/src/game/sculk.rs::Game::sculk_sync_index index entries of removed sculk blocks are dropped
EuclideanGameEventListenerRegistry.visitInRangeListeners port crates/horizon-client/src/game/sculk.rs::Game::post_game_event walks the index for listeners in range, then the wardens
VibrationInfo.getEntity port crates/horizon-client/src/game/sculk.rs::Game::sculk_receive the source is held as a Who and read there
VibrationInfo.getProjectileOwner port crates/horizon-client/src/game/sculk.rs::Game::sculk_receive the projectile owner is captured when posted (info.owner) and read there
VibrationSelector.addCandidate port crates/horizon-client/src/sculk.rs::Selector::add_candidate
VibrationSelector.chosenCandidate port crates/horizon-client/src/sculk.rs::Selector::chosen_candidate
VibrationSelector.shouldReplaceVibration port crates/horizon-client/src/sculk.rs::Selector::should_replace
GameRuleCategory.register skip:data static category table; Horizon's rule categories are static strings (gamerules.rs)
GameRuleMap.equals skip:java value equality of the map
GameRuleMap.of port crates/horizon-client-core/src/gamerules.rs::GameRules::get no stored map: a rule that was never set reads its table default
GameRuleMap.setFromIf skip:other no caller in the pinned sources (only withOther uses it)
GameRuleMap.withOther skip:other no caller in the pinned sources
BlendingData missing player: in worlds upgraded from before 1.18 the old/new chunk border is not blended (datafix/fixes_c.rs drops blending_data), so a seam can show
BlendingData.Packed.validateArraySize skip:java codec size check
AllOfPredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the All arm
AnyOfPredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the Any arm
CombiningPredicate.codec skip:java codec
HasSturdyFacePredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the HasSturdyFace arm
HeightRangePredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the HeightRange arm
StateTestingPredicate.stateTestingCodec skip:java codec
VolumeMatchPredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the Volume arm
CanyonWorldCarver.carve port crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve
CanyonWorldCarver.doCarve inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve the per-tunnel walk inside carve
CanyonWorldCarver.initWidthFactors inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve the width factors are built at the start of carve
CanyonWorldCarver.shouldSkip inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve the width-factor test in the carve_ellipsoid closure
CanyonWorldCarver.updateVerticalRadius inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve center-weighted vertical factor times the random 0.75 to 1.0 scale
CaveWorldCarver.carve port crates/horizon-world/src/worldgen/carver.rs::CaveCarver::carve
CaveWorldCarver.createRoom inline crates/horizon-world/src/worldgen/carver.rs::CaveCarver::carve the room branch of carve, which calls CaveRun::ellipsoid
CaveWorldCarver.createTunnel port crates/horizon-world/src/worldgen/carver.rs::CaveRun::tunnel
CaveWorldCarver.getThickness inline crates/horizon-world/src/worldgen/carver.rs::CaveCarver::carve thickness sample and the weird thickness bias
CaveWorldCarver.shouldSkip inline crates/horizon-world/src/worldgen/carver.rs::CaveRun::ellipsoid the floor and unit sphere test in the skip closure
WorldCarverTypes.bootstrap skip:data registry bootstrap; carvers are read from JSON (carver.rs, canyon.rs)
DensityBuffer.copyFrom skip:java buffers are plain slices; the samplers copy slices directly
DensityBufferPool skip:java buffer pool; Horizon's scratch Vecs in SamplerContext (density/mod.rs) play that role
DensityFunction.axesFrom inline crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes the axis bit (1 << axis) is set inline in the Gradient and Slice arms
DensityFunction.pow port crates/horizon-world/src/worldgen/density.rs::Loader::decode the minecraft:pow token builds a Power node
DensityFunctionCompiler.optimizeAndCompile port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::get_sampler optimize, then compile_raw, cached per function id
DensityFunctionCompiler.prepareCache port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::prepare cache arm: compile the input, bind its range and axes
DensityFunctionCompiler.reuseOrPrepareCache inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::prepare the prepared-map lookup in the cache arm
DensityFunctions.ceil port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:ceil token; multiple defaults to 1
DensityFunctions.floor port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:floor token; multiple defaults to 1
DensityFunctions.lerp port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:lerp token
DensityFunctions.mappedNoise skip:data bootstrap helper that composes noise and remap; Horizon reads the finished graph from data
DensityFunctions.noise port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:noise token
DensityFunctions.remap skip:data bootstrap composition of clamp and arithmetic; Horizon reads the finished graph from data
DensityFunctions.round port crates/horizon-world/src/worldgen/density.rs::Loader::decode floor, round, ceil and truncate share one token arm
DensityFunctions.truncate port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:truncate token in the same arm as floor, round and ceil
DensityFunctions.HolderHolder.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children the Reference arm rewrites its input only
DfRewriteRule.SliceUniformAxes.getExistingRemovedAxes inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::slice_uniform_axes the walk over existing slice nodes
DfRewriteRule.SliceUniformAxes.removeAxes inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::slice_uniform_axes the remove mask and the X, Z, Y slice insertion
DfRewriteRule.SliceUniformAxes.rewrite port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::slice_uniform_axes
ScopedDensityBuffer.close port crates/horizon-core/src/density/mod.rs::SamplerContext::with_buffer the scratch buffer goes back when the scope ends
ScopedDensityBuffer.restore skip:java reuse of a pooled buffer's size and flags; scratch Vecs are simply reused
DistanceToPointFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw DistanceToPoint arm
DistanceToPointFunction.Sampler.sampleValue port crates/horizon-core/src/density/terrain_noise.rs::DistanceToPointSampler::sample_value
DistanceToPointFunction.Sampler.sampleVolume port crates/horizon-core/src/density/mod.rs::visit the trait default sample_volume, which visits each position
EndIslandFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw EndIslands arm, islands from the seeded context
EndIslandFunction.getHeightValue port crates/horizon-core/src/density/end_islands.rs::EndIslandSampler::height
EndIslandFunction.Sampler.sampleValue port crates/horizon-core/src/density/end_islands.rs::EndIslandSampler::sample_value
EndIslandFunction.Sampler.sampleVolume port crates/horizon-core/src/density/end_islands.rs::EndIslandSampler::sample_volume
GradientFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Gradient arm builds a GradientSampler
GradientFunction.validate port crates/horizon-world/src/worldgen/density.rs::Loader::decode the gradient arm rejects invalid coordinates
GradientFunction.ClampedSampler.compute port crates/horizon-core/src/density/mod.rs::GradientSampler::compute clamped tiling
GradientFunction.MirroredRepeatSampler.compute port crates/horizon-core/src/density/mod.rs::GradientSampler::compute mirrored repeat tiling
GradientFunction.RepeatSampler.compute port crates/horizon-core/src/density/mod.rs::GradientSampler::compute repeat tiling
NoiseFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Noise arm; nonzero shifts select the shifted sampler
NoiseFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
NoiseFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
NoiseFunction.Sampler.sampleValue port crates/horizon-core/src/density/mod.rs::NoiseSampler::sample_value
NoiseFunction.Sampler.sampleVolume port crates/horizon-core/src/density/mod.rs::NoiseSampler::sample_volume
NoiseFunction.ShiftedXyzSampler.sampleValue port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_value shift_y present
NoiseFunction.ShiftedXyzSampler.sampleVolume port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_volume shift_y present
NoiseFunction.ShiftedXzSampler.sampleValue port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_value shift_y absent
NoiseFunction.ShiftedXzSampler.sampleVolume port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_volume shift_y absent
ShiftNoiseFunction.Shift.compileSampler port crates/horizon-core/src/density/terrain_noise.rs::compile_shift_noise
ShiftNoiseFunction.ShiftA.compileSampler port crates/horizon-core/src/density/terrain_noise.rs::compile_shift_noise
ShiftNoiseFunction.ShiftB.compileSampler port crates/horizon-core/src/density/terrain_noise.rs::compile_shift_noise ShiftB gets ShiftBSampler
SimpleDensityFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw WorldField arm (blend alpha and offset, end islands)
SimpleDensityFunction.domainAxes port crates/horizon-core/src/density/world_fields.rs::WorldField::domain_axes
SimpleDensityFunction.range port crates/horizon-core/src/density/world_fields.rs::WorldField::range
BinaryFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_binary constant operands become unary ops
BinaryFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Binary arm
BinaryFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
BinaryFunction.warnNonIntersecting skip:debug log-only warning when min or max ranges never meet; Horizon returns the surviving side silently in compile_binary
BinaryFunction.AddSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Add
BinaryFunction.AddSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Add
BinaryFunction.ConstAddSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Add with a constant
BinaryFunction.ConstAddSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Add with a constant
BinaryFunction.ConstDivSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::DivideInto (constant over input)
BinaryFunction.ConstDivSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::DivideInto
BinaryFunction.ConstMaxSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Maximum
BinaryFunction.ConstMaxSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Maximum
BinaryFunction.ConstMinSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Minimum
BinaryFunction.ConstMinSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Minimum
BinaryFunction.ConstMulSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Multiply (a constant divisor becomes 1/c, as in vanilla)
BinaryFunction.ConstMulSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Multiply
BinaryFunction.ConstSubSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::SubtractFrom (constant minus input)
BinaryFunction.ConstSubSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::SubtractFrom
BinaryFunction.DivSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Divide; a zero left gives zero
BinaryFunction.DivSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Divide
BinaryFunction.MaxSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Maximum with the right-max shortcut
BinaryFunction.MaxSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Maximum
BinaryFunction.MinSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Minimum with the right-min shortcut
BinaryFunction.MinSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Minimum
BinaryFunction.MulSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Multiply; a zero left gives zero
BinaryFunction.MulSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Multiply
BinaryFunction.SubSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Subtract
BinaryFunction.SubSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Subtract
BlendDensityFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
BlendDensityFunction.Sampler.sampleValue port crates/horizon-core/src/density/world_fields.rs::BlendDensitySampler::sample_value
BlendDensityFunction.Sampler.sampleVolume port crates/horizon-core/src/density/world_fields.rs::BlendDensitySampler::sample_volume
CacheFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children the cache node itself is prepared in DensityCompiler::prepare
ClampFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Clamp arm: a UnarySampler with UnaryOp::Clamp
ClampFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
ClampFunction.validate port crates/horizon-world/src/worldgen/density.rs::Loader::decode the clamp arm rejects max below min
ClampFunction.Sampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Clamp
ClampFunction.Sampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Clamp
FindTopSurfaceFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Surface arm, built by compile_surface_search
FindTopSurfaceFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Surface arm
FindTopSurfaceFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
FindTopSurfaceFunction.Sampler.findSurfaceFrom port crates/horizon-core/src/density/surface.rs::FindTopSurfaceSampler::find_surface_from
FindTopSurfaceFunction.Sampler.sampleValue port crates/horizon-core/src/density/surface.rs::FindTopSurfaceSampler::sample_value
FindTopSurfaceFunction.Sampler.sampleVolume port crates/horizon-core/src/density/surface.rs::FindTopSurfaceSampler::sample_volume
InterpolatedFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Interpolated arm
InterpolatedFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
InterpolatedFunction.Sampler.fillCell port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::fill_cell
InterpolatedFunction.Sampler.sampleValue port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_value
InterpolatedFunction.Sampler.sampleVolume port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_volume
InterpolatedFunction.Sampler.sampleWithBlockStep port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_block_volume
InterpolatedFunction.Sampler.sampleWithNonBlockStep inline crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_volume the sparse and arbitrary-step branches of sample_volume
IntervalSelectFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw IntervalSelect arm
IntervalSelectFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
IntervalSelectFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
IntervalSelectFunction.validate port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::insert the branch and threshold counts are checked when the node is inserted
IntervalSelectFunction.Sampler.sampleValue port crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::sample_value
IntervalSelectFunction.Sampler.sampleVolume port crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::sample_volume
IntervalSelectFunction.Sampler.selectSamplerIndex port crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::select
IntervalSelectFunction.SingleThresholdSampler.sampleValue inline crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::select no one-threshold class; the generic select covers it
IntervalSelectFunction.SingleThresholdSampler.sampleVolume inline crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::sample_volume no one-threshold class; the generic path covers it
densityfunction/op/LerpFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Lerp arm; constant ends become DensityValue::Constant
densityfunction/op/LerpFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
densityfunction/op/LerpFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Lerp arm
densityfunction/op/LerpFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
LerpFunction.ConstFirstSampler.sampleValue port crates/horizon-core/src/density/selection.rs::DensityValue::sample_value constant first end
LerpFunction.ConstFirstSampler.sampleVolume port crates/horizon-core/src/density/selection.rs::DensityValue::with_volume constant first end
LerpFunction.ConstSecondSampler.sampleValue port crates/horizon-core/src/density/selection.rs::DensityValue::sample_value constant second end
LerpFunction.ConstSecondSampler.sampleVolume port crates/horizon-core/src/density/selection.rs::DensityValue::with_volume constant second end
LerpFunction.Sampler.sampleValue port crates/horizon-core/src/density/selection.rs::LerpSampler::sample_value
LerpFunction.Sampler.sampleVolume port crates/horizon-core/src/density/selection.rs::LerpSampler::sample_volume
PowFunction.compileConstExponent port crates/horizon-core/src/density/power.rs::compile_constant_exponent 0.5, 1, 2, 3 and negatives get their own ops
PowFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Power arm
PowFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
PowFunction.ConstBaseSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::PowerBase
PowFunction.ConstBaseSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::PowerBase
PowFunction.ConstExponentSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::PowerExponent or the specialised ops
PowFunction.ConstExponentSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::PowerExponent or the specialised ops
PowFunction.Sampler.sampleValue port crates/horizon-core/src/density/power.rs::PowerSampler::sample_value
PowFunction.Sampler.sampleVolume port crates/horizon-core/src/density/power.rs::PowerSampler::sample_volume
RangeChoiceFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Choice arm; constant branches become UnaryOp::ConstantRangeChoice
RangeChoiceFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
RangeChoiceFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Choice arm
RangeChoiceFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
RangeChoiceFunction.ConstSampler.choose port crates/horizon-core/src/density/arithmetic.rs::UnaryOp::apply UnaryOp::ConstantRangeChoice
RangeChoiceFunction.ConstSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::ConstantRangeChoice
RangeChoiceFunction.Sampler.sampleValue port crates/horizon-core/src/density/selection.rs::RangeChoiceSampler::sample_value
RangeChoiceFunction.Sampler.sampleVolume port crates/horizon-core/src/density/selection.rs::RangeChoiceSampler::sample_volume
RoundFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Round arm; a multiple of 1 skips the multiply
RoundFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Round arm
RoundFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
RoundFunction.roundToInteger port crates/horizon-core/src/density/rounding.rs::RoundMode::apply the multiple-of-1 case
RoundFunction.IntegerMultipleSampler.sampleValue port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_value multiple absent
RoundFunction.IntegerMultipleSampler.sampleVolume port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_volume multiple absent
RoundFunction.Sampler.apply port crates/horizon-core/src/density/rounding.rs::RoundMode::apply
RoundFunction.Sampler.sampleValue port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_value
RoundFunction.Sampler.sampleVolume port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_volume
SliceFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Slice arm; an X and a Z slice fuse into one Xz sampler
SliceFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
SliceFunction.XSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::X
SliceFunction.XzSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::Xz
SliceFunction.YSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::Y
SliceFunction.ZSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::Z
SplineFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
SplineFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children spline coordinates are children too (GraphNode::children_mut)
SplineFunction.BufferSplineInput.close port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_volume coordinate buffers go back to context.scratch when sample_volume ends
SplineFunction.BufferSplineInput.sampleCoordinate port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_volume each coordinate buffer is filled on first use
1 RegionFileVersion.configure missing minor: region-file-compression is read from server.properties (horizon-server-files properties.rs) but nothing applies it; chunk saves always write zlib (save.rs compress_records)
2 RegionFileVersion.register skip:data static version table; Horizon's codecs are the Compression enum (compression.rs)
3 RegionFileVersion.wrap port crates/horizon-world/src/compression.rs::Compression::encode whole-buffer codec; output side (input side is Compression::decode)
4 RegionStorageInfo.withTypeSuffix port crates/horizon-client/src/save.rs::Folder::name folder name per region kind; only the fixed region, entities and poi folders exist, none is suffixed
5 EntityLookup.add skip:java index insert; Horizon keeps entities in per-kind Vecs (game.rs) and a uuid map (game/persist.rs)
6 EntityLookup.getEntities port crates/horizon-client/src/mobs/seen_grid.rs::SeenGrid::candidates gap: minor: returns mob candidates only (only mobs are indexed); callers test the boxes exactly
7 EntityLookup.getEntity skip:java lookup by id or uuid over Horizon's per-kind lists and the uuid map
8 EntityLookup.remove skip:java index removal; Horizon removes the entity from its per-kind list
9 EntitySection skip:java section container; Horizon has no section index, only the mob grid (mobs/seen_grid.rs)
10 EntitySectionStorage skip:java spatial section index; Horizon has no section storage, the mob grid is its only spatial index
11 EntityTickList skip:java ticking list; Horizon ticks its per-kind Vecs in order (game.rs)
12 LevelEntityGetterAdapter skip:java adapter over the section storage; no equivalent needed
13 PersistentEntitySectionManager.addEntity skip:java section and visibility bookkeeping; Horizon spawns entities into its per-kind Vecs (game.rs)
14 PersistentEntitySectionManager.addEntityUuid skip:java uuid set kept in persist.uuids (game/persist.rs)
15 PersistentEntitySectionManager.addLegacyChunkEntities port crates/horizon-client/src/game/persist.rs::Game::spawn_loaded_entities saved chunk entity tags are spawned here once the chunk's entities arrive
16 PersistentEntitySectionManager.addWorldGenChunkEntities port crates/horizon-client/src/game/persist.rs::Game::spawn_loaded_entities worldgen entities arrive as saved tags and are spawned the same way
17 PersistentEntitySectionManager.canPositionTick port crates/horizon-client/src/ticket_levels.rs::Levels::entity_ticking_at a position ticks entities when its chunk is entity ticking
18 PersistentEntitySectionManager.dumpSections skip:debug section dump for debugging
19 PersistentEntitySectionManager.ensureChunkQueuedForLoad skip:other async load queue; Horizon's streaming hands the saved entity tags over with the chunk
20 PersistentEntitySectionManager.gatherStats skip:debug statistics string
21 PersistentEntitySectionManager.getAllChunksToSave inline crates/horizon-client/src/game/persist.rs::Game::save_entities the resident chunk keys that save_entities writes
22 PersistentEntitySectionManager.processChunkUnload port crates/horizon-client/src/game/persist.rs::Game::unload_entities saves and removes the entities of an unloaded chunk
23 PersistentEntitySectionManager.processUnloads inline crates/horizon-client/src/game/persist.rs::Game::unload_entities the batch of unloaded chunks handed over by the tick
24 PersistentEntitySectionManager.requestChunkLoad port crates/horizon-client/src/save.rs::SaveDir::load_entities reads the saved entity record of the chunk; the chunk load itself is streaming
25 PersistentEntitySectionManager.saveAll port crates/horizon-client/src/game/persist.rs::Game::save_entities the waiting form (quit path) writes every resident chunk and flushes
26 PersistentEntitySectionManager.storeChunkSections port crates/horizon-client/src/game/persist.rs::Game::entity_chunks the saved entity tags of a chunk; with remove the entities leave the world
27 PersistentEntitySectionManager.updateChunkStatus skip:other visibility per chunk status; Horizon derives entity ticking from ticket levels (ticket_levels.rs) instead of storing it
28 PersistentEntitySectionManager.Callback.onMove skip:java section membership change; Horizon has no sections
29 PersistentEntitySectionManager.Callback.onRemove port crates/horizon-client/src/game/persist.rs::Game::prune_entity_memory gap: minor: removal is batched; dead ids are dropped from persist memory on save, not per removal
30 PersistentEntitySectionManager.Callback.updateStatus skip:other visibility changes are chunk ticket levels in Horizon (ticket_levels.rs)
31 TransientEntitySectionManager skip:java sections for entities that are not saved; Horizon keeps them in its per-kind lists (game.rs)
32 TransientEntitySectionManager.Callback skip:java section callbacks of the transient manager; no sections in Horizon
33 DynamicGameEventListener.ifChunkExists port crates/horizon-client/src/game/sculk.rs::Game::sculk_listen a sensor in an unloaded chunk has no entity, so the listener is dropped
34 DynamicGameEventListener.move skip:other listeners are fixed block positions in Horizon; sculk blocks do not move
35 DynamicGameEventListener.remove port crates/horizon-client/src/game/sculk.rs::Game::sculk_sync_index drops the listener's index entry when its block is gone
36 EntityPositionSource.getId skip:java accessor; Horizon's listeners hold the source as a Who (sculk.rs Info)
37 EntityPositionSource.getPosition port crates/horizon-client/src/mobs/warden.rs::listen gap: minor: covers the warden's eye-height listener only; no other position source is used
38 EntityPositionSource.getUuid skip:java accessor; Horizon holds the source as a Who
39 EntityPositionSource.resolveEntity skip:other the source is a Who held by the listener, so there is no entity lookup to port
40 EuclideanGameEventListenerRegistry.getPostableListenerPosition inline crates/horizon-client/src/game/sculk.rs::Game::post_game_event the in-range distance test that picks the listeners
41 EuclideanGameEventListenerRegistry.register port crates/horizon-client/src/game/sculk.rs::Game::sculk_scan_chunk a sculk block found in a loaded chunk enters the index
42 EuclideanGameEventListenerRegistry.sendDebugInfo skip:debug debug rendering of listeners
43 EuclideanGameEventListenerRegistry.unregister port crates/horizon-client/src/game/sculk.rs::Game::sculk_sync_index index entries of removed sculk blocks are dropped
44 EuclideanGameEventListenerRegistry.visitInRangeListeners port crates/horizon-client/src/game/sculk.rs::Game::post_game_event walks the index for listeners in range, then the wardens
45 VibrationInfo.getEntity port crates/horizon-client/src/game/sculk.rs::Game::sculk_receive the source is held as a Who and read there
46 VibrationInfo.getProjectileOwner port crates/horizon-client/src/game/sculk.rs::Game::sculk_receive the projectile owner is captured when posted (info.owner) and read there
47 VibrationSelector.addCandidate port crates/horizon-client/src/sculk.rs::Selector::add_candidate
48 VibrationSelector.chosenCandidate port crates/horizon-client/src/sculk.rs::Selector::chosen_candidate
49 VibrationSelector.shouldReplaceVibration port crates/horizon-client/src/sculk.rs::Selector::should_replace
50 GameRuleCategory.register skip:data static category table; Horizon's rule categories are static strings (gamerules.rs)
51 GameRuleMap.equals skip:java value equality of the map
52 GameRuleMap.of port crates/horizon-client-core/src/gamerules.rs::GameRules::get no stored map: a rule that was never set reads its table default
53 GameRuleMap.setFromIf skip:other no caller in the pinned sources (only withOther uses it)
54 GameRuleMap.withOther skip:other no caller in the pinned sources
55 BlendingData missing player: in worlds upgraded from before 1.18 the old/new chunk border is not blended (datafix/fixes_c.rs drops blending_data), so a seam can show
56 BlendingData.Packed.validateArraySize skip:java codec size check
57 AllOfPredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the All arm
58 AnyOfPredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the Any arm
59 CombiningPredicate.codec skip:java codec
60 HasSturdyFacePredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the HasSturdyFace arm
61 HeightRangePredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the HeightRange arm
62 StateTestingPredicate.stateTestingCodec skip:java codec
63 VolumeMatchPredicate.test port crates/horizon-world/src/worldgen/block_predicate.rs::BlockPredicate::test_inner the Volume arm
64 CanyonWorldCarver.carve port crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve
65 CanyonWorldCarver.doCarve inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve the per-tunnel walk inside carve
66 CanyonWorldCarver.initWidthFactors inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve the width factors are built at the start of carve
67 CanyonWorldCarver.shouldSkip inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve the width-factor test in the carve_ellipsoid closure
68 CanyonWorldCarver.updateVerticalRadius inline crates/horizon-world/src/worldgen/carver/canyon.rs::CanyonCarver::carve center-weighted vertical factor times the random 0.75 to 1.0 scale
69 CaveWorldCarver.carve port crates/horizon-world/src/worldgen/carver.rs::CaveCarver::carve
70 CaveWorldCarver.createRoom inline crates/horizon-world/src/worldgen/carver.rs::CaveCarver::carve the room branch of carve, which calls CaveRun::ellipsoid
71 CaveWorldCarver.createTunnel port crates/horizon-world/src/worldgen/carver.rs::CaveRun::tunnel
72 CaveWorldCarver.getThickness inline crates/horizon-world/src/worldgen/carver.rs::CaveCarver::carve thickness sample and the weird thickness bias
73 CaveWorldCarver.shouldSkip inline crates/horizon-world/src/worldgen/carver.rs::CaveRun::ellipsoid the floor and unit sphere test in the skip closure
74 WorldCarverTypes.bootstrap skip:data registry bootstrap; carvers are read from JSON (carver.rs, canyon.rs)
75 DensityBuffer.copyFrom skip:java buffers are plain slices; the samplers copy slices directly
76 DensityBufferPool skip:java buffer pool; Horizon's scratch Vecs in SamplerContext (density/mod.rs) play that role
77 DensityFunction.axesFrom inline crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes the axis bit (1 << axis) is set inline in the Gradient and Slice arms
78 DensityFunction.pow port crates/horizon-world/src/worldgen/density.rs::Loader::decode the minecraft:pow token builds a Power node
79 DensityFunctionCompiler.optimizeAndCompile port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::get_sampler optimize, then compile_raw, cached per function id
80 DensityFunctionCompiler.prepareCache port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::prepare cache arm: compile the input, bind its range and axes
81 DensityFunctionCompiler.reuseOrPrepareCache inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::prepare the prepared-map lookup in the cache arm
82 DensityFunctions.ceil port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:ceil token; multiple defaults to 1
83 DensityFunctions.floor port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:floor token; multiple defaults to 1
84 DensityFunctions.lerp port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:lerp token
85 DensityFunctions.mappedNoise skip:data bootstrap helper that composes noise and remap; Horizon reads the finished graph from data
86 DensityFunctions.noise port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:noise token
87 DensityFunctions.remap skip:data bootstrap composition of clamp and arithmetic; Horizon reads the finished graph from data
88 DensityFunctions.round port crates/horizon-world/src/worldgen/density.rs::Loader::decode floor, round, ceil and truncate share one token arm
89 DensityFunctions.truncate port crates/horizon-world/src/worldgen/density.rs::Loader::decode minecraft:truncate token in the same arm as floor, round and ceil
90 DensityFunctions.HolderHolder.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children the Reference arm rewrites its input only
91 DfRewriteRule.SliceUniformAxes.getExistingRemovedAxes inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::slice_uniform_axes the walk over existing slice nodes
92 DfRewriteRule.SliceUniformAxes.removeAxes inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::slice_uniform_axes the remove mask and the X, Z, Y slice insertion
93 DfRewriteRule.SliceUniformAxes.rewrite port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::slice_uniform_axes
94 ScopedDensityBuffer.close port crates/horizon-core/src/density/mod.rs::SamplerContext::with_buffer the scratch buffer goes back when the scope ends
95 ScopedDensityBuffer.restore skip:java reuse of a pooled buffer's size and flags; scratch Vecs are simply reused
96 DistanceToPointFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw DistanceToPoint arm
97 DistanceToPointFunction.Sampler.sampleValue port crates/horizon-core/src/density/terrain_noise.rs::DistanceToPointSampler::sample_value
98 DistanceToPointFunction.Sampler.sampleVolume port crates/horizon-core/src/density/mod.rs::visit the trait default sample_volume, which visits each position
99 EndIslandFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw EndIslands arm, islands from the seeded context
100 EndIslandFunction.getHeightValue port crates/horizon-core/src/density/end_islands.rs::EndIslandSampler::height
101 EndIslandFunction.Sampler.sampleValue port crates/horizon-core/src/density/end_islands.rs::EndIslandSampler::sample_value
102 EndIslandFunction.Sampler.sampleVolume port crates/horizon-core/src/density/end_islands.rs::EndIslandSampler::sample_volume
103 GradientFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Gradient arm builds a GradientSampler
104 GradientFunction.validate port crates/horizon-world/src/worldgen/density.rs::Loader::decode the gradient arm rejects invalid coordinates
105 GradientFunction.ClampedSampler.compute port crates/horizon-core/src/density/mod.rs::GradientSampler::compute clamped tiling
106 GradientFunction.MirroredRepeatSampler.compute port crates/horizon-core/src/density/mod.rs::GradientSampler::compute mirrored repeat tiling
107 GradientFunction.RepeatSampler.compute port crates/horizon-core/src/density/mod.rs::GradientSampler::compute repeat tiling
108 NoiseFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Noise arm; nonzero shifts select the shifted sampler
109 NoiseFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
110 NoiseFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
111 NoiseFunction.Sampler.sampleValue port crates/horizon-core/src/density/mod.rs::NoiseSampler::sample_value
112 NoiseFunction.Sampler.sampleVolume port crates/horizon-core/src/density/mod.rs::NoiseSampler::sample_volume
113 NoiseFunction.ShiftedXyzSampler.sampleValue port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_value shift_y present
114 NoiseFunction.ShiftedXyzSampler.sampleVolume port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_volume shift_y present
115 NoiseFunction.ShiftedXzSampler.sampleValue port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_value shift_y absent
116 NoiseFunction.ShiftedXzSampler.sampleVolume port crates/horizon-core/src/density/mod.rs::ShiftedNoiseSampler::sample_volume shift_y absent
117 ShiftNoiseFunction.Shift.compileSampler port crates/horizon-core/src/density/terrain_noise.rs::compile_shift_noise
118 ShiftNoiseFunction.ShiftA.compileSampler port crates/horizon-core/src/density/terrain_noise.rs::compile_shift_noise
119 ShiftNoiseFunction.ShiftB.compileSampler port crates/horizon-core/src/density/terrain_noise.rs::compile_shift_noise ShiftB gets ShiftBSampler
120 SimpleDensityFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw WorldField arm (blend alpha and offset, end islands)
121 SimpleDensityFunction.domainAxes port crates/horizon-core/src/density/world_fields.rs::WorldField::domain_axes
122 SimpleDensityFunction.range port crates/horizon-core/src/density/world_fields.rs::WorldField::range
123 BinaryFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_binary constant operands become unary ops
124 BinaryFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Binary arm
125 BinaryFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
126 BinaryFunction.warnNonIntersecting skip:debug log-only warning when min or max ranges never meet; Horizon returns the surviving side silently in compile_binary
127 BinaryFunction.AddSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Add
128 BinaryFunction.AddSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Add
129 BinaryFunction.ConstAddSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Add with a constant
130 BinaryFunction.ConstAddSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Add with a constant
131 BinaryFunction.ConstDivSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::DivideInto (constant over input)
132 BinaryFunction.ConstDivSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::DivideInto
133 BinaryFunction.ConstMaxSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Maximum
134 BinaryFunction.ConstMaxSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Maximum
135 BinaryFunction.ConstMinSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Minimum
136 BinaryFunction.ConstMinSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Minimum
137 BinaryFunction.ConstMulSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Multiply (a constant divisor becomes 1/c, as in vanilla)
138 BinaryFunction.ConstMulSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Multiply
139 BinaryFunction.ConstSubSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::SubtractFrom (constant minus input)
140 BinaryFunction.ConstSubSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::SubtractFrom
141 BinaryFunction.DivSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Divide; a zero left gives zero
142 BinaryFunction.DivSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Divide
143 BinaryFunction.MaxSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Maximum with the right-max shortcut
144 BinaryFunction.MaxSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Maximum
145 BinaryFunction.MinSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Minimum with the right-min shortcut
146 BinaryFunction.MinSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Minimum
147 BinaryFunction.MulSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Multiply; a zero left gives zero
148 BinaryFunction.MulSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Multiply
149 BinaryFunction.SubSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_value BinaryOp::Subtract
150 BinaryFunction.SubSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::BinarySampler::sample_volume BinaryOp::Subtract
151 BlendDensityFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
152 BlendDensityFunction.Sampler.sampleValue port crates/horizon-core/src/density/world_fields.rs::BlendDensitySampler::sample_value
153 BlendDensityFunction.Sampler.sampleVolume port crates/horizon-core/src/density/world_fields.rs::BlendDensitySampler::sample_volume
154 CacheFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children the cache node itself is prepared in DensityCompiler::prepare
155 ClampFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Clamp arm: a UnarySampler with UnaryOp::Clamp
156 ClampFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
157 ClampFunction.validate port crates/horizon-world/src/worldgen/density.rs::Loader::decode the clamp arm rejects max below min
158 ClampFunction.Sampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::Clamp
159 ClampFunction.Sampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::Clamp
160 FindTopSurfaceFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Surface arm, built by compile_surface_search
161 FindTopSurfaceFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Surface arm
162 FindTopSurfaceFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
163 FindTopSurfaceFunction.Sampler.findSurfaceFrom port crates/horizon-core/src/density/surface.rs::FindTopSurfaceSampler::find_surface_from
164 FindTopSurfaceFunction.Sampler.sampleValue port crates/horizon-core/src/density/surface.rs::FindTopSurfaceSampler::sample_value
165 FindTopSurfaceFunction.Sampler.sampleVolume port crates/horizon-core/src/density/surface.rs::FindTopSurfaceSampler::sample_volume
166 InterpolatedFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Interpolated arm
167 InterpolatedFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
168 InterpolatedFunction.Sampler.fillCell port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::fill_cell
169 InterpolatedFunction.Sampler.sampleValue port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_value
170 InterpolatedFunction.Sampler.sampleVolume port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_volume
171 InterpolatedFunction.Sampler.sampleWithBlockStep port crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_block_volume
172 InterpolatedFunction.Sampler.sampleWithNonBlockStep inline crates/horizon-core/src/density/interpolation.rs::InterpolatedSampler::sample_volume the sparse and arbitrary-step branches of sample_volume
173 IntervalSelectFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw IntervalSelect arm
174 IntervalSelectFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
175 IntervalSelectFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
176 IntervalSelectFunction.validate port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::insert the branch and threshold counts are checked when the node is inserted
177 IntervalSelectFunction.Sampler.sampleValue port crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::sample_value
178 IntervalSelectFunction.Sampler.sampleVolume port crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::sample_volume
179 IntervalSelectFunction.Sampler.selectSamplerIndex port crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::select
180 IntervalSelectFunction.SingleThresholdSampler.sampleValue inline crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::select no one-threshold class; the generic select covers it
181 IntervalSelectFunction.SingleThresholdSampler.sampleVolume inline crates/horizon-core/src/density/selection.rs::IntervalSelectSampler::sample_volume no one-threshold class; the generic path covers it
182 densityfunction/op/LerpFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Lerp arm; constant ends become DensityValue::Constant
183 densityfunction/op/LerpFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
184 densityfunction/op/LerpFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Lerp arm
185 densityfunction/op/LerpFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
186 LerpFunction.ConstFirstSampler.sampleValue port crates/horizon-core/src/density/selection.rs::DensityValue::sample_value constant first end
187 LerpFunction.ConstFirstSampler.sampleVolume port crates/horizon-core/src/density/selection.rs::DensityValue::with_volume constant first end
188 LerpFunction.ConstSecondSampler.sampleValue port crates/horizon-core/src/density/selection.rs::DensityValue::sample_value constant second end
189 LerpFunction.ConstSecondSampler.sampleVolume port crates/horizon-core/src/density/selection.rs::DensityValue::with_volume constant second end
190 LerpFunction.Sampler.sampleValue port crates/horizon-core/src/density/selection.rs::LerpSampler::sample_value
191 LerpFunction.Sampler.sampleVolume port crates/horizon-core/src/density/selection.rs::LerpSampler::sample_volume
192 PowFunction.compileConstExponent port crates/horizon-core/src/density/power.rs::compile_constant_exponent 0.5, 1, 2, 3 and negatives get their own ops
193 PowFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Power arm
194 PowFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
195 PowFunction.ConstBaseSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::PowerBase
196 PowFunction.ConstBaseSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::PowerBase
197 PowFunction.ConstExponentSampler.sampleValue port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value UnaryOp::PowerExponent or the specialised ops
198 PowFunction.ConstExponentSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::PowerExponent or the specialised ops
199 PowFunction.Sampler.sampleValue port crates/horizon-core/src/density/power.rs::PowerSampler::sample_value
200 PowFunction.Sampler.sampleVolume port crates/horizon-core/src/density/power.rs::PowerSampler::sample_volume
201 RangeChoiceFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Choice arm; constant branches become UnaryOp::ConstantRangeChoice
202 RangeChoiceFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
203 RangeChoiceFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Choice arm
204 RangeChoiceFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
205 RangeChoiceFunction.ConstSampler.choose port crates/horizon-core/src/density/arithmetic.rs::UnaryOp::apply UnaryOp::ConstantRangeChoice
206 RangeChoiceFunction.ConstSampler.sampleVolume port crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume UnaryOp::ConstantRangeChoice
207 RangeChoiceFunction.Sampler.sampleValue port crates/horizon-core/src/density/selection.rs::RangeChoiceSampler::sample_value
208 RangeChoiceFunction.Sampler.sampleVolume port crates/horizon-core/src/density/selection.rs::RangeChoiceSampler::sample_volume
209 RoundFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Round arm; a multiple of 1 skips the multiply
210 RoundFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range Round arm
211 RoundFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
212 RoundFunction.roundToInteger port crates/horizon-core/src/density/rounding.rs::RoundMode::apply the multiple-of-1 case
213 RoundFunction.IntegerMultipleSampler.sampleValue port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_value multiple absent
214 RoundFunction.IntegerMultipleSampler.sampleVolume port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_volume multiple absent
215 RoundFunction.Sampler.apply port crates/horizon-core/src/density/rounding.rs::RoundMode::apply
216 RoundFunction.Sampler.sampleValue port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_value
217 RoundFunction.Sampler.sampleVolume port crates/horizon-core/src/density/rounding.rs::RoundSampler::sample_volume
218 SliceFunction.compileSampler port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw Slice arm; an X and a Z slice fuse into one Xz sampler
219 SliceFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
220 SliceFunction.XSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::X
221 SliceFunction.XzSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::Xz
222 SliceFunction.YSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::Y
223 SliceFunction.ZSampler.sampleVolume port crates/horizon-core/src/density/slice.rs::SliceSampler::sample_volume SliceAxes::Z
224 SplineFunction.domainAxes port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::domain_axes
225 SplineFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children spline coordinates are children too (GraphNode::children_mut)
226 SplineFunction.BufferSplineInput.close port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_volume coordinate buffers go back to context.scratch when sample_volume ends
227 SplineFunction.BufferSplineInput.sampleCoordinate port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_volume each coordinate buffer is filled on first use
+188
View File
@@ -0,0 +1,188 @@
SplineFunction.PointSplineInput.sampleCoordinate inline crates/horizon-core/src/density/spline.rs::SplineSampler::sample_value per-point coordinate lookup in the sample closure
SplineFunction.Sampler.sampleValue port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_value
SplineFunction.Sampler.sampleVolume port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_volume
UnaryFunction.compileSampler inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw unary arm of compile_raw
UnaryFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range unary interval arm
UnaryFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
UnaryFunction.AbsSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler; Abs is a UnaryOp arm
UnaryFunction.CubeSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.LeakyReLUSampler.sampleValue inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value LeakyRelu arm of UnaryOp::apply
UnaryFunction.LeakyReLUSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.LogSampler.sampleValue inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value Log arm of UnaryOp::apply
UnaryFunction.LogSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.NegateSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.ReciprocalSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.SignSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.SqrtSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.SquareSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
UnaryFunction.SqueezeSampler.apply inline crates/horizon-core/src/density/arithmetic.rs::UnaryOp::apply Squeeze arm
UnaryFunction.SqueezeSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
AbstractHugeMushroomFeature.getTreeHeight inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place height roll at the start of place
AbstractHugeMushroomFeature.isValidPosition inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place base and clearance checks
AbstractHugeMushroomFeature.place port crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place
AbstractHugeMushroomFeature.placeMushroomBlock port crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place_block
AbstractHugeMushroomFeature.placeTrunk inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place stem loop
AbstractOreFeature.canPlaceOre inline crates/horizon-world/src/worldgen/ore_feature.rs::OreFeature::do_place target rule test and air check in the block loop
AbstractOreFeature.checkNeighbors inline crates/horizon-world/src/worldgen/ore_feature.rs::OreFeature::do_place six-neighbour air scan
AbstractOreFeature.makeCodec skip:java codec builder
AbstractOreFeature.shouldSkipAirCheck port crates/horizon-world/src/worldgen/ore_feature.rs::skip_air_check
CoralClawFeature.place port crates/horizon-world/src/worldgen/vegetation.rs::CoralFeature::place
CoralTreeFeature.place port crates/horizon-world/src/worldgen/vegetation.rs::CoralFeature::place
CuboidPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Cuboid arm
FeatureCountTracker skip:debug feature count debug log, no game behaviour
HugeBrownMushroomFeature.makeCap inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place non-red cap branch
HugeRedMushroomFeature.getTreeRadiusForHeight port crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::radius_for_height
HugeRedMushroomFeature.makeCap inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place red cap loop
ProjectedRandomPatchySquare.place port crates/horizon-world/src/worldgen/projected.rs::ProjectedPatchySquareFeature::place
RandomBooleanSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
RandomBooleanSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate BooleanChoice arm
RandomNeighborSpreadFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate NeighborSpread arm
RandomSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
RandomSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate RandomChoice arm
SequenceFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
SequenceFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate Sequence arm
SimpleRandomSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
SimpleRandomSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate RandomChoice arm (simple selector decodes there)
SingleBlockPillarFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate Pillar arm
VoidStartPlatformFeature.place port crates/horizon-world/src/worldgen/feature.rs::BasicFeature::place VoidStartPlatform arm
WeightedRandomSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
WeightedRandomSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate WeightedChoice arm
ThreeLayersFeatureSize.getSizeAtHeight port crates/horizon-world/src/worldgen/tree.rs::FeatureSize::size_at_height ThreeLayers arm
AcaciaFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Acacia arm
AcaciaFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Acacia arm
BlobFoliagePlacer.blobParts skip:java codec part builder
BlobFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Blob arm
BlobFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Blob arm
BushFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Bush arm
BushFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Bush arm
CherryFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Cherry arm
CherryFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Cherry arm
DarkOakFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage DarkOak arm
DarkOakFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip DarkOak arm
DarkOakFoliagePlacer.shouldSkipLocationSigned port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip_signed
FancyFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Fancy arm
FancyFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Fancy arm
MegaJungleFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage MegaJungle arm
MegaJungleFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip MegaJungle arm
MegaPineFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage MegaPine arm
MegaPineFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip MegaPine arm
PineFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Pine arm
PineFoliagePlacer.foliageRadius port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::foliage_radius
PineFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Pine arm
PoplarFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Poplar arm
PoplarFoliagePlacer.getCornerBlocksToCutForRhombusShape port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::corner_cut
PoplarFoliagePlacer.isLeftLowerCornerOrRightTopCorner inline crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::corner_cut corner tests inlined in corner_cut
PoplarFoliagePlacer.isLeftTopCornerOrRightLowerCorner inline crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::corner_cut corner tests inlined in corner_cut
PoplarFoliagePlacer.isWithinRhombusShape port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::within
PoplarFoliagePlacer.placeLeavesRow port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::row
PoplarFoliagePlacer.replaceLeavesWithLog port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::replace_with_log
PoplarFoliagePlacer.shouldRowBePartialRhombusShape port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::partial_row
PoplarFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::skip
PoplarFoliagePlacer.tryPlaceLog inline crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::replace_with_log log set inside the replace loop
RandomSpreadFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage RandomSpread arm
SpruceFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Spruce arm
SpruceFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Spruce arm
MangroveRootPlacer.canPlaceRoot port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::can_place_root
MangroveRootPlacer.placeRoot port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::place_root
MangroveRootPlacer.placeRoots port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::place_roots
MangroveRootPlacer.potentialRootPositions port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::potential
MangroveRootPlacer.simulateRoots port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::simulate
CopyPropertiesProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state CopyProperties arm
DualNoiseProvider.getSlowNoiseValue inline crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample slow noise sampled in the Dual arm
DualNoiseProvider.getState port crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample Dual arm
NoiseBasedStateProvider.getNoiseValue inline crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample fast noise sample shared by all noise kinds
NoiseBasedStateProvider.noiseCodec skip:java codec builder
NoiseThresholdProvider.getState port crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample Threshold arm
RandomBlockProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RandomBlock arm
RandomizedIntStateProvider.findProperty inline crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state property lookup in the RandomizedInt arm
RandomizedIntStateProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RandomizedInt arm
RotatedBlockProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state Rotated arm
RuleBasedStateProvider.builder skip:java builder API; Horizon decodes rule_based JSON
RuleBasedStateProvider.getOptionalState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RuleBased arm
RuleBasedStateProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RuleBased arm
RuleBasedStateProvider.ifTrueThenProvide skip:java builder API; Horizon decodes rule_based JSON
RuleBasedStateProvider.Builder skip:java builder API; Horizon decodes rule_based JSON
AlterGroundDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place AlterGround arm
AlterGroundDecorator.placeBlockAt inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::circle single set inside the circle loop
AlterGroundDecorator.placeCircle port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::circle
AttachedToLeavesDecorator.hasRequiredEmptyBlocks inline crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place required_empty check in AttachedToLeaves arm
AttachedToLeavesDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place AttachedToLeaves arm
AttachedToLogsDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place AttachedToLogs arm
CocoaDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place Cocoa arm
CreakingHeartDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place CreakingHeart arm
LeaveVineDecorator.addHangingVine port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::place_vine
LeaveVineDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place LeaveVine arm
PaleMossDecorator.addMossHanger port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::moss_hanger
PaleMossDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place PaleMoss arm
PlaceOnGroundDecorator.attemptToPlaceBlockAbove inline crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place PlaceOnGround arm
PlaceOnGroundDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place PlaceOnGround arm
ShelfMushroomDecorator.hasHorizontallyAdjacentShelfMushroom port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::adjacent_mushroom
ShelfMushroomDecorator.isBlockReplaceableWithShelfMushroom port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::mushroom_replaceable
ShelfMushroomDecorator.isFallenLog inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log test (all logs at one y)
ShelfMushroomDecorator.isWithinDecoratableHeight inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom height offset 1 to 4 test
ShelfMushroomDecorator.perpendicularToFallenLog inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log facings
ShelfMushroomDecorator.pickTwoPerpendicularDirections inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom standing-tree facings
ShelfMushroomDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom
ShelfMushroomDecorator.placeMushroom port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::place_mushroom
ShelfMushroomDecorator.placeOnFallenLog inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log branch
ShelfMushroomDecorator.placeOnStandingTree inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom standing-tree branch
ShelfMushroomDecorator.tryPlaceMushroomOnFallenTree inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log branch test and place
ShelfMushroomDecorator.tryPlaceMushroomOnStandingTree inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom standing-tree branch test and place
TrunkVineDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place TrunkVine arm
BendingTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk Bending arm
CherryTrunkPlacer.generateBranch inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::cherry branch loop in cherry
CherryTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::cherry
DarkOakTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::dark_oak
FancyTrunkPlacer.getLogAxis port crates/horizon-world/src/worldgen/tree/trunk.rs::log_axis
FancyTrunkPlacer.getSteps inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::make_limb step count inside make_limb
FancyTrunkPlacer.makeBranches inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::fancy branch loop at the end of fancy
FancyTrunkPlacer.makeLimb port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::make_limb
FancyTrunkPlacer.treeShape port crates/horizon-world/src/worldgen/tree/trunk.rs::tree_shape
FancyTrunkPlacer.trimBranches port crates/horizon-world/src/worldgen/tree/trunk.rs::trim_branches
ForkingTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::forking
GiantTrunkPlacer.placeLogIfFreeWithOffset port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_log_if_free gap: minor: the offset is added by giant before this call
GiantTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::giant
MegaJungleTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk MegaJungle arm
PoplarTrunkPlacer.getShuffledBranchDirections inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk shuffle of horizontal directions in the Poplar arm
PoplarTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk Poplar arm
StraightTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk Straight arm
UpwardsBranchingTrunkPlacer.placeBranch port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::upwards_branch
UpwardsBranchingTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk UpwardsBranching arm
UpwardsBranchingTrunkPlacer.validTreePos port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::valid_tree_pos
FlatLayerInfo.heightLimited missing minor: no per-layer clamp to the max height; flat settings only cap the total at the build height
FlatLayerInfo.toString skip:debug debug text
FlatLevelGeneratorPresets.Bootstrap skip:data registry bootstrap of the preset list
BiasedToBottomHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample BiasedToBottom arm
TrapezoidHeight.of skip:java factory helper; Horizon decodes the trapezoid JSON
TrapezoidHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample Trapezoid arm
TrapezoidHeight.toString skip:debug debug text
UniformHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample Uniform arm
VeryBiasedToBottomHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample VeryBiasedToBottom arm
MaterialRules skip:data rule builders for the vanilla surface-rule bootstrap; Horizon reads the material rule JSON
BiomeCondition.canNeverMatch inline crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Biome arm, constant false when biomes are disjoint
BiomeCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Biome arm
BiomeCondition.willAlwaysMatch inline crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Biome arm, constant true when biomes are a subset
NoiseThresholdCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Noise arm
NotCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Not arm
StoneDepthCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile keeps the StoneDepth config; the depth test is Compiled::test
VerticalGradientCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Gradient arm
ConditionRule.compile port crates/horizon-world/src/worldgen/material_condition/rule.rs::CompiledRule::compile Condition arm
OreVeinRule.compile port crates/horizon-world/src/worldgen/material_condition/rule.rs::CompiledRule::compile OreVein arm
OreVeinRule.VeinType.create skip:data factory the bootstrap uses for vein rules; Horizon reads the ore vein JSON
SequenceRule.compile port crates/horizon-world/src/worldgen/material_condition/rule.rs::CompiledRule::compile Sequence arm
BiomeFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Biome arm
CountOnEveryLayerPlacement.findOnGroundYPosition port crates/horizon-world/src/worldgen/placement/layer.rs::ground
CountOnEveryLayerPlacement.isEmpty inline crates/horizon-world/src/level/feature_world.rs::LevelFeatureWorld::layer_block empty layer test (air, water, lava)
CountOnEveryLayerPlacement.modify port crates/horizon-world/src/worldgen/placement/layer.rs::modify
EnvironmentScanPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner EnvironmentScan arm
EnvironmentScanPlacement.scanningFor skip:java factory helper; Horizon decodes the environment_scan JSON
FixedPlacement.isSameChunk inline crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner chunk test in the Fixed arm
FixedPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Fixed arm
HeightmapPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Heightmap arm
InSquarePlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner InSquare arm
NoiseBasedCountPlacement.count port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::repetitions NoiseBasedCount arm
NoiseThresholdCountPlacement.count port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::repetitions NoiseThresholdCount arm
OffsetPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Offset arm
OffsetPlacement.of skip:java factory helper; Horizon decodes the offset JSON
RandomlySelectedPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner RandomlySelected arm
RarityFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Rarity arm
1 SplineFunction.PointSplineInput.sampleCoordinate inline crates/horizon-core/src/density/spline.rs::SplineSampler::sample_value per-point coordinate lookup in the sample closure
2 SplineFunction.Sampler.sampleValue port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_value
3 SplineFunction.Sampler.sampleVolume port crates/horizon-core/src/density/spline.rs::SplineSampler::sample_volume
4 UnaryFunction.compileSampler inline crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::compile_raw unary arm of compile_raw
5 UnaryFunction.range port crates/horizon-core/src/density/graph/mod.rs::DensityGraph::range unary interval arm
6 UnaryFunction.rewriteChildren port crates/horizon-core/src/density/graph/compiler.rs::DensityCompiler::rewrite_children
7 UnaryFunction.AbsSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler; Abs is a UnaryOp arm
8 UnaryFunction.CubeSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
9 UnaryFunction.LeakyReLUSampler.sampleValue inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value LeakyRelu arm of UnaryOp::apply
10 UnaryFunction.LeakyReLUSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
11 UnaryFunction.LogSampler.sampleValue inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_value Log arm of UnaryOp::apply
12 UnaryFunction.LogSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
13 UnaryFunction.NegateSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
14 UnaryFunction.ReciprocalSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
15 UnaryFunction.SignSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
16 UnaryFunction.SqrtSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
17 UnaryFunction.SquareSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
18 UnaryFunction.SqueezeSampler.apply inline crates/horizon-core/src/density/arithmetic.rs::UnaryOp::apply Squeeze arm
19 UnaryFunction.SqueezeSampler.sampleVolume inline crates/horizon-core/src/density/arithmetic.rs::UnarySampler::sample_volume one generic unary sampler
20 AbstractHugeMushroomFeature.getTreeHeight inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place height roll at the start of place
21 AbstractHugeMushroomFeature.isValidPosition inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place base and clearance checks
22 AbstractHugeMushroomFeature.place port crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place
23 AbstractHugeMushroomFeature.placeMushroomBlock port crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place_block
24 AbstractHugeMushroomFeature.placeTrunk inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place stem loop
25 AbstractOreFeature.canPlaceOre inline crates/horizon-world/src/worldgen/ore_feature.rs::OreFeature::do_place target rule test and air check in the block loop
26 AbstractOreFeature.checkNeighbors inline crates/horizon-world/src/worldgen/ore_feature.rs::OreFeature::do_place six-neighbour air scan
27 AbstractOreFeature.makeCodec skip:java codec builder
28 AbstractOreFeature.shouldSkipAirCheck port crates/horizon-world/src/worldgen/ore_feature.rs::skip_air_check
29 CoralClawFeature.place port crates/horizon-world/src/worldgen/vegetation.rs::CoralFeature::place
30 CoralTreeFeature.place port crates/horizon-world/src/worldgen/vegetation.rs::CoralFeature::place
31 CuboidPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Cuboid arm
32 FeatureCountTracker skip:debug feature count debug log, no game behaviour
33 HugeBrownMushroomFeature.makeCap inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place non-red cap branch
34 HugeRedMushroomFeature.getTreeRadiusForHeight port crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::radius_for_height
35 HugeRedMushroomFeature.makeCap inline crates/horizon-world/src/worldgen/vegetation.rs::HugeMushroomFeature::place red cap loop
36 ProjectedRandomPatchySquare.place port crates/horizon-world/src/worldgen/projected.rs::ProjectedPatchySquareFeature::place
37 RandomBooleanSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
38 RandomBooleanSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate BooleanChoice arm
39 RandomNeighborSpreadFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate NeighborSpread arm
40 RandomSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
41 RandomSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate RandomChoice arm
42 SequenceFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
43 SequenceFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate Sequence arm
44 SimpleRandomSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
45 SimpleRandomSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate RandomChoice arm (simple selector decodes there)
46 SingleBlockPillarFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate Pillar arm
47 VoidStartPlatformFeature.place port crates/horizon-world/src/worldgen/feature.rs::BasicFeature::place VoidStartPlatform arm
48 WeightedRandomSelectorFeature.getSubFeatures port crates/horizon-world/src/worldgen/live.rs::nested_features gap: minor: walks nested feature names from the JSON, not feature objects
49 WeightedRandomSelectorFeature.place port crates/horizon-world/src/worldgen/feature_graph.rs::FeatureDefinition::evaluate WeightedChoice arm
50 ThreeLayersFeatureSize.getSizeAtHeight port crates/horizon-world/src/worldgen/tree.rs::FeatureSize::size_at_height ThreeLayers arm
51 AcaciaFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Acacia arm
52 AcaciaFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Acacia arm
53 BlobFoliagePlacer.blobParts skip:java codec part builder
54 BlobFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Blob arm
55 BlobFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Blob arm
56 BushFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Bush arm
57 BushFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Bush arm
58 CherryFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Cherry arm
59 CherryFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Cherry arm
60 DarkOakFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage DarkOak arm
61 DarkOakFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip DarkOak arm
62 DarkOakFoliagePlacer.shouldSkipLocationSigned port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip_signed
63 FancyFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Fancy arm
64 FancyFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Fancy arm
65 MegaJungleFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage MegaJungle arm
66 MegaJungleFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip MegaJungle arm
67 MegaPineFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage MegaPine arm
68 MegaPineFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip MegaPine arm
69 PineFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Pine arm
70 PineFoliagePlacer.foliageRadius port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::foliage_radius
71 PineFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Pine arm
72 PoplarFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Poplar arm
73 PoplarFoliagePlacer.getCornerBlocksToCutForRhombusShape port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::corner_cut
74 PoplarFoliagePlacer.isLeftLowerCornerOrRightTopCorner inline crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::corner_cut corner tests inlined in corner_cut
75 PoplarFoliagePlacer.isLeftTopCornerOrRightLowerCorner inline crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::corner_cut corner tests inlined in corner_cut
76 PoplarFoliagePlacer.isWithinRhombusShape port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::within
77 PoplarFoliagePlacer.placeLeavesRow port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::row
78 PoplarFoliagePlacer.replaceLeavesWithLog port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::replace_with_log
79 PoplarFoliagePlacer.shouldRowBePartialRhombusShape port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::partial_row
80 PoplarFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::skip
81 PoplarFoliagePlacer.tryPlaceLog inline crates/horizon-world/src/worldgen/tree/foliage.rs::Poplar::replace_with_log log set inside the replace loop
82 RandomSpreadFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage RandomSpread arm
83 SpruceFoliagePlacer.createFoliage port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::create_foliage Spruce arm
84 SpruceFoliagePlacer.shouldSkipLocation port crates/horizon-world/src/worldgen/tree/foliage.rs::FoliagePlacer::skip Spruce arm
85 MangroveRootPlacer.canPlaceRoot port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::can_place_root
86 MangroveRootPlacer.placeRoot port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::place_root
87 MangroveRootPlacer.placeRoots port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::place_roots
88 MangroveRootPlacer.potentialRootPositions port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::potential
89 MangroveRootPlacer.simulateRoots port crates/horizon-world/src/worldgen/tree.rs::RootPlacer::simulate
90 CopyPropertiesProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state CopyProperties arm
91 DualNoiseProvider.getSlowNoiseValue inline crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample slow noise sampled in the Dual arm
92 DualNoiseProvider.getState port crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample Dual arm
93 NoiseBasedStateProvider.getNoiseValue inline crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample fast noise sample shared by all noise kinds
94 NoiseBasedStateProvider.noiseCodec skip:java codec builder
95 NoiseThresholdProvider.getState port crates/horizon-world/src/worldgen/state_provider/noise.rs::NoiseProvider::sample Threshold arm
96 RandomBlockProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RandomBlock arm
97 RandomizedIntStateProvider.findProperty inline crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state property lookup in the RandomizedInt arm
98 RandomizedIntStateProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RandomizedInt arm
99 RotatedBlockProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state Rotated arm
100 RuleBasedStateProvider.builder skip:java builder API; Horizon decodes rule_based JSON
101 RuleBasedStateProvider.getOptionalState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RuleBased arm
102 RuleBasedStateProvider.getState port crates/horizon-world/src/worldgen/state_provider.rs::BlockStateProvider::get_optional_state RuleBased arm
103 RuleBasedStateProvider.ifTrueThenProvide skip:java builder API; Horizon decodes rule_based JSON
104 RuleBasedStateProvider.Builder skip:java builder API; Horizon decodes rule_based JSON
105 AlterGroundDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place AlterGround arm
106 AlterGroundDecorator.placeBlockAt inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::circle single set inside the circle loop
107 AlterGroundDecorator.placeCircle port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::circle
108 AttachedToLeavesDecorator.hasRequiredEmptyBlocks inline crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place required_empty check in AttachedToLeaves arm
109 AttachedToLeavesDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place AttachedToLeaves arm
110 AttachedToLogsDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place AttachedToLogs arm
111 CocoaDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place Cocoa arm
112 CreakingHeartDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place CreakingHeart arm
113 LeaveVineDecorator.addHangingVine port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::place_vine
114 LeaveVineDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place LeaveVine arm
115 PaleMossDecorator.addMossHanger port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::moss_hanger
116 PaleMossDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place PaleMoss arm
117 PlaceOnGroundDecorator.attemptToPlaceBlockAbove inline crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place PlaceOnGround arm
118 PlaceOnGroundDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place PlaceOnGround arm
119 ShelfMushroomDecorator.hasHorizontallyAdjacentShelfMushroom port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::adjacent_mushroom
120 ShelfMushroomDecorator.isBlockReplaceableWithShelfMushroom port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::mushroom_replaceable
121 ShelfMushroomDecorator.isFallenLog inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log test (all logs at one y)
122 ShelfMushroomDecorator.isWithinDecoratableHeight inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom height offset 1 to 4 test
123 ShelfMushroomDecorator.perpendicularToFallenLog inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log facings
124 ShelfMushroomDecorator.pickTwoPerpendicularDirections inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom standing-tree facings
125 ShelfMushroomDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom
126 ShelfMushroomDecorator.placeMushroom port crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::place_mushroom
127 ShelfMushroomDecorator.placeOnFallenLog inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log branch
128 ShelfMushroomDecorator.placeOnStandingTree inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom standing-tree branch
129 ShelfMushroomDecorator.tryPlaceMushroomOnFallenTree inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom fallen-log branch test and place
130 ShelfMushroomDecorator.tryPlaceMushroomOnStandingTree inline crates/horizon-world/src/worldgen/tree/decorator.rs::Decorate::shelf_mushroom standing-tree branch test and place
131 TrunkVineDecorator.place port crates/horizon-world/src/worldgen/tree/decorator.rs::TreeDecorator::place TrunkVine arm
132 BendingTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk Bending arm
133 CherryTrunkPlacer.generateBranch inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::cherry branch loop in cherry
134 CherryTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::cherry
135 DarkOakTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::dark_oak
136 FancyTrunkPlacer.getLogAxis port crates/horizon-world/src/worldgen/tree/trunk.rs::log_axis
137 FancyTrunkPlacer.getSteps inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::make_limb step count inside make_limb
138 FancyTrunkPlacer.makeBranches inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::fancy branch loop at the end of fancy
139 FancyTrunkPlacer.makeLimb port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::make_limb
140 FancyTrunkPlacer.treeShape port crates/horizon-world/src/worldgen/tree/trunk.rs::tree_shape
141 FancyTrunkPlacer.trimBranches port crates/horizon-world/src/worldgen/tree/trunk.rs::trim_branches
142 ForkingTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::forking
143 GiantTrunkPlacer.placeLogIfFreeWithOffset port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_log_if_free gap: minor: the offset is added by giant before this call
144 GiantTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::giant
145 MegaJungleTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk MegaJungle arm
146 PoplarTrunkPlacer.getShuffledBranchDirections inline crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk shuffle of horizontal directions in the Poplar arm
147 PoplarTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk Poplar arm
148 StraightTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk Straight arm
149 UpwardsBranchingTrunkPlacer.placeBranch port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::upwards_branch
150 UpwardsBranchingTrunkPlacer.placeTrunk port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::place_trunk UpwardsBranching arm
151 UpwardsBranchingTrunkPlacer.validTreePos port crates/horizon-world/src/worldgen/tree/trunk.rs::TrunkPlacer::valid_tree_pos
152 FlatLayerInfo.heightLimited missing minor: no per-layer clamp to the max height; flat settings only cap the total at the build height
153 FlatLayerInfo.toString skip:debug debug text
154 FlatLevelGeneratorPresets.Bootstrap skip:data registry bootstrap of the preset list
155 BiasedToBottomHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample BiasedToBottom arm
156 TrapezoidHeight.of skip:java factory helper; Horizon decodes the trapezoid JSON
157 TrapezoidHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample Trapezoid arm
158 TrapezoidHeight.toString skip:debug debug text
159 UniformHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample Uniform arm
160 VeryBiasedToBottomHeight.sample port crates/horizon-world/src/worldgen/height_provider.rs::HeightProvider::sample VeryBiasedToBottom arm
161 MaterialRules skip:data rule builders for the vanilla surface-rule bootstrap; Horizon reads the material rule JSON
162 BiomeCondition.canNeverMatch inline crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Biome arm, constant false when biomes are disjoint
163 BiomeCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Biome arm
164 BiomeCondition.willAlwaysMatch inline crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Biome arm, constant true when biomes are a subset
165 NoiseThresholdCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Noise arm
166 NotCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Not arm
167 StoneDepthCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile keeps the StoneDepth config; the depth test is Compiled::test
168 VerticalGradientCondition.compile port crates/horizon-world/src/worldgen/material_condition.rs::Compiled::compile Gradient arm
169 ConditionRule.compile port crates/horizon-world/src/worldgen/material_condition/rule.rs::CompiledRule::compile Condition arm
170 OreVeinRule.compile port crates/horizon-world/src/worldgen/material_condition/rule.rs::CompiledRule::compile OreVein arm
171 OreVeinRule.VeinType.create skip:data factory the bootstrap uses for vein rules; Horizon reads the ore vein JSON
172 SequenceRule.compile port crates/horizon-world/src/worldgen/material_condition/rule.rs::CompiledRule::compile Sequence arm
173 BiomeFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Biome arm
174 CountOnEveryLayerPlacement.findOnGroundYPosition port crates/horizon-world/src/worldgen/placement/layer.rs::ground
175 CountOnEveryLayerPlacement.isEmpty inline crates/horizon-world/src/level/feature_world.rs::LevelFeatureWorld::layer_block empty layer test (air, water, lava)
176 CountOnEveryLayerPlacement.modify port crates/horizon-world/src/worldgen/placement/layer.rs::modify
177 EnvironmentScanPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner EnvironmentScan arm
178 EnvironmentScanPlacement.scanningFor skip:java factory helper; Horizon decodes the environment_scan JSON
179 FixedPlacement.isSameChunk inline crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner chunk test in the Fixed arm
180 FixedPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Fixed arm
181 HeightmapPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Heightmap arm
182 InSquarePlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner InSquare arm
183 NoiseBasedCountPlacement.count port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::repetitions NoiseBasedCount arm
184 NoiseThresholdCountPlacement.count port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::repetitions NoiseThresholdCount arm
185 OffsetPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Offset arm
186 OffsetPlacement.of skip:java factory helper; Horizon decodes the offset JSON
187 RandomlySelectedPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner RandomlySelected arm
188 RarityFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner Rarity arm
+189
View File
@@ -0,0 +1,189 @@
RepeatingPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner repeat arm for Count and the noise counts emits the count
SurfaceRelativeThresholdFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner SurfaceRelative arm: y between heightmap plus min and max
SurfaceWaterDepthFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner SurfaceWaterDepth arm
WorldPreset skip:data data-pack preset record; bundled world_presets carry the dimensions and generator.rs builds one dimension by name
WorldPresets.fromSettings skip:data names a preset from its dimensions; Horizon loads presets by name
WorldPresets.getNormalOverworld port crates/horizon-world/src/worldgen/generator.rs::OverworldGenerator::new builds the normal preset's overworld directly; no LevelStem object
WorldPresets.Bootstrap skip:data datagen bootstrap that registers the presets
SinglePieceStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate DesertPyramid/JungleTemple arm: valid biome, sea-level check, stub on the surface
SinglePieceStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate same arm builds the piece at the chunk corner
structure/StructureCheck.canCreateStructure port crates/horizon-world/src/worldgen/structure/start.rs::try_generate no start when the arm returns None
structure/StructureCheck.checkStart missing player: an explorer map (skip_existing_chunks, default on) can point at a structure the player already reached; the reference check is not ported
structure/StructureCheck.checkStructureInfo missing player: requireUnreferenced is ignored, so explorer maps do not skip known structures (see checkStart)
structure/StructureCheck.incrementReference missing player: no reference counts per chunk, so explorer maps do not skip structures already reached
structure/StructureCheck.loadStructures skip:other reads saved starts for the storage cache; Horizon places saved starts with use_saved_start
structure/StructureCheck.onStructureLoad missing player: starts loaded in a chunk do not record references (see incrementReference)
structure/StructureCheck.storeFullResults skip:other cache write for the storage check
structure/StructureCheck.tryLoadFromStorage skip:other chunk NBT scan for the storage cache; Horizon places saved starts with use_saved_start
PiecesContainer.isInsidePiece inline crates/horizon-world/src/worldgen/generator_decoration.rs::World::add_entity start-piece box test that feeds the mob finalize hook
PiecesContainer.load port crates/horizon-world/src/worldgen/generator_structures.rs::StructureState::use_saved_start gap: minor: only jigsaw pool pieces are read back; legacy piece types are not
PiecesContainer.save port crates/horizon-world/src/worldgen/structure/start.rs::StructureStart::save writes the Children list of the start
StructurePieceSerializationContext skip:java record bundling server services for piece NBT; Horizon passes its resources explicitly
StructurePiecesBuilder.moveBelowSeaLevel inline crates/horizon-world/src/worldgen/structure/mineshaft.rs::generate sea-level drop of the pieces; stronghold::generate has the same step
StructurePiecesBuilder.offsetPiecesVertically inline crates/horizon-world/src/worldgen/structure/mineshaft.rs::generate moves every piece by the same dy
AbstractSpreadingStructurePlacement.applyAdditionalChunkRestrictions inline crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::structure_chunk frequency reduction step of the chunk test
AbstractSpreadingStructurePlacement.applyInteractionsWithOtherStructures inline crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::structure_chunk exclusion zone and avoid checks
AbstractSpreadingStructurePlacement.isStructureChunk port crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::is_structure_chunk
AbstractSpreadingStructurePlacement.legacyArbitrarySaltProbabilityReducer port crates/horizon-world/src/worldgen/structure/start.rs::reduce Legacy2 arm
AbstractSpreadingStructurePlacement.legacyPillagerOutpostReducer port crates/horizon-world/src/worldgen/structure/start.rs::reduce Legacy1 arm
AbstractSpreadingStructurePlacement.legacyProbabilityReducerWithDouble port crates/horizon-world/src/worldgen/structure/start.rs::reduce Legacy3 arm
AbstractSpreadingStructurePlacement.probabilityReducer port crates/horizon-world/src/worldgen/structure/start.rs::reduce Default arm
ConcentricRingsStructurePlacement.isPlacementChunk port crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::structure_chunk ConcentricRings arm: chunk must be in the set's ring positions
DimensionOriginStructurePlacement missing minor: dimension_origin placement decodes as Unsupported in start.rs, so such a structure never places; no bundled structure file in the repo uses it
RandomSpreadType.evaluate inline crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::potential_chunk spread closure: linear, or triangular as the mean of two draws
StructurePlacements skip:data registers placement codecs; Horizon decodes placement type names in start.rs
FeaturePoolElement.getBoundingBox port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::bounding_box Feature arm, zero size
FeaturePoolElement.getShuffledJigsawBlocks port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::shuffled_jigsaws Feature arm: one rollable empty jigsaw
JigsawJunction.equals skip:java value equality
JigsawJunction.hashCode skip:java hashing for Java collections
JigsawJunction.toString skip:debug debug text
LegacySinglePoolElement.getSettings port crates/horizon-world/src/worldgen/structure/jigsaw.rs::place_element Single arm, legacy branch: structure-block ignore is replaced by structure and air ignore after jigsaw replacement
ListPoolElement.getBoundingBox port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::bounding_box List arm, skips empty elements
ListPoolElement.getShuffledJigsawBlocks port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::shuffled_jigsaws List arm: first element only
ListPoolElement.getSize port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::size List arm: per-axis maximum
ListPoolElement.place port crates/horizon-world/src/worldgen/structure/jigsaw.rs::place_element List arm
ListPoolElement.setProjectionOnEachElement port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::decode children take the list's projection while decoding
ListPoolElement.toString skip:debug debug text
StructurePoolElement.getProjection port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::projection
StructurePoolElement.legacy port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::decode legacy_single_pool_element kind
StructurePoolElement.single port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::decode single_pool_element kind
StructureTemplatePool.<init> port crates/horizon-world/src/worldgen/structure/jigsaw.rs::Pools::get builds each Pool from its raw templates
StructureTemplatePool.getMaxSize port crates/horizon-world/src/worldgen/structure/jigsaw.rs::Pool::max_size
StructureTemplatePool.getRandomTemplate port crates/horizon-world/src/worldgen/structure/jigsaw.rs::Pool::random_template
PoolAliasBinding.direct port crates/horizon-world/src/worldgen/structure/start.rs::resolve_aliases minecraft:direct arm
PoolAliasBinding.random port crates/horizon-world/src/worldgen/structure/start.rs::resolve_aliases minecraft:random arm: weighted pick
PoolAliasBindings skip:data datagen bootstrap that registers alias targets as pools
RandomGroupPoolAlias.allTargets skip:data lists alias targets for bootstrap registration
RandomGroupPoolAlias.forEachResolved port crates/horizon-world/src/worldgen/structure/start.rs::resolve_aliases minecraft:random_group arm
BuriedTreasureStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate BuriedTreasure arm
EndCityStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate EndCity arm: biome column and height checks
EndCityStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate EndCity arm calls end_city::pieces
IglooStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Igloo arm
IglooStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Igloo arm
JigsawStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Jigsaw arm: start height, checks, assembly
JigsawStructure.verifyRange skip:java codec validation of the size limit
NetherFortressPieces.findAndCreateBridgePieceFactory port crates/horizon-world/src/worldgen/structure/fortress.rs::Builder::create Kind dispatch to the bridge piece
NetherFortressPieces.PieceWeight.doPlace inline crates/horizon-world/src/worldgen/structure/fortress.rs::Builder::generate_piece placement check: max is 0 or count below max
NetherFortressPieces.PieceWeight.isValid inline crates/horizon-world/src/worldgen/structure/fortress.rs::Builder::generate_piece entry is dropped once count reaches max
OceanMonumentPieces.FitDoubleXRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleX branch of the layout chain
OceanMonumentPieces.FitDoubleXRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleX branch condition
OceanMonumentPieces.FitDoubleXYRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleXY branch of the layout chain
OceanMonumentPieces.FitDoubleXYRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleXY branch condition
OceanMonumentPieces.FitDoubleYRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleY branch of the layout chain
OceanMonumentPieces.FitDoubleYRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleY branch condition
OceanMonumentPieces.FitDoubleYZRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleYZ branch of the layout chain
OceanMonumentPieces.FitDoubleYZRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleYZ branch condition
OceanMonumentPieces.FitDoubleZRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleZ branch of the layout chain
OceanMonumentPieces.FitDoubleZRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleZ branch condition
OceanMonumentPieces.FitSimpleTopRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new SimpleTop branch: no openings
OceanMonumentPieces.OceanMonumentCoreRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Core arm
OceanMonumentPieces.OceanMonumentDoubleXRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleX arm
OceanMonumentPieces.OceanMonumentDoubleXYRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleXY arm
OceanMonumentPieces.OceanMonumentDoubleYRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleY arm
OceanMonumentPieces.OceanMonumentDoubleYZRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleYZ arm
OceanMonumentPieces.OceanMonumentDoubleZRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleZ arm
OceanMonumentPieces.OceanMonumentEntryRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Entry arm
OceanMonumentPieces.OceanMonumentPenthouse.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Penthouse arm
OceanMonumentPieces.OceanMonumentSimpleRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Simple arm
OceanMonumentPieces.OceanMonumentSimpleTopRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room SimpleTop arm
OceanMonumentPieces.OceanMonumentWingRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Wing arms
OceanMonumentPieces.RoomDefinition.countOpenings inline crates/horizon-world/src/worldgen/structure/monument.rs::room count of open sides inside the Simple arm
OceanMonumentPieces.RoomDefinition.findSource port crates/horizon-world/src/worldgen/structure/monument.rs::Graph::find_source
OceanMonumentPieces.RoomDefinition.setConnection port crates/horizon-world/src/worldgen/structure/monument.rs::Graph::connect
OceanMonumentPieces.RoomDefinition.updateOpenings port crates/horizon-world/src/worldgen/structure/monument.rs::Graph::update_openings
OceanRuinStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate OceanRuin arm
OceanRuinStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate OceanRuin arm
ShipwreckStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Shipwreck arm: world surface when beached
ShipwreckStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Shipwreck arm, including the too-big height
SwampHutStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate SwampHut arm
AllOfRuleTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test All arm
AnyOfRuleTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test Any arm
AxisAlignedLinearPosTest.test port crates/horizon-world/src/worldgen/structure/processor.rs::PosRule::test Linear arm with an axis
BlockAgeProcessor.getRandomBlock inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age random pick inside the mossy branch
BlockAgeProcessor.getRandomFacingStairs inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age random stairs with facing, inside the stairs branch
BlockAgeProcessor.maybeReplaceFullStoneBlock inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age full stone branch
BlockAgeProcessor.maybeReplaceSlab inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age slab branch
BlockAgeProcessor.maybeReplaceStairs inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age stairs branch
BlockAgeProcessor.maybeReplaceWall inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age wall branch
BlockAgeProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block BlockAge arm calls block_age
BlockIgnoreProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block BlockIgnore arm
BlockRotProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block BlockRot arm
CappedProcessor.finalizeProcessing inline crates/horizon-world/src/worldgen/structure/processor.rs::process_infos post-pass over the Capped processors, after the block loop
GravityProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Gravity arm
HeightMatchTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test Height arm
LavaSubmergedBlockProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block LavaSubmerged arm
LinearPosTest.test port crates/horizon-world/src/worldgen/structure/processor.rs::PosRule::test Linear arm
NotRuleTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test Not arm
ProcessorRule.test port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Rule arm: input, location and position tests
ProtectedBlockProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Protected arm
RandomBlockMatchTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test RandomStates arm
RandomBlockStateMatchTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test RandomState arm
RuleProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Rule arm
RuleTest.either skip:java builder over allOf, anyOf and not; bundled data holds the expanded form
DirectoryTemplateSource skip:data loads templates from a datapack folder; Horizon reads its prepared template bundle (structure.rs StructureResources::template)
ResourceManagerTemplateSource skip:data loads templates through the resource manager; Horizon reads its prepared template bundle
TemplatePathFactory skip:data builds file paths for template loading; Horizon reads a prepared bundle
TemplateSource skip:data template file loading and SNBT reading; Horizon reads a prepared bundle
AppendLoot.apply port crates/horizon-world/src/worldgen/structure/processor.rs::Modifier::apply AppendLoot arm
AppendStatic.apply port crates/horizon-world/src/worldgen/structure/processor.rs::Modifier::apply AppendStatic arm
GradientNoise.wrap port crates/horizon-core/src/noise/mod.rs::wrap Far Lands off
GradientNoise.Gradient.dot port crates/horizon-core/src/noise/mod.rs::dot 3D dot of a gradient
GradientNoise.Gradient.dotXz inline crates/horizon-core/src/noise/perlin.rs::SmearedPerlinNoise::get2 2D dot: get2 samples the 3D corner dots at y 0; no separate dotXz
LegacyFbmInitializer.createForLegacyNetherBiome port crates/horizon-core/src/noise/normal.rs::create_legacy_fbm
NoiseUtils.biasTowardsExtreme skip:other no caller in the vanilla 26.3 sources
NoiseUtils.parityNoiseOctaveConfigString skip:debug debug text
BlockLightEngine.checkNode inline crates/horizon-client/src/light.rs::relight_layer neighbour checks in both passes
BlockLightEngine.getEmission port crates/horizon-client/src/light.rs::LightTables::emission
BlockLightEngine.propagateDecrease port crates/horizon-client/src/light.rs::relight_layer decrease pass, sky false
BlockLightEngine.propagateIncrease port crates/horizon-client/src/light.rs::relight_layer increase pass, sky false
BlockLightEngine.propagateLightSources inline crates/horizon-client/src/light.rs::relight_layer emission seeds for cleared cells
BlockLightSectionStorage.getLightValue port crates/horizon-client/src/light.rs::level
DataLayerStorageMap skip:java cache of light data layers keyed by section
DynamicGraphMinFixedPoint.checkEdge inline crates/horizon-client/src/light.rs::relight_layer edge test inside the passes
DynamicGraphMinFixedPoint.checkNeighbor inline crates/horizon-client/src/light.rs::relight_layer neighbour test inside the passes
DynamicGraphMinFixedPoint.removeFromQueue skip:java queue bookkeeping; the passes never remove queued entries
DynamicGraphMinFixedPoint.removeIf skip:java queue bookkeeping
DynamicGraphMinFixedPoint.runUpdates port crates/horizon-client/src/light.rs::relight_layer runs the decrease and increase passes
LayerLightSectionStorage skip:other per-section light data bookkeeping; Horizon keeps light in chunk sections (light.rs apply_lighting, light_chunk)
LayerLightSectionStorage.SectionState skip:other section state flags of the light storage; no Horizon equivalent needed
LeveledPriorityQueue skip:java priority queue of light levels; relight_layer runs two FIFO passes
SkyLightEngine.addSourcesAbove inline crates/horizon-client/src/light.rs::relight_region column sources loop
SkyLightEngine.checkNode inline crates/horizon-client/src/light.rs::relight_layer neighbour checks in the sky passes
SkyLightEngine.countEmptySectionsBelowIfAtBorder skip:java shortcut over empty sections; Horizon relights a region directly
SkyLightEngine.crossedSectionEdge port crates/horizon-client/src/light.rs::LightChanges::class edge flags of a changed cell
SkyLightEngine.getChunkSources skip:java per-chunk source cache; lowest_sky_source computes each column on demand
SkyLightEngine.getLowestSourceY port crates/horizon-client/src/light.rs::lowest_sky_source
SkyLightEngine.propagateDecrease port crates/horizon-client/src/light.rs::relight_layer decrease pass, sky true
SkyLightEngine.propagateFromEmptySections inline crates/horizon-client/src/light.rs::relight_region sky seeds below the source in each column
SkyLightEngine.propagateIncrease port crates/horizon-client/src/light.rs::relight_layer increase pass, sky true
SkyLightEngine.propagateLightSources inline crates/horizon-client/src/light.rs::relight_layer sky sources inside the cleared area
SkyLightEngine.removeSourcesBelow inline crates/horizon-client/src/light.rs::relight_region column sources loop
SkyLightEngine.setLightEnabled skip:other light is computed when a chunk loads (light_chunk); no per-chunk enable flag
SkyLightSectionStorage skip:other sky data layer bookkeeping per section; Horizon keeps light in chunk sections
SkyLightSectionStorage.SkyDataLayerStorageMap skip:java copy of sky data layers; collection plumbing
SpatialLongSet.InternalMap skip:java hash set internals for section positions
NodeEvaluator.getNode port crates/horizon-client/src/mobs/path.rs::Finder::node
NodeEvaluator.getPathType port crates/horizon-client/src/mobs/path.rs::Finder::path_type
NodeEvaluator.getTargetNodeAt port crates/horizon-client/src/mobs/path.rs::Finder::node target lookup is the same arena lookup
NodeEvaluator.prepare port crates/horizon-client/src/mobs/path.rs::Finder::new per-query state
PathTypeCache.compute port crates/horizon-client/src/mobs/path.rs::Finder::compute_path_type
PathTypeCache.get port crates/horizon-client/src/mobs/path.rs::Finder::cached
PathTypeCache.getOrCompute port crates/horizon-client/src/mobs/path.rs::Finder::cached
PathTypeCache.invalidate skip:java the cache lives for one query, so nothing is invalidated
SwimNodeEvaluator.findAcceptedNode port crates/horizon-client/src/mobs/path.rs::Finder::swim_accepted
SwimNodeEvaluator.getCachedBlockType port crates/horizon-client/src/mobs/path.rs::Finder::cached
SwimNodeEvaluator.getNeighbors port crates/horizon-client/src/mobs/path.rs::Finder::swim_neighbors
SwimNodeEvaluator.getPathTypeOfMob port crates/horizon-client/src/mobs/path.rs::Finder::path_type_of_mob
SwimNodeEvaluator.getStart port crates/horizon-client/src/mobs/path.rs::Finder::start Swim arm
SwimNodeEvaluator.hasMalus inline crates/horizon-client/src/mobs/path.rs::Finder::swim_neighbors diagonal check on both sides
CollectingNeighborUpdater.addAndRun port crates/horizon-world/src/level/update.rs::Sim::add_and_run
CollectingNeighborUpdater.neighborChanged port crates/horizon-world/src/level/update.rs::Sim::neighbor_changed_at Simple update
CollectingNeighborUpdater.runUpdates port crates/horizon-world/src/level/update.rs::Sim::run_updates
CollectingNeighborUpdater.shapeUpdate port crates/horizon-world/src/level/update.rs::Sim::neighbor_shape_changed
CollectingNeighborUpdater.updateNeighborsAtExceptFromFacing port crates/horizon-world/src/level/update.rs::Sim::update_neighbors_at_except
CollectingNeighborUpdater.FullNeighborUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Full arm
CollectingNeighborUpdater.MultiNeighborUpdate.forEachUpdatedPos inline crates/horizon-world/src/level/update.rs::Update::next Multi arm steps the index and skips the facing side
CollectingNeighborUpdater.MultiNeighborUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Multi arm
CollectingNeighborUpdater.ShapeUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Shape arm
CollectingNeighborUpdater.SimpleNeighborUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Simple arm
ExperimentalRedstoneUtils.initialOrientation skip:other returns null unless the Redstone Experiments feature flag is on; Horizon has no such flag
1 RepeatingPlacement.modify port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner repeat arm for Count and the noise counts emits the count
2 SurfaceRelativeThresholdFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner SurfaceRelative arm: y between heightmap plus min and max
3 SurfaceWaterDepthFilter.shouldPlace port crates/horizon-world/src/worldgen/placement.rs::PlacementModifier::modify_inner SurfaceWaterDepth arm
4 WorldPreset skip:data data-pack preset record; bundled world_presets carry the dimensions and generator.rs builds one dimension by name
5 WorldPresets.fromSettings skip:data names a preset from its dimensions; Horizon loads presets by name
6 WorldPresets.getNormalOverworld port crates/horizon-world/src/worldgen/generator.rs::OverworldGenerator::new builds the normal preset's overworld directly; no LevelStem object
7 WorldPresets.Bootstrap skip:data datagen bootstrap that registers the presets
8 SinglePieceStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate DesertPyramid/JungleTemple arm: valid biome, sea-level check, stub on the surface
9 SinglePieceStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate same arm builds the piece at the chunk corner
10 structure/StructureCheck.canCreateStructure port crates/horizon-world/src/worldgen/structure/start.rs::try_generate no start when the arm returns None
11 structure/StructureCheck.checkStart missing player: an explorer map (skip_existing_chunks, default on) can point at a structure the player already reached; the reference check is not ported
12 structure/StructureCheck.checkStructureInfo missing player: requireUnreferenced is ignored, so explorer maps do not skip known structures (see checkStart)
13 structure/StructureCheck.incrementReference missing player: no reference counts per chunk, so explorer maps do not skip structures already reached
14 structure/StructureCheck.loadStructures skip:other reads saved starts for the storage cache; Horizon places saved starts with use_saved_start
15 structure/StructureCheck.onStructureLoad missing player: starts loaded in a chunk do not record references (see incrementReference)
16 structure/StructureCheck.storeFullResults skip:other cache write for the storage check
17 structure/StructureCheck.tryLoadFromStorage skip:other chunk NBT scan for the storage cache; Horizon places saved starts with use_saved_start
18 PiecesContainer.isInsidePiece inline crates/horizon-world/src/worldgen/generator_decoration.rs::World::add_entity start-piece box test that feeds the mob finalize hook
19 PiecesContainer.load port crates/horizon-world/src/worldgen/generator_structures.rs::StructureState::use_saved_start gap: minor: only jigsaw pool pieces are read back; legacy piece types are not
20 PiecesContainer.save port crates/horizon-world/src/worldgen/structure/start.rs::StructureStart::save writes the Children list of the start
21 StructurePieceSerializationContext skip:java record bundling server services for piece NBT; Horizon passes its resources explicitly
22 StructurePiecesBuilder.moveBelowSeaLevel inline crates/horizon-world/src/worldgen/structure/mineshaft.rs::generate sea-level drop of the pieces; stronghold::generate has the same step
23 StructurePiecesBuilder.offsetPiecesVertically inline crates/horizon-world/src/worldgen/structure/mineshaft.rs::generate moves every piece by the same dy
24 AbstractSpreadingStructurePlacement.applyAdditionalChunkRestrictions inline crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::structure_chunk frequency reduction step of the chunk test
25 AbstractSpreadingStructurePlacement.applyInteractionsWithOtherStructures inline crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::structure_chunk exclusion zone and avoid checks
26 AbstractSpreadingStructurePlacement.isStructureChunk port crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::is_structure_chunk
27 AbstractSpreadingStructurePlacement.legacyArbitrarySaltProbabilityReducer port crates/horizon-world/src/worldgen/structure/start.rs::reduce Legacy2 arm
28 AbstractSpreadingStructurePlacement.legacyPillagerOutpostReducer port crates/horizon-world/src/worldgen/structure/start.rs::reduce Legacy1 arm
29 AbstractSpreadingStructurePlacement.legacyProbabilityReducerWithDouble port crates/horizon-world/src/worldgen/structure/start.rs::reduce Legacy3 arm
30 AbstractSpreadingStructurePlacement.probabilityReducer port crates/horizon-world/src/worldgen/structure/start.rs::reduce Default arm
31 ConcentricRingsStructurePlacement.isPlacementChunk port crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::structure_chunk ConcentricRings arm: chunk must be in the set's ring positions
32 DimensionOriginStructurePlacement missing minor: dimension_origin placement decodes as Unsupported in start.rs, so such a structure never places; no bundled structure file in the repo uses it
33 RandomSpreadType.evaluate inline crates/horizon-world/src/worldgen/structure/start.rs::StructureRegistry::potential_chunk spread closure: linear, or triangular as the mean of two draws
34 StructurePlacements skip:data registers placement codecs; Horizon decodes placement type names in start.rs
35 FeaturePoolElement.getBoundingBox port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::bounding_box Feature arm, zero size
36 FeaturePoolElement.getShuffledJigsawBlocks port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::shuffled_jigsaws Feature arm: one rollable empty jigsaw
37 JigsawJunction.equals skip:java value equality
38 JigsawJunction.hashCode skip:java hashing for Java collections
39 JigsawJunction.toString skip:debug debug text
40 LegacySinglePoolElement.getSettings port crates/horizon-world/src/worldgen/structure/jigsaw.rs::place_element Single arm, legacy branch: structure-block ignore is replaced by structure and air ignore after jigsaw replacement
41 ListPoolElement.getBoundingBox port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::bounding_box List arm, skips empty elements
42 ListPoolElement.getShuffledJigsawBlocks port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::shuffled_jigsaws List arm: first element only
43 ListPoolElement.getSize port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::size List arm: per-axis maximum
44 ListPoolElement.place port crates/horizon-world/src/worldgen/structure/jigsaw.rs::place_element List arm
45 ListPoolElement.setProjectionOnEachElement port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::decode children take the list's projection while decoding
46 ListPoolElement.toString skip:debug debug text
47 StructurePoolElement.getProjection port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::projection
48 StructurePoolElement.legacy port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::decode legacy_single_pool_element kind
49 StructurePoolElement.single port crates/horizon-world/src/worldgen/structure/jigsaw.rs::PoolElement::decode single_pool_element kind
50 StructureTemplatePool.<init> port crates/horizon-world/src/worldgen/structure/jigsaw.rs::Pools::get builds each Pool from its raw templates
51 StructureTemplatePool.getMaxSize port crates/horizon-world/src/worldgen/structure/jigsaw.rs::Pool::max_size
52 StructureTemplatePool.getRandomTemplate port crates/horizon-world/src/worldgen/structure/jigsaw.rs::Pool::random_template
53 PoolAliasBinding.direct port crates/horizon-world/src/worldgen/structure/start.rs::resolve_aliases minecraft:direct arm
54 PoolAliasBinding.random port crates/horizon-world/src/worldgen/structure/start.rs::resolve_aliases minecraft:random arm: weighted pick
55 PoolAliasBindings skip:data datagen bootstrap that registers alias targets as pools
56 RandomGroupPoolAlias.allTargets skip:data lists alias targets for bootstrap registration
57 RandomGroupPoolAlias.forEachResolved port crates/horizon-world/src/worldgen/structure/start.rs::resolve_aliases minecraft:random_group arm
58 BuriedTreasureStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate BuriedTreasure arm
59 EndCityStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate EndCity arm: biome column and height checks
60 EndCityStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate EndCity arm calls end_city::pieces
61 IglooStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Igloo arm
62 IglooStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Igloo arm
63 JigsawStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Jigsaw arm: start height, checks, assembly
64 JigsawStructure.verifyRange skip:java codec validation of the size limit
65 NetherFortressPieces.findAndCreateBridgePieceFactory port crates/horizon-world/src/worldgen/structure/fortress.rs::Builder::create Kind dispatch to the bridge piece
66 NetherFortressPieces.PieceWeight.doPlace inline crates/horizon-world/src/worldgen/structure/fortress.rs::Builder::generate_piece placement check: max is 0 or count below max
67 NetherFortressPieces.PieceWeight.isValid inline crates/horizon-world/src/worldgen/structure/fortress.rs::Builder::generate_piece entry is dropped once count reaches max
68 OceanMonumentPieces.FitDoubleXRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleX branch of the layout chain
69 OceanMonumentPieces.FitDoubleXRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleX branch condition
70 OceanMonumentPieces.FitDoubleXYRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleXY branch of the layout chain
71 OceanMonumentPieces.FitDoubleXYRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleXY branch condition
72 OceanMonumentPieces.FitDoubleYRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleY branch of the layout chain
73 OceanMonumentPieces.FitDoubleYRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleY branch condition
74 OceanMonumentPieces.FitDoubleYZRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleYZ branch of the layout chain
75 OceanMonumentPieces.FitDoubleYZRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleYZ branch condition
76 OceanMonumentPieces.FitDoubleZRoom.create inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleZ branch of the layout chain
77 OceanMonumentPieces.FitDoubleZRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new DoubleZ branch condition
78 OceanMonumentPieces.FitSimpleTopRoom.fits inline crates/horizon-world/src/worldgen/structure/monument.rs::MonumentBuilding::new SimpleTop branch: no openings
79 OceanMonumentPieces.OceanMonumentCoreRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Core arm
80 OceanMonumentPieces.OceanMonumentDoubleXRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleX arm
81 OceanMonumentPieces.OceanMonumentDoubleXYRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleXY arm
82 OceanMonumentPieces.OceanMonumentDoubleYRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleY arm
83 OceanMonumentPieces.OceanMonumentDoubleYZRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleYZ arm
84 OceanMonumentPieces.OceanMonumentDoubleZRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room DoubleZ arm
85 OceanMonumentPieces.OceanMonumentEntryRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Entry arm
86 OceanMonumentPieces.OceanMonumentPenthouse.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Penthouse arm
87 OceanMonumentPieces.OceanMonumentSimpleRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Simple arm
88 OceanMonumentPieces.OceanMonumentSimpleTopRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room SimpleTop arm
89 OceanMonumentPieces.OceanMonumentWingRoom.postProcess port crates/horizon-world/src/worldgen/structure/monument.rs::room Wing arms
90 OceanMonumentPieces.RoomDefinition.countOpenings inline crates/horizon-world/src/worldgen/structure/monument.rs::room count of open sides inside the Simple arm
91 OceanMonumentPieces.RoomDefinition.findSource port crates/horizon-world/src/worldgen/structure/monument.rs::Graph::find_source
92 OceanMonumentPieces.RoomDefinition.setConnection port crates/horizon-world/src/worldgen/structure/monument.rs::Graph::connect
93 OceanMonumentPieces.RoomDefinition.updateOpenings port crates/horizon-world/src/worldgen/structure/monument.rs::Graph::update_openings
94 OceanRuinStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate OceanRuin arm
95 OceanRuinStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate OceanRuin arm
96 ShipwreckStructure.findGenerationPoint port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Shipwreck arm: world surface when beached
97 ShipwreckStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate Shipwreck arm, including the too-big height
98 SwampHutStructure.generatePieces port crates/horizon-world/src/worldgen/structure/start.rs::try_generate SwampHut arm
99 AllOfRuleTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test All arm
100 AnyOfRuleTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test Any arm
101 AxisAlignedLinearPosTest.test port crates/horizon-world/src/worldgen/structure/processor.rs::PosRule::test Linear arm with an axis
102 BlockAgeProcessor.getRandomBlock inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age random pick inside the mossy branch
103 BlockAgeProcessor.getRandomFacingStairs inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age random stairs with facing, inside the stairs branch
104 BlockAgeProcessor.maybeReplaceFullStoneBlock inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age full stone branch
105 BlockAgeProcessor.maybeReplaceSlab inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age slab branch
106 BlockAgeProcessor.maybeReplaceStairs inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age stairs branch
107 BlockAgeProcessor.maybeReplaceWall inline crates/horizon-world/src/worldgen/structure/processor.rs::block_age wall branch
108 BlockAgeProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block BlockAge arm calls block_age
109 BlockIgnoreProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block BlockIgnore arm
110 BlockRotProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block BlockRot arm
111 CappedProcessor.finalizeProcessing inline crates/horizon-world/src/worldgen/structure/processor.rs::process_infos post-pass over the Capped processors, after the block loop
112 GravityProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Gravity arm
113 HeightMatchTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test Height arm
114 LavaSubmergedBlockProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block LavaSubmerged arm
115 LinearPosTest.test port crates/horizon-world/src/worldgen/structure/processor.rs::PosRule::test Linear arm
116 NotRuleTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test Not arm
117 ProcessorRule.test port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Rule arm: input, location and position tests
118 ProtectedBlockProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Protected arm
119 RandomBlockMatchTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test RandomStates arm
120 RandomBlockStateMatchTest.test port crates/horizon-world/src/worldgen/rule_test.rs::RuleTest::test RandomState arm
121 RuleProcessor.processBlock port crates/horizon-world/src/worldgen/structure/processor.rs::process_block Rule arm
122 RuleTest.either skip:java builder over allOf, anyOf and not; bundled data holds the expanded form
123 DirectoryTemplateSource skip:data loads templates from a datapack folder; Horizon reads its prepared template bundle (structure.rs StructureResources::template)
124 ResourceManagerTemplateSource skip:data loads templates through the resource manager; Horizon reads its prepared template bundle
125 TemplatePathFactory skip:data builds file paths for template loading; Horizon reads a prepared bundle
126 TemplateSource skip:data template file loading and SNBT reading; Horizon reads a prepared bundle
127 AppendLoot.apply port crates/horizon-world/src/worldgen/structure/processor.rs::Modifier::apply AppendLoot arm
128 AppendStatic.apply port crates/horizon-world/src/worldgen/structure/processor.rs::Modifier::apply AppendStatic arm
129 GradientNoise.wrap port crates/horizon-core/src/noise/mod.rs::wrap Far Lands off
130 GradientNoise.Gradient.dot port crates/horizon-core/src/noise/mod.rs::dot 3D dot of a gradient
131 GradientNoise.Gradient.dotXz inline crates/horizon-core/src/noise/perlin.rs::SmearedPerlinNoise::get2 2D dot: get2 samples the 3D corner dots at y 0; no separate dotXz
132 LegacyFbmInitializer.createForLegacyNetherBiome port crates/horizon-core/src/noise/normal.rs::create_legacy_fbm
133 NoiseUtils.biasTowardsExtreme skip:other no caller in the vanilla 26.3 sources
134 NoiseUtils.parityNoiseOctaveConfigString skip:debug debug text
135 BlockLightEngine.checkNode inline crates/horizon-client/src/light.rs::relight_layer neighbour checks in both passes
136 BlockLightEngine.getEmission port crates/horizon-client/src/light.rs::LightTables::emission
137 BlockLightEngine.propagateDecrease port crates/horizon-client/src/light.rs::relight_layer decrease pass, sky false
138 BlockLightEngine.propagateIncrease port crates/horizon-client/src/light.rs::relight_layer increase pass, sky false
139 BlockLightEngine.propagateLightSources inline crates/horizon-client/src/light.rs::relight_layer emission seeds for cleared cells
140 BlockLightSectionStorage.getLightValue port crates/horizon-client/src/light.rs::level
141 DataLayerStorageMap skip:java cache of light data layers keyed by section
142 DynamicGraphMinFixedPoint.checkEdge inline crates/horizon-client/src/light.rs::relight_layer edge test inside the passes
143 DynamicGraphMinFixedPoint.checkNeighbor inline crates/horizon-client/src/light.rs::relight_layer neighbour test inside the passes
144 DynamicGraphMinFixedPoint.removeFromQueue skip:java queue bookkeeping; the passes never remove queued entries
145 DynamicGraphMinFixedPoint.removeIf skip:java queue bookkeeping
146 DynamicGraphMinFixedPoint.runUpdates port crates/horizon-client/src/light.rs::relight_layer runs the decrease and increase passes
147 LayerLightSectionStorage skip:other per-section light data bookkeeping; Horizon keeps light in chunk sections (light.rs apply_lighting, light_chunk)
148 LayerLightSectionStorage.SectionState skip:other section state flags of the light storage; no Horizon equivalent needed
149 LeveledPriorityQueue skip:java priority queue of light levels; relight_layer runs two FIFO passes
150 SkyLightEngine.addSourcesAbove inline crates/horizon-client/src/light.rs::relight_region column sources loop
151 SkyLightEngine.checkNode inline crates/horizon-client/src/light.rs::relight_layer neighbour checks in the sky passes
152 SkyLightEngine.countEmptySectionsBelowIfAtBorder skip:java shortcut over empty sections; Horizon relights a region directly
153 SkyLightEngine.crossedSectionEdge port crates/horizon-client/src/light.rs::LightChanges::class edge flags of a changed cell
154 SkyLightEngine.getChunkSources skip:java per-chunk source cache; lowest_sky_source computes each column on demand
155 SkyLightEngine.getLowestSourceY port crates/horizon-client/src/light.rs::lowest_sky_source
156 SkyLightEngine.propagateDecrease port crates/horizon-client/src/light.rs::relight_layer decrease pass, sky true
157 SkyLightEngine.propagateFromEmptySections inline crates/horizon-client/src/light.rs::relight_region sky seeds below the source in each column
158 SkyLightEngine.propagateIncrease port crates/horizon-client/src/light.rs::relight_layer increase pass, sky true
159 SkyLightEngine.propagateLightSources inline crates/horizon-client/src/light.rs::relight_layer sky sources inside the cleared area
160 SkyLightEngine.removeSourcesBelow inline crates/horizon-client/src/light.rs::relight_region column sources loop
161 SkyLightEngine.setLightEnabled skip:other light is computed when a chunk loads (light_chunk); no per-chunk enable flag
162 SkyLightSectionStorage skip:other sky data layer bookkeeping per section; Horizon keeps light in chunk sections
163 SkyLightSectionStorage.SkyDataLayerStorageMap skip:java copy of sky data layers; collection plumbing
164 SpatialLongSet.InternalMap skip:java hash set internals for section positions
165 NodeEvaluator.getNode port crates/horizon-client/src/mobs/path.rs::Finder::node
166 NodeEvaluator.getPathType port crates/horizon-client/src/mobs/path.rs::Finder::path_type
167 NodeEvaluator.getTargetNodeAt port crates/horizon-client/src/mobs/path.rs::Finder::node target lookup is the same arena lookup
168 NodeEvaluator.prepare port crates/horizon-client/src/mobs/path.rs::Finder::new per-query state
169 PathTypeCache.compute port crates/horizon-client/src/mobs/path.rs::Finder::compute_path_type
170 PathTypeCache.get port crates/horizon-client/src/mobs/path.rs::Finder::cached
171 PathTypeCache.getOrCompute port crates/horizon-client/src/mobs/path.rs::Finder::cached
172 PathTypeCache.invalidate skip:java the cache lives for one query, so nothing is invalidated
173 SwimNodeEvaluator.findAcceptedNode port crates/horizon-client/src/mobs/path.rs::Finder::swim_accepted
174 SwimNodeEvaluator.getCachedBlockType port crates/horizon-client/src/mobs/path.rs::Finder::cached
175 SwimNodeEvaluator.getNeighbors port crates/horizon-client/src/mobs/path.rs::Finder::swim_neighbors
176 SwimNodeEvaluator.getPathTypeOfMob port crates/horizon-client/src/mobs/path.rs::Finder::path_type_of_mob
177 SwimNodeEvaluator.getStart port crates/horizon-client/src/mobs/path.rs::Finder::start Swim arm
178 SwimNodeEvaluator.hasMalus inline crates/horizon-client/src/mobs/path.rs::Finder::swim_neighbors diagonal check on both sides
179 CollectingNeighborUpdater.addAndRun port crates/horizon-world/src/level/update.rs::Sim::add_and_run
180 CollectingNeighborUpdater.neighborChanged port crates/horizon-world/src/level/update.rs::Sim::neighbor_changed_at Simple update
181 CollectingNeighborUpdater.runUpdates port crates/horizon-world/src/level/update.rs::Sim::run_updates
182 CollectingNeighborUpdater.shapeUpdate port crates/horizon-world/src/level/update.rs::Sim::neighbor_shape_changed
183 CollectingNeighborUpdater.updateNeighborsAtExceptFromFacing port crates/horizon-world/src/level/update.rs::Sim::update_neighbors_at_except
184 CollectingNeighborUpdater.FullNeighborUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Full arm
185 CollectingNeighborUpdater.MultiNeighborUpdate.forEachUpdatedPos inline crates/horizon-world/src/level/update.rs::Update::next Multi arm steps the index and skips the facing side
186 CollectingNeighborUpdater.MultiNeighborUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Multi arm
187 CollectingNeighborUpdater.ShapeUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Shape arm
188 CollectingNeighborUpdater.SimpleNeighborUpdate.runNext port crates/horizon-world/src/level/update.rs::Update::next Simple arm
189 ExperimentalRedstoneUtils.initialOrientation skip:other returns null unless the Redstone Experiments feature flag is on; Horizon has no such flag
+154
View File
@@ -0,0 +1,154 @@
ExperimentalRedstoneWireEvaluator missing minor: only worlds with the Redstone Experiments flag use this evaluator; Horizon has no experimental wire evaluator
InstantNeighborUpdater skip:other never instantiated in vanilla 26.3; Level always uses CollectingNeighborUpdater
NeighborUpdater.executeShapeUpdate port crates/horizon-world/src/level/update.rs::Sim::execute Shape arm: wire skip flag, then update_shape and update_or_destroy
NeighborUpdater.executeUpdate port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed per-block neighbour change dispatch
NeighborUpdater.updateNeighborsAtExceptFromFacing port crates/horizon-world/src/level/update.rs::Sim::update_neighbors_at_except
Orientation.<init> skip:java constructor of the experimental redstone orientation value
Orientation.generateContext missing minor: builds the orientation lookup of the experimental wire evaluator only
Orientation.generateIndex skip:java index arithmetic for the orientation table
Orientation.toString skip:debug debug string
Orientation.withFrontAdjustSideBias missing minor: experimental redstone orientation transform; only the experimental evaluator uses it
Orientation.withFrontPreserveUp missing minor: experimental redstone orientation transform; only the experimental evaluator uses it
RedstoneWireEvaluator.getIncomingWireSignal port crates/horizon-world/src/level/redstone.rs::Sim::wire_incoming_signal
RedstoneWireEvaluator.getWireSignal port crates/horizon-world/src/level/redstone.rs::Sim::wire_power_of
SavedDataType skip:java equals over the saved-data type record; Horizon keys saved data by name
WanderingTraderData.setSpawnChance inline crates/horizon-client/src/game/wandering_trader.rs::Game::tick_wandering_trader field write of spawn_chance inside the tick; no setter
WanderingTraderData.setSpawnDelay inline crates/horizon-client/src/game/wandering_trader.rs::Game::tick_wandering_trader field write of spawn_delay inside the tick; no setter
MapBanner.fromWorld missing player: using a map on a placed banner adds no banner marker to the map (MapItem.useOn toggle is not ported)
MapBanner.getDecoration missing player: banner markers would show the dye colour icon; maps.rs has no banner decoration types
MapBanner.getId missing minor: key string of a banner marker, only used by the marker feature
MapDecorationTypes skip:data registry of map decoration types; maps.rs keeps its own DECORATION_TYPES table
MapId.addToTooltip missing player: map tooltips show no 'Map #id', 'Locked' or advanced scale lines
MapIndex.getNextMapId port crates/horizon-client/src/game/maps.rs::Game::next_map_id
DerivedLevelData skip:debug crash report category
LevelData skip:debug crash report category
LevelStorageSource.createAccess port crates/horizon-client/src/save.rs::SessionLock::acquire gap: minor: takes the folder's session lock; there is no separate access object
LevelStorageSource.createDefault skip:java factory for the source with its symlink validator
LevelStorageSource.findLevelCandidates inline crates/horizon-client/src/title.rs::list_worlds folders with a readable level.dat
LevelStorageSource.getFileModificationTime inline crates/horizon-client/src/title.rs::list_worlds level.dat mtime, used when LastPlayed is absent
LevelStorageSource.getLevelDataAndDimensions port crates/horizon-client/src/save.rs::Level::read gap: minor: reads level.dat; dimension and world-gen registry setup happen elsewhere
LevelStorageSource.isNewLevelIdAcceptable port crates/horizon-client/src/title.rs::Title::target_folder gap: minor: sanitises the name and picks a free folder instead of rejecting it
LevelStorageSource.levelExists inline crates/horizon-client/src/title.rs::Title::target_folder folder-exists check
LevelStorageSource.loadLevelSummaries port crates/horizon-client/src/title.rs::list_worlds
LevelStorageSource.makeLevelSummary inline crates/horizon-client/src/title.rs::list_worlds per-folder name, version, mode and last played
LevelStorageSource.parseFeatureFlagsFromSummary missing unsure: list_worlds does not read enabled_features, so experimental worlds are not flagged
LevelStorageSource.parseValidator skip:other symlink allow-list (allowed_symlinks.txt); Horizon does not read that file
LevelStorageSource.readDataConfig missing minor: the world's own enabled datapacks and features are not read back from level.dat
LevelSummary.backupStatus missing player: opening a world from an older version gives no 'back up first' prompt; the upgrade runs straight away (world_loading.rs)
LevelSummary.compareTo inline crates/horizon-client/src/title.rs::list_worlds newest first by last played
LevelSummary.createInfo missing unsure: row status text (locked, needs conversion) is not carried in WorldEntry
LevelSummary.getLevelName inline crates/horizon-client/src/title.rs::list_worlds WorldEntry.name
LevelSummary.getWorldVersionName inline crates/horizon-client/src/title.rs::list_worlds WorldEntry.version from Version.Name
LevelSummary.isDisabled missing unsure: list_worlds drops folders whose level.dat does not read instead of showing them disabled
LevelVersion.parse inline crates/horizon-client/src/title.rs::list_worlds reads Version.Name only
PrimaryLevelData.createTag port crates/horizon-client/src/save.rs::Level::write
PrimaryLevelData.setModdedInfo inline crates/horizon-client/src/save.rs::Level::write gap: minor: writes WasModded 0 and the brand list; there is no modded save state
PrimaryLevelData.stringCollectionToTag inline crates/horizon-client/src/save.rs::Level::write ServerBrands and DataPacks lists
PrimaryLevelData.writeLastPlayed inline crates/horizon-client/src/save.rs::Level::write LastPlayed
PrimaryLevelData.writeVersionHistory inline crates/horizon-client/src/save.rs::Level::write version_history
PrimaryLevelData.writeVersionTag inline crates/horizon-client/src/save.rs::Level::write Version compound
ServerLevelData skip:debug crash report category
TagValueInput skip:java NBT read helpers; Horizon reads Tag values directly
TagValueInput.CompoundListWrapper skip:java NBT list wrapper; Horizon reads Tag values directly
TagValueInput.ListWrapper skip:java NBT list wrapper; Horizon reads Tag values directly
TagValueInput.TypedListWrapper skip:java NBT list wrapper; Horizon reads Tag values directly
TagValueOutput skip:java NBT write helpers; Horizon writes Tag values directly
TagValueOutput.ListWrapper skip:java NBT write wrapper
TagValueOutput.TypedListWrapper skip:java NBT write wrapper
WorldData skip:debug crash report category
BuiltInLootTables.register skip:data registers built-in loot table keys; Horizon reads tables from data files
ContainerComponentManipulator missing minor: set_contents and modify_contents, which no vanilla loot table uses
ContainerComponentManipulator.ComponentSlotCollection missing minor: slot helpers of set_contents and modify_contents, which no vanilla loot table uses
FloatRangePredicate.Line.createPredicate missing minor: float range with number-provider bounds; Horizon does not evaluate these bounds
FloatRangePredicate.Line.test missing minor: float range check with number-provider bounds
FloatRangePredicate.Line.validate skip:data validation at datapack load
IntLimit.createLimiter port crates/horizon-world/src/loot.rs::Context::run gap: minor: limit_count arm reads literal min and max only
IntLimit.validate skip:data validation at datapack load
IntRangePredicate.Line.createPredicate inline crates/horizon-world/src/loot.rs::int_bounds gap: minor: literal bounds only; number-provider bounds are not evaluated
IntRangePredicate.Line.test port crates/horizon-world/src/loot.rs::int_bounds gap: minor: literal bounds only
IntRangePredicate.Line.validate skip:data validation at datapack load
LootContextArg.ArgCodecBuilder skip:java codec builders for context arguments
LootContextArg.Getter.get skip:java codec getter for a context argument
LootDataType skip:data validation of loot data at datapack load
LootParams.addDynamicDrops port crates/horizon-client/src/game/spill.rs::Pending::dynamic gap: minor: decorated pot sherds only; shulker contents are attached by Pending::attach
LootParams.Builder skip:java builder for loot params
Validatable skip:data validation at datapack load
ValidationContext skip:data validation at datapack load
ValidationContextSource skip:data validation at datapack load
AlternativesEntry.alternatives skip:java builder
AlternativesEntry.compose port crates/horizon-world/src/loot.rs::Context::expand alternatives arm
AlternativesEntry.validate skip:data validation at datapack load
ComposableEntryContainer skip:java container combinators; Horizon expands entries in Context::expand
CompositeEntryBase.createCodec skip:java codec
CompositeEntryBase.validate skip:data validation at datapack load
DynamicLoot.dynamicEntry skip:java builder
EntryGroup.compose port crates/horizon-world/src/loot.rs::Context::expand group arm
ExpandableContainerBase.expandRaw inline crates/horizon-world/src/loot.rs::Context::expand expansion of raw entries
ExpandableContainerBase.expandableFields skip:java codec fields
NestedLootTable.addExpandedEntries inline crates/horizon-world/src/loot.rs::Context::expand loot_table arm
NestedLootTable.lootTableReference skip:java codec factory
SequentialEntry.compose port crates/horizon-world/src/loot.rs::Context::expand sequence arm
SlotLoot.createItemStack missing minor: slot entries (copies of container slot items); no vanilla loot table uses one
UniformContainerBase.uniformFields skip:java codec fields
UniformContainerBase.DummyBuilder.build skip:java builder
UniformContainerBase.EntryBase.getWeight inline crates/horizon-world/src/loot.rs::Context::add_random_item weight with luck, in add_random_item
ApplyBonusCount.addBonusBinomialDistributionCount skip:java builder
ApplyBonusCount.addUniformBonusCount skip:java builder
ApplyBonusCount.run port crates/horizon-items/src/items.rs::LootContext::modifiers apply_bonus arm
ApplyBonusCount.BinomialWithBonusCount.calculateNewCount inline crates/horizon-items/src/items.rs::LootContext::modifiers binomial_with_bonus_count formula
ApplyBonusCount.OreDrops.calculateNewCount inline crates/horizon-items/src/items.rs::LootContext::modifiers ore_drops formula
ApplyBonusCount.UniformBonusCount.calculateNewCount inline crates/horizon-items/src/items.rs::LootContext::modifiers uniform_bonus_count formula
ApplyExplosionDecay.run port crates/horizon-items/src/items.rs::LootContext::modifiers explosion_decay arm
CopyBlockState.run port crates/horizon-items/src/items.rs::LootContext::modifiers copy_state arm; copies the listed properties
CopyBlockState.Builder skip:java builder (build, copy)
CopyComponentsFunction.run port crates/horizon-client/src/game/spill.rs::Pending::record gap: minor: copies only what spill.rs keeps for block entities (shulker, banner, names, heads, bees)
CopyComponentsFunction.Builder skip:java builder (build, exclude, include)
CopyCustomDataFunction.run missing minor: no vanilla loot table or item modifier uses copy_custom_data
CopyCustomDataFunction.copyData skip:java builder factory
CopyCustomDataFunction.Builder.copy skip:java builder
CopyCustomDataFunction.CopyOperation.apply missing minor: part of copy_custom_data, which is not ported
CopyNameFunction.run missing minor: no vanilla loot table uses copy_name
EnchantedCountIncreaseFunction.run port crates/horizon-world/src/loot.rs::Context::run enchanted_count_increase arm
EnchantedCountIncreaseFunction.Builder.build skip:java builder
FillPlayerHead.run missing minor: no vanilla loot table uses fill_player_head
FilteredFunction.run port crates/horizon-world/src/loot.rs::Context::run filtered arm
FilteredFunction.Builder.build skip:java builder
FunctionUserBuilder skip:java builder interface (apply, buildFunction)
LimitCount.run port crates/horizon-world/src/loot.rs::Context::run gap: minor: limit_count arm reads literal min and max only
LootItemConditionalFunction.apply port crates/horizon-world/src/loot.rs::Context::modify condition check, then run
LootItemConditionalFunction.commonFields skip:java codec fields
LootItemFunction.decorate port crates/horizon-world/src/loot.rs::Context::modify function applied to a drop
ModifyContainerContents.run missing minor: no vanilla loot table uses modify_contents
SequenceFunction.compose port crates/horizon-world/src/loot.rs::Context::run sequence arm
SetAttributesFunction missing minor: set_attributes is not ported; no vanilla loot table uses it
SetAttributesFunction.ModifierBuilder.build skip:java builder
SetBannerPatternFunction.run missing minor: banner pattern layers from loot are not set; no vanilla loot table uses set_banner_pattern
SetBannerPatternFunction.Builder skip:java builder
SetBookCoverFunction.apply missing minor: no vanilla loot table uses set_book_cover
SetComponentsFunction.run port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: player: only /item modify runs it; loot tables (trial chamber copper trim) do not apply the components
SetComponentsFunction.setComponent skip:java builder factory
SetContainerContents.run missing minor: no vanilla loot table uses set_contents
SetContainerContents.Builder skip:java builder
SetContainerLootTable missing minor: no vanilla loot table uses set_loot_table
SetCustomDataFunction.run port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: minor: only /item modify runs it; no loot table uses set_custom_data
SetCustomModelDataFunction.apply missing minor: custom_model_data changes from loot; no vanilla loot table uses it
SetCustomModelDataFunction.run missing minor: custom_model_data changes from loot; no vanilla loot table uses it
SetCustomModelDataFunction.validate skip:data validation at datapack load
SetEnchantmentsFunction.run port crates/horizon-world/src/loot.rs::Context::run set_enchantments arm
SetEnchantmentsFunction.validate skip:data validation at datapack load
SetEnchantmentsFunction.Builder skip:java builder
SetFireworkExplosionFunction.apply missing minor: no vanilla loot table uses set_firework_explosion
SetFireworksFunction.apply missing minor: no vanilla loot table uses set_fireworks
SetInstrumentFunction.run port crates/horizon-world/src/loot.rs::Context::run gap: player: only draws the random option; the goat horn's instrument component is never set (pillager outpost horns)
SetItemCountFunction.run port crates/horizon-world/src/loot.rs::Context::run set_count arm
SetItemCountFunction.setCount skip:java builder factory
SetItemDamageFunction.run port crates/horizon-world/src/loot.rs::Context::run set_damage arm
SetItemDamageFunction.setDamage skip:java builder factory
SetLoreFunction.run port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: minor: only /item modify runs set_lore; no loot table uses it
SetLoreFunction.updateLore inline crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier set_lore arm, list_operation
SetLoreFunction.getReferencedContextParams skip:data validation of referenced context params
SetLoreFunction.Builder skip:java builder
SetOminousBottleAmplifierFunction.run port crates/horizon-world/src/loot.rs::Context::run set_ominous_bottle_amplifier arm
SetRandomDyesFunction.run port crates/horizon-client/src/merchant.rs::Trades::apply_modifier set_random_dyes arm
SetRandomPotionFunction.run port crates/horizon-client/src/merchant.rs::Trades::apply_modifier set_random_potion arm
SetStewEffectFunction.run port crates/horizon-world/src/loot.rs::Context::run set_stew_effect arm
1 ExperimentalRedstoneWireEvaluator missing minor: only worlds with the Redstone Experiments flag use this evaluator; Horizon has no experimental wire evaluator
2 InstantNeighborUpdater skip:other never instantiated in vanilla 26.3; Level always uses CollectingNeighborUpdater
3 NeighborUpdater.executeShapeUpdate port crates/horizon-world/src/level/update.rs::Sim::execute Shape arm: wire skip flag, then update_shape and update_or_destroy
4 NeighborUpdater.executeUpdate port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed per-block neighbour change dispatch
5 NeighborUpdater.updateNeighborsAtExceptFromFacing port crates/horizon-world/src/level/update.rs::Sim::update_neighbors_at_except
6 Orientation.<init> skip:java constructor of the experimental redstone orientation value
7 Orientation.generateContext missing minor: builds the orientation lookup of the experimental wire evaluator only
8 Orientation.generateIndex skip:java index arithmetic for the orientation table
9 Orientation.toString skip:debug debug string
10 Orientation.withFrontAdjustSideBias missing minor: experimental redstone orientation transform; only the experimental evaluator uses it
11 Orientation.withFrontPreserveUp missing minor: experimental redstone orientation transform; only the experimental evaluator uses it
12 RedstoneWireEvaluator.getIncomingWireSignal port crates/horizon-world/src/level/redstone.rs::Sim::wire_incoming_signal
13 RedstoneWireEvaluator.getWireSignal port crates/horizon-world/src/level/redstone.rs::Sim::wire_power_of
14 SavedDataType skip:java equals over the saved-data type record; Horizon keys saved data by name
15 WanderingTraderData.setSpawnChance inline crates/horizon-client/src/game/wandering_trader.rs::Game::tick_wandering_trader field write of spawn_chance inside the tick; no setter
16 WanderingTraderData.setSpawnDelay inline crates/horizon-client/src/game/wandering_trader.rs::Game::tick_wandering_trader field write of spawn_delay inside the tick; no setter
17 MapBanner.fromWorld missing player: using a map on a placed banner adds no banner marker to the map (MapItem.useOn toggle is not ported)
18 MapBanner.getDecoration missing player: banner markers would show the dye colour icon; maps.rs has no banner decoration types
19 MapBanner.getId missing minor: key string of a banner marker, only used by the marker feature
20 MapDecorationTypes skip:data registry of map decoration types; maps.rs keeps its own DECORATION_TYPES table
21 MapId.addToTooltip missing player: map tooltips show no 'Map #id', 'Locked' or advanced scale lines
22 MapIndex.getNextMapId port crates/horizon-client/src/game/maps.rs::Game::next_map_id
23 DerivedLevelData skip:debug crash report category
24 LevelData skip:debug crash report category
25 LevelStorageSource.createAccess port crates/horizon-client/src/save.rs::SessionLock::acquire gap: minor: takes the folder's session lock; there is no separate access object
26 LevelStorageSource.createDefault skip:java factory for the source with its symlink validator
27 LevelStorageSource.findLevelCandidates inline crates/horizon-client/src/title.rs::list_worlds folders with a readable level.dat
28 LevelStorageSource.getFileModificationTime inline crates/horizon-client/src/title.rs::list_worlds level.dat mtime, used when LastPlayed is absent
29 LevelStorageSource.getLevelDataAndDimensions port crates/horizon-client/src/save.rs::Level::read gap: minor: reads level.dat; dimension and world-gen registry setup happen elsewhere
30 LevelStorageSource.isNewLevelIdAcceptable port crates/horizon-client/src/title.rs::Title::target_folder gap: minor: sanitises the name and picks a free folder instead of rejecting it
31 LevelStorageSource.levelExists inline crates/horizon-client/src/title.rs::Title::target_folder folder-exists check
32 LevelStorageSource.loadLevelSummaries port crates/horizon-client/src/title.rs::list_worlds
33 LevelStorageSource.makeLevelSummary inline crates/horizon-client/src/title.rs::list_worlds per-folder name, version, mode and last played
34 LevelStorageSource.parseFeatureFlagsFromSummary missing unsure: list_worlds does not read enabled_features, so experimental worlds are not flagged
35 LevelStorageSource.parseValidator skip:other symlink allow-list (allowed_symlinks.txt); Horizon does not read that file
36 LevelStorageSource.readDataConfig missing minor: the world's own enabled datapacks and features are not read back from level.dat
37 LevelSummary.backupStatus missing player: opening a world from an older version gives no 'back up first' prompt; the upgrade runs straight away (world_loading.rs)
38 LevelSummary.compareTo inline crates/horizon-client/src/title.rs::list_worlds newest first by last played
39 LevelSummary.createInfo missing unsure: row status text (locked, needs conversion) is not carried in WorldEntry
40 LevelSummary.getLevelName inline crates/horizon-client/src/title.rs::list_worlds WorldEntry.name
41 LevelSummary.getWorldVersionName inline crates/horizon-client/src/title.rs::list_worlds WorldEntry.version from Version.Name
42 LevelSummary.isDisabled missing unsure: list_worlds drops folders whose level.dat does not read instead of showing them disabled
43 LevelVersion.parse inline crates/horizon-client/src/title.rs::list_worlds reads Version.Name only
44 PrimaryLevelData.createTag port crates/horizon-client/src/save.rs::Level::write
45 PrimaryLevelData.setModdedInfo inline crates/horizon-client/src/save.rs::Level::write gap: minor: writes WasModded 0 and the brand list; there is no modded save state
46 PrimaryLevelData.stringCollectionToTag inline crates/horizon-client/src/save.rs::Level::write ServerBrands and DataPacks lists
47 PrimaryLevelData.writeLastPlayed inline crates/horizon-client/src/save.rs::Level::write LastPlayed
48 PrimaryLevelData.writeVersionHistory inline crates/horizon-client/src/save.rs::Level::write version_history
49 PrimaryLevelData.writeVersionTag inline crates/horizon-client/src/save.rs::Level::write Version compound
50 ServerLevelData skip:debug crash report category
51 TagValueInput skip:java NBT read helpers; Horizon reads Tag values directly
52 TagValueInput.CompoundListWrapper skip:java NBT list wrapper; Horizon reads Tag values directly
53 TagValueInput.ListWrapper skip:java NBT list wrapper; Horizon reads Tag values directly
54 TagValueInput.TypedListWrapper skip:java NBT list wrapper; Horizon reads Tag values directly
55 TagValueOutput skip:java NBT write helpers; Horizon writes Tag values directly
56 TagValueOutput.ListWrapper skip:java NBT write wrapper
57 TagValueOutput.TypedListWrapper skip:java NBT write wrapper
58 WorldData skip:debug crash report category
59 BuiltInLootTables.register skip:data registers built-in loot table keys; Horizon reads tables from data files
60 ContainerComponentManipulator missing minor: set_contents and modify_contents, which no vanilla loot table uses
61 ContainerComponentManipulator.ComponentSlotCollection missing minor: slot helpers of set_contents and modify_contents, which no vanilla loot table uses
62 FloatRangePredicate.Line.createPredicate missing minor: float range with number-provider bounds; Horizon does not evaluate these bounds
63 FloatRangePredicate.Line.test missing minor: float range check with number-provider bounds
64 FloatRangePredicate.Line.validate skip:data validation at datapack load
65 IntLimit.createLimiter port crates/horizon-world/src/loot.rs::Context::run gap: minor: limit_count arm reads literal min and max only
66 IntLimit.validate skip:data validation at datapack load
67 IntRangePredicate.Line.createPredicate inline crates/horizon-world/src/loot.rs::int_bounds gap: minor: literal bounds only; number-provider bounds are not evaluated
68 IntRangePredicate.Line.test port crates/horizon-world/src/loot.rs::int_bounds gap: minor: literal bounds only
69 IntRangePredicate.Line.validate skip:data validation at datapack load
70 LootContextArg.ArgCodecBuilder skip:java codec builders for context arguments
71 LootContextArg.Getter.get skip:java codec getter for a context argument
72 LootDataType skip:data validation of loot data at datapack load
73 LootParams.addDynamicDrops port crates/horizon-client/src/game/spill.rs::Pending::dynamic gap: minor: decorated pot sherds only; shulker contents are attached by Pending::attach
74 LootParams.Builder skip:java builder for loot params
75 Validatable skip:data validation at datapack load
76 ValidationContext skip:data validation at datapack load
77 ValidationContextSource skip:data validation at datapack load
78 AlternativesEntry.alternatives skip:java builder
79 AlternativesEntry.compose port crates/horizon-world/src/loot.rs::Context::expand alternatives arm
80 AlternativesEntry.validate skip:data validation at datapack load
81 ComposableEntryContainer skip:java container combinators; Horizon expands entries in Context::expand
82 CompositeEntryBase.createCodec skip:java codec
83 CompositeEntryBase.validate skip:data validation at datapack load
84 DynamicLoot.dynamicEntry skip:java builder
85 EntryGroup.compose port crates/horizon-world/src/loot.rs::Context::expand group arm
86 ExpandableContainerBase.expandRaw inline crates/horizon-world/src/loot.rs::Context::expand expansion of raw entries
87 ExpandableContainerBase.expandableFields skip:java codec fields
88 NestedLootTable.addExpandedEntries inline crates/horizon-world/src/loot.rs::Context::expand loot_table arm
89 NestedLootTable.lootTableReference skip:java codec factory
90 SequentialEntry.compose port crates/horizon-world/src/loot.rs::Context::expand sequence arm
91 SlotLoot.createItemStack missing minor: slot entries (copies of container slot items); no vanilla loot table uses one
92 UniformContainerBase.uniformFields skip:java codec fields
93 UniformContainerBase.DummyBuilder.build skip:java builder
94 UniformContainerBase.EntryBase.getWeight inline crates/horizon-world/src/loot.rs::Context::add_random_item weight with luck, in add_random_item
95 ApplyBonusCount.addBonusBinomialDistributionCount skip:java builder
96 ApplyBonusCount.addUniformBonusCount skip:java builder
97 ApplyBonusCount.run port crates/horizon-items/src/items.rs::LootContext::modifiers apply_bonus arm
98 ApplyBonusCount.BinomialWithBonusCount.calculateNewCount inline crates/horizon-items/src/items.rs::LootContext::modifiers binomial_with_bonus_count formula
99 ApplyBonusCount.OreDrops.calculateNewCount inline crates/horizon-items/src/items.rs::LootContext::modifiers ore_drops formula
100 ApplyBonusCount.UniformBonusCount.calculateNewCount inline crates/horizon-items/src/items.rs::LootContext::modifiers uniform_bonus_count formula
101 ApplyExplosionDecay.run port crates/horizon-items/src/items.rs::LootContext::modifiers explosion_decay arm
102 CopyBlockState.run port crates/horizon-items/src/items.rs::LootContext::modifiers copy_state arm; copies the listed properties
103 CopyBlockState.Builder skip:java builder (build, copy)
104 CopyComponentsFunction.run port crates/horizon-client/src/game/spill.rs::Pending::record gap: minor: copies only what spill.rs keeps for block entities (shulker, banner, names, heads, bees)
105 CopyComponentsFunction.Builder skip:java builder (build, exclude, include)
106 CopyCustomDataFunction.run missing minor: no vanilla loot table or item modifier uses copy_custom_data
107 CopyCustomDataFunction.copyData skip:java builder factory
108 CopyCustomDataFunction.Builder.copy skip:java builder
109 CopyCustomDataFunction.CopyOperation.apply missing minor: part of copy_custom_data, which is not ported
110 CopyNameFunction.run missing minor: no vanilla loot table uses copy_name
111 EnchantedCountIncreaseFunction.run port crates/horizon-world/src/loot.rs::Context::run enchanted_count_increase arm
112 EnchantedCountIncreaseFunction.Builder.build skip:java builder
113 FillPlayerHead.run missing minor: no vanilla loot table uses fill_player_head
114 FilteredFunction.run port crates/horizon-world/src/loot.rs::Context::run filtered arm
115 FilteredFunction.Builder.build skip:java builder
116 FunctionUserBuilder skip:java builder interface (apply, buildFunction)
117 LimitCount.run port crates/horizon-world/src/loot.rs::Context::run gap: minor: limit_count arm reads literal min and max only
118 LootItemConditionalFunction.apply port crates/horizon-world/src/loot.rs::Context::modify condition check, then run
119 LootItemConditionalFunction.commonFields skip:java codec fields
120 LootItemFunction.decorate port crates/horizon-world/src/loot.rs::Context::modify function applied to a drop
121 ModifyContainerContents.run missing minor: no vanilla loot table uses modify_contents
122 SequenceFunction.compose port crates/horizon-world/src/loot.rs::Context::run sequence arm
123 SetAttributesFunction missing minor: set_attributes is not ported; no vanilla loot table uses it
124 SetAttributesFunction.ModifierBuilder.build skip:java builder
125 SetBannerPatternFunction.run missing minor: banner pattern layers from loot are not set; no vanilla loot table uses set_banner_pattern
126 SetBannerPatternFunction.Builder skip:java builder
127 SetBookCoverFunction.apply missing minor: no vanilla loot table uses set_book_cover
128 SetComponentsFunction.run port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: player: only /item modify runs it; loot tables (trial chamber copper trim) do not apply the components
129 SetComponentsFunction.setComponent skip:java builder factory
130 SetContainerContents.run missing minor: no vanilla loot table uses set_contents
131 SetContainerContents.Builder skip:java builder
132 SetContainerLootTable missing minor: no vanilla loot table uses set_loot_table
133 SetCustomDataFunction.run port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: minor: only /item modify runs it; no loot table uses set_custom_data
134 SetCustomModelDataFunction.apply missing minor: custom_model_data changes from loot; no vanilla loot table uses it
135 SetCustomModelDataFunction.run missing minor: custom_model_data changes from loot; no vanilla loot table uses it
136 SetCustomModelDataFunction.validate skip:data validation at datapack load
137 SetEnchantmentsFunction.run port crates/horizon-world/src/loot.rs::Context::run set_enchantments arm
138 SetEnchantmentsFunction.validate skip:data validation at datapack load
139 SetEnchantmentsFunction.Builder skip:java builder
140 SetFireworkExplosionFunction.apply missing minor: no vanilla loot table uses set_firework_explosion
141 SetFireworksFunction.apply missing minor: no vanilla loot table uses set_fireworks
142 SetInstrumentFunction.run port crates/horizon-world/src/loot.rs::Context::run gap: player: only draws the random option; the goat horn's instrument component is never set (pillager outpost horns)
143 SetItemCountFunction.run port crates/horizon-world/src/loot.rs::Context::run set_count arm
144 SetItemCountFunction.setCount skip:java builder factory
145 SetItemDamageFunction.run port crates/horizon-world/src/loot.rs::Context::run set_damage arm
146 SetItemDamageFunction.setDamage skip:java builder factory
147 SetLoreFunction.run port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: minor: only /item modify runs set_lore; no loot table uses it
148 SetLoreFunction.updateLore inline crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier set_lore arm, list_operation
149 SetLoreFunction.getReferencedContextParams skip:data validation of referenced context params
150 SetLoreFunction.Builder skip:java builder
151 SetOminousBottleAmplifierFunction.run port crates/horizon-world/src/loot.rs::Context::run set_ominous_bottle_amplifier arm
152 SetRandomDyesFunction.run port crates/horizon-client/src/merchant.rs::Trades::apply_modifier set_random_dyes arm
153 SetRandomPotionFunction.run port crates/horizon-client/src/merchant.rs::Trades::apply_modifier set_random_potion arm
154 SetStewEffectFunction.run port crates/horizon-world/src/loot.rs::Context::run set_stew_effect arm
+156
View File
@@ -0,0 +1,156 @@
SetStewEffectFunction.Builder skip:java builder for the stew effect list; Horizon keeps the effects in loot.rs Context::run (set_stew_effect)
SetWritableBookPagesFunction missing minor: no vanilla loot table uses set_writable_book_pages; Horizon's loot run has no arm for it
SetWrittenBookPagesFunction missing minor: no vanilla loot table uses set_written_book_pages; Horizon's loot run has no arm for it
SmeltItemFunction.run port crates/horizon-world/src/loot.rs::Context::run furnace_smelt arm: smelting recipe, use_input_count and stack cap
SmeltItemFunction.smelted skip:java static builder factory
ToggleTooltips missing minor: no vanilla loot table uses toggle_tooltips; Horizon's loot run has no arm for it
LootContextParamSets skip:data loot parameter set registry and validation; Horizon reads its loot tables
AllOfCondition.allOf skip:java static builder
AllOfCondition.combine inline crates/horizon-items/src/items.rs::LootContext::condition all_of arm: every term must hold
AnyOfCondition.combine inline crates/horizon-items/src/items.rs::LootContext::condition any_of arm: one term must hold
AnyOfCondition.Builder skip:java builder (or)
BonusLevelTableCondition.bonusLevelFlatChance skip:java static builder
BonusLevelTableCondition.test port crates/horizon-items/src/items.rs::LootContext::condition table_bonus arm: chance by enchantment level, capped at the last entry
CompositeLootItemCondition skip:java codec only
CompositeLootItemCondition.Builder skip:java builder (addTerm)
ConditionUserBuilder skip:java builder interface for loot conditions
DamageSourceCondition.test port crates/horizon-world/src/loot.rs::Context::condition damage_source_properties arm (mob death loot)
EnchantmentActiveCheck.test inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed the soul speed modifiers switch on and off here; the ENCHANTMENT_ACTIVE flag itself is not read as a condition
EntityHasScoreCondition.hasScore missing minor: no vanilla loot table uses entity_scores
EntityHasScoreCondition.test missing minor: no vanilla loot table uses entity_scores
EntityHasScoreCondition.validate skip:data datapack validation
EnvironmentAttributeCheck.createCodec skip:java codec
EnvironmentAttributeCheck.test missing minor: no vanilla data uses environment_attribute_check
ExplosionCondition.test port crates/horizon-items/src/items.rs::LootContext::condition survives_explosion arm: 1 / radius under an explosion (block loot; only block tables use it)
FloatValueCheck.validate skip:data datapack validation
IntValueCheck.validate skip:data datapack validation
InvertedLootItemCondition.invert skip:java static builder
InvertedLootItemCondition.test port crates/horizon-world/src/loot.rs::Context::condition inverted arm
LocationCheck.checkLocation skip:java static builder
LocationCheck.test port crates/horizon-world/src/loot.rs::Context::condition gap: minor: biome lists only; block predicate and offsetY are not read here, and block loot (items.rs) passes location_check unconditionally
LootItemCondition.Builder skip:java builders (and, or)
LootItemEntityPropertyCondition.hasProperties skip:java static builder
LootItemEntityPropertyCondition.test port crates/horizon-world/src/loot.rs::Context::condition entity_properties arm (mob loot); the block-loot arm covers only a bare 'this' check
LootItemRandomChanceCondition.test port crates/horizon-world/src/loot.rs::Context::condition random_chance arm
LootItemRandomChanceWithEnchantedBonusCondition.randomChanceAndLootingBoost skip:java static builder
LootItemRandomChanceWithEnchantedBonusCondition.test port crates/horizon-world/src/loot.rs::Context::condition random_chance_with_enchanted_bonus arm: living attacker's enchantment level
LootPredicates skip:data registry bootstrap; loot conditions are matched in loot.rs and items.rs
MatchBlock.blockMatches skip:java static builder
MatchBlock.getReferencedContextParams skip:data validation metadata for context params
MatchBlock.test port crates/horizon-items/src/items.rs::LootContext::condition match_block arm: block id, state and property ranges; gap: minor: the block-entity part of the predicate is not read
MatchTool.test port crates/horizon-items/src/items.rs::LootContext::condition match_tool arm; gap: minor: item ids, tags and enchantment levels only, other ItemPredicate parts are not read
TimeCheck missing minor: time_check is used by no vanilla data file (datapacks only)
WeatherCheck.test port crates/horizon-client/src/game/trident.rs::Game::channel_lightning channeling's thunder check (thundering only); gap: minor: raining is not read, channeling only uses thundering
NbtProviders skip:data registry bootstrap
AggregateProvider skip:java codec only
BinaryProvider.mapCodec skip:java codec
BinaryProvider.validate skip:data datapack validation
ConditionalProvider.selectValue port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select conditional arm: on_true or on_false by the condition
DispatcherProvider.mapCodec skip:java codec
DispatcherProvider.selectValue port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select number_dispatcher arm: first case whose condition holds, else default
DispatcherProvider.validate skip:data datapack validation
DispatcherProvider.Case.codec skip:java codec
DispatcherProvider.Case.validate skip:data datapack validation
DistributionProvider.mapCodec skip:java codec
DistributionProvider.validate skip:data datapack validation
EnvironmentAttributeProvider skip:java codec only
PowerProvider.mapCodec skip:java codec
PowerProvider.validate skip:data datapack validation
RangeProvider.mapCodec skip:java codec
RangeProvider.validate skip:data datapack validation
StoredNumberAccess missing minor: storage-backed numbers; no vanilla data uses storage providers
UnaryProvider skip:java codec only
floats/Average.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float avg arm
floats/ContextFloatProviders skip:data registry bootstrap
floats/Difference.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float sub arm
floats/EnchantmentLevelProvider.getFloatUnsafe port crates/horizon-items/src/enchant.rs::Enchantments::condition random_chance arm: chance at the enchantment level; gap: minor: only the random_chance use is read
floats/EnvironmentAttributeValue missing minor: no vanilla data uses environment_attribute providers
floats/Length.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float length arm
floats/Maximum.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float max arm
floats/Minimum.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float min arm
floats/Modulus.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float mod arm
floats/Product.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float mul arm
floats/Quotient.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float div arm
ResolvableFloat.getFromItem port crates/horizon-client/src/providers.rs::Providers::speed furnace fuel speed multiplier (COOKING_FUEL); gap: minor: only the furnace fuel component is read
ResolvableFloat.wrap skip:java codec helper
floats/StorageValue missing minor: no vanilla data uses storage providers
floats/Sum.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float add arm
floats/Truncate.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float truncate arm
floats/UniformGenerator.getFloatUnsafe port crates/horizon-world/src/loot.rs::Context::float uniform arm: min + random * (max - min)
floats/WeightedListValue.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select weighted list pick (the default branch)
ints/Average.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int avg arm
ints/BinomialDistributionGenerator.getIntUnsafe port crates/horizon-world/src/loot.rs::Context::int binomial arm
ints/BinomialDistributionGenerator.validate skip:data datapack validation
ints/ContextIntProviders.bootstrap skip:data registry bootstrap
ints/ContextIntProviders.compostable port crates/horizon-client/src/game/composter.rs::Game::compostable the item's compostable layer provider; evaluated when the composter takes it (Game::composter_add)
ints/ContextIntProviders.cooking port crates/horizon-client/src/providers.rs::Providers::burn_time fuel burn times (the cooking/time_* providers)
ints/Difference.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int sub arm
ints/EnvironmentAttributeValue missing minor: no vanilla data uses environment_attribute providers
ints/FloorModulus.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int floor_mod arm
ints/FloorQuotient.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int floor_div arm
ints/Maximum.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int max arm
ints/Minimum.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int min arm
ints/Modulus.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int mod arm
ints/Product.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int mul arm
ints/Quotient.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int div arm
ResolvableInt.getFromItem port crates/horizon-client/src/providers.rs::Providers::burn_time furnace fuel burn time (COOKING_FUEL); gap: minor: only the furnace fuel component is read
ResolvableInt.wrap skip:java codec helper
ints/ScoreboardValue.getIntUnsafe missing minor: no vanilla data uses score providers
ints/ScoreboardValue.getScoreInfo missing minor: no vanilla data uses score providers
ints/ScoreboardValue.validate skip:data datapack validation
ints/StorageValue missing minor: no vanilla data uses storage providers
ints/Sum.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int add arm
ints/UniformGenerator.getIntUnsafe port crates/horizon-world/src/loot.rs::Context::int uniform arm: inclusive random int between min and max
ints/WeightedListValue.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select weighted list pick (the default branch)
ScoreboardNameProviders skip:data registry bootstrap
FunctionCallback.handle port crates/horizon-client/src/game/functions.rs::Game::run_function_by_id runs the function by id when its time comes
FunctionTagCallback.handle inline crates/horizon-client/src/game/functions.rs::Game::tick_functions tag branch: runs every function in the tag
TimerQueue.createComparator inline crates/horizon-client/src/game/functions.rs::Game::tick_functions ordering by (time, seq) in the due-event search
TimerQueue.pack port crates/horizon-client/src/game/functions.rs::Game::save_schedule writes data/minecraft/scheduled_events.dat sorted by (time, seq)
TimerQueue.remove port crates/horizon-client/src/game/functions.rs::Game::cmd_schedule schedule clear arm
TimerQueue.schedule port crates/horizon-client/src/game/functions.rs::Game::cmd_schedule schedule function arm
TimerQueue.tick port crates/horizon-client/src/game/functions.rs::Game::tick_functions runs due events in (time, seq) order, then the tick tag
TimerQueue.Event.Packed.codec skip:java codec
TimerQueue.Packed.codec skip:java codec
ContentValidationException.getMessage skip:java exception message getter
DirectoryValidator.validateDirectory skip:server server check of symlinks in world and resource folders (allowed_symlinks.txt)
DirectoryValidator.validateSymlink skip:server server check of symlinks in world and resource folders (allowed_symlinks.txt)
PathAllowList.getForFileSystem skip:server server file allow-list
PathAllowList.readPlain skip:server server file allow-list
PathAllowList.ConfigEntry.parse skip:server server file allow-list
BlockHitResult.hitBorder missing minor: BlockHit has no world-border flag; vanilla projectiles check it on a border hit
BlockHitResult.withDirection skip:java copy helper (Rust struct update)
BlockHitResult.withPosition skip:java copy helper (Rust struct update)
HitResult.distanceTo missing minor: only the fishing bobber's block-hit bounce uses it; Horizon's bobber does not bounce back on a block hit
Vec2.add skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.distanceToSqr skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.dot skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.length skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.lengthSquared skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.normalized skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.rotate skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.scale skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
Vec2.equals skip:java Object equality; Rust derives it
Vec2.hashCode skip:java Object hashing; Rust derives it
ArrayVoxelShape.getCoords port crates/horizon-core/src/geometry/shape.rs::VoxelShape::coordinates
BitSetDiscreteVoxelShape.<init> port crates/horizon-core/src/geometry/shape.rs::VoxelShape::from_cube gap: minor: takes the occupancy from the caller; there is no empty-grid constructor
BitSetDiscreteVoxelShape.clearZStrip port crates/horizon-core/src/geometry/shape.rs::clear_strip
BitSetDiscreteVoxelShape.fillUpdateBounds inline crates/horizon-core/src/geometry/shape.rs::VoxelShape::build bounds computed from the filled grid
BitSetDiscreteVoxelShape.forAllBoxes port crates/horizon-core/src/geometry/shape.rs::VoxelShape::decompose
BitSetDiscreteVoxelShape.getIndex port crates/horizon-core/src/geometry/shape.rs::index
BitSetDiscreteVoxelShape.isInterior skip:other no vanilla caller outside its own class
BitSetDiscreteVoxelShape.isXZRectangleFull inline crates/horizon-core/src/geometry/shape.rs::VoxelShape::decompose the greedy x-z merge inside decompose
BitSetDiscreteVoxelShape.isZStripFull port crates/horizon-core/src/geometry/shape.rs::strip_full
BitSetDiscreteVoxelShape.join port crates/horizon-core/src/geometry/shape/create.rs::VoxelShape::join
BitSetDiscreteVoxelShape.withFilledBounds port crates/horizon-core/src/geometry/shape.rs::VoxelShape::with_discrete_bounds
CubeVoxelShape.findIndex port crates/horizon-core/src/geometry/shape.rs::VoxelShape::find_index
DiscreteCubeMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::merge
IdenticalMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::merge
IndirectMerger.<init> skip:java list wrapper constructor
IndirectMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::merge
IndirectMerger.getList skip:java list accessor
MinecartCollisionContext missing player: vanilla lets a rail cart pass through the block under its rail and the slope block of an ascending rail (MinecartCollisionContext); minecarts.rs move_cart has no such exclusion, so carts may bump on those blocks (read from code, not checked in game)
NonOverlappingMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::disjoint
NonOverlappingMerger.forNonSwappedIndexes port crates/horizon-core/src/geometry/shape/join.rs::disjoint
NonOverlappingMerger.getDouble skip:java list accessor
PositionCollisionContext.isAbove port crates/horizon-world/src/collision_context.rs::CollisionContext::is_above
1 SetStewEffectFunction.Builder skip:java builder for the stew effect list; Horizon keeps the effects in loot.rs Context::run (set_stew_effect)
2 SetWritableBookPagesFunction missing minor: no vanilla loot table uses set_writable_book_pages; Horizon's loot run has no arm for it
3 SetWrittenBookPagesFunction missing minor: no vanilla loot table uses set_written_book_pages; Horizon's loot run has no arm for it
4 SmeltItemFunction.run port crates/horizon-world/src/loot.rs::Context::run furnace_smelt arm: smelting recipe, use_input_count and stack cap
5 SmeltItemFunction.smelted skip:java static builder factory
6 ToggleTooltips missing minor: no vanilla loot table uses toggle_tooltips; Horizon's loot run has no arm for it
7 LootContextParamSets skip:data loot parameter set registry and validation; Horizon reads its loot tables
8 AllOfCondition.allOf skip:java static builder
9 AllOfCondition.combine inline crates/horizon-items/src/items.rs::LootContext::condition all_of arm: every term must hold
10 AnyOfCondition.combine inline crates/horizon-items/src/items.rs::LootContext::condition any_of arm: one term must hold
11 AnyOfCondition.Builder skip:java builder (or)
12 BonusLevelTableCondition.bonusLevelFlatChance skip:java static builder
13 BonusLevelTableCondition.test port crates/horizon-items/src/items.rs::LootContext::condition table_bonus arm: chance by enchantment level, capped at the last entry
14 CompositeLootItemCondition skip:java codec only
15 CompositeLootItemCondition.Builder skip:java builder (addTerm)
16 ConditionUserBuilder skip:java builder interface for loot conditions
17 DamageSourceCondition.test port crates/horizon-world/src/loot.rs::Context::condition damage_source_properties arm (mob death loot)
18 EnchantmentActiveCheck.test inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed the soul speed modifiers switch on and off here; the ENCHANTMENT_ACTIVE flag itself is not read as a condition
19 EntityHasScoreCondition.hasScore missing minor: no vanilla loot table uses entity_scores
20 EntityHasScoreCondition.test missing minor: no vanilla loot table uses entity_scores
21 EntityHasScoreCondition.validate skip:data datapack validation
22 EnvironmentAttributeCheck.createCodec skip:java codec
23 EnvironmentAttributeCheck.test missing minor: no vanilla data uses environment_attribute_check
24 ExplosionCondition.test port crates/horizon-items/src/items.rs::LootContext::condition survives_explosion arm: 1 / radius under an explosion (block loot; only block tables use it)
25 FloatValueCheck.validate skip:data datapack validation
26 IntValueCheck.validate skip:data datapack validation
27 InvertedLootItemCondition.invert skip:java static builder
28 InvertedLootItemCondition.test port crates/horizon-world/src/loot.rs::Context::condition inverted arm
29 LocationCheck.checkLocation skip:java static builder
30 LocationCheck.test port crates/horizon-world/src/loot.rs::Context::condition gap: minor: biome lists only; block predicate and offsetY are not read here, and block loot (items.rs) passes location_check unconditionally
31 LootItemCondition.Builder skip:java builders (and, or)
32 LootItemEntityPropertyCondition.hasProperties skip:java static builder
33 LootItemEntityPropertyCondition.test port crates/horizon-world/src/loot.rs::Context::condition entity_properties arm (mob loot); the block-loot arm covers only a bare 'this' check
34 LootItemRandomChanceCondition.test port crates/horizon-world/src/loot.rs::Context::condition random_chance arm
35 LootItemRandomChanceWithEnchantedBonusCondition.randomChanceAndLootingBoost skip:java static builder
36 LootItemRandomChanceWithEnchantedBonusCondition.test port crates/horizon-world/src/loot.rs::Context::condition random_chance_with_enchanted_bonus arm: living attacker's enchantment level
37 LootPredicates skip:data registry bootstrap; loot conditions are matched in loot.rs and items.rs
38 MatchBlock.blockMatches skip:java static builder
39 MatchBlock.getReferencedContextParams skip:data validation metadata for context params
40 MatchBlock.test port crates/horizon-items/src/items.rs::LootContext::condition match_block arm: block id, state and property ranges; gap: minor: the block-entity part of the predicate is not read
41 MatchTool.test port crates/horizon-items/src/items.rs::LootContext::condition match_tool arm; gap: minor: item ids, tags and enchantment levels only, other ItemPredicate parts are not read
42 TimeCheck missing minor: time_check is used by no vanilla data file (datapacks only)
43 WeatherCheck.test port crates/horizon-client/src/game/trident.rs::Game::channel_lightning channeling's thunder check (thundering only); gap: minor: raining is not read, channeling only uses thundering
44 NbtProviders skip:data registry bootstrap
45 AggregateProvider skip:java codec only
46 BinaryProvider.mapCodec skip:java codec
47 BinaryProvider.validate skip:data datapack validation
48 ConditionalProvider.selectValue port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select conditional arm: on_true or on_false by the condition
49 DispatcherProvider.mapCodec skip:java codec
50 DispatcherProvider.selectValue port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select number_dispatcher arm: first case whose condition holds, else default
51 DispatcherProvider.validate skip:data datapack validation
52 DispatcherProvider.Case.codec skip:java codec
53 DispatcherProvider.Case.validate skip:data datapack validation
54 DistributionProvider.mapCodec skip:java codec
55 DistributionProvider.validate skip:data datapack validation
56 EnvironmentAttributeProvider skip:java codec only
57 PowerProvider.mapCodec skip:java codec
58 PowerProvider.validate skip:data datapack validation
59 RangeProvider.mapCodec skip:java codec
60 RangeProvider.validate skip:data datapack validation
61 StoredNumberAccess missing minor: storage-backed numbers; no vanilla data uses storage providers
62 UnaryProvider skip:java codec only
63 floats/Average.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float avg arm
64 floats/ContextFloatProviders skip:data registry bootstrap
65 floats/Difference.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float sub arm
66 floats/EnchantmentLevelProvider.getFloatUnsafe port crates/horizon-items/src/enchant.rs::Enchantments::condition random_chance arm: chance at the enchantment level; gap: minor: only the random_chance use is read
67 floats/EnvironmentAttributeValue missing minor: no vanilla data uses environment_attribute providers
68 floats/Length.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float length arm
69 floats/Maximum.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float max arm
70 floats/Minimum.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float min arm
71 floats/Modulus.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float mod arm
72 floats/Product.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float mul arm
73 floats/Quotient.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float div arm
74 ResolvableFloat.getFromItem port crates/horizon-client/src/providers.rs::Providers::speed furnace fuel speed multiplier (COOKING_FUEL); gap: minor: only the furnace fuel component is read
75 ResolvableFloat.wrap skip:java codec helper
76 floats/StorageValue missing minor: no vanilla data uses storage providers
77 floats/Sum.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float add arm
78 floats/Truncate.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_float truncate arm
79 floats/UniformGenerator.getFloatUnsafe port crates/horizon-world/src/loot.rs::Context::float uniform arm: min + random * (max - min)
80 floats/WeightedListValue.getFloatUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select weighted list pick (the default branch)
81 ints/Average.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int avg arm
82 ints/BinomialDistributionGenerator.getIntUnsafe port crates/horizon-world/src/loot.rs::Context::int binomial arm
83 ints/BinomialDistributionGenerator.validate skip:data datapack validation
84 ints/ContextIntProviders.bootstrap skip:data registry bootstrap
85 ints/ContextIntProviders.compostable port crates/horizon-client/src/game/composter.rs::Game::compostable the item's compostable layer provider; evaluated when the composter takes it (Game::composter_add)
86 ints/ContextIntProviders.cooking port crates/horizon-client/src/providers.rs::Providers::burn_time fuel burn times (the cooking/time_* providers)
87 ints/Difference.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int sub arm
88 ints/EnvironmentAttributeValue missing minor: no vanilla data uses environment_attribute providers
89 ints/FloorModulus.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int floor_mod arm
90 ints/FloorQuotient.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int floor_div arm
91 ints/Maximum.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int max arm
92 ints/Minimum.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int min arm
93 ints/Modulus.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int mod arm
94 ints/Product.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int mul arm
95 ints/Quotient.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int div arm
96 ResolvableInt.getFromItem port crates/horizon-client/src/providers.rs::Providers::burn_time furnace fuel burn time (COOKING_FUEL); gap: minor: only the furnace fuel component is read
97 ResolvableInt.wrap skip:java codec helper
98 ints/ScoreboardValue.getIntUnsafe missing minor: no vanilla data uses score providers
99 ints/ScoreboardValue.getScoreInfo missing minor: no vanilla data uses score providers
100 ints/ScoreboardValue.validate skip:data datapack validation
101 ints/StorageValue missing minor: no vanilla data uses storage providers
102 ints/Sum.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_int add arm
103 ints/UniformGenerator.getIntUnsafe port crates/horizon-world/src/loot.rs::Context::int uniform arm: inclusive random int between min and max
104 ints/WeightedListValue.getIntUnsafe port crates/horizon-client/src/game/commands/compute.rs::Game::provider_select weighted list pick (the default branch)
105 ScoreboardNameProviders skip:data registry bootstrap
106 FunctionCallback.handle port crates/horizon-client/src/game/functions.rs::Game::run_function_by_id runs the function by id when its time comes
107 FunctionTagCallback.handle inline crates/horizon-client/src/game/functions.rs::Game::tick_functions tag branch: runs every function in the tag
108 TimerQueue.createComparator inline crates/horizon-client/src/game/functions.rs::Game::tick_functions ordering by (time, seq) in the due-event search
109 TimerQueue.pack port crates/horizon-client/src/game/functions.rs::Game::save_schedule writes data/minecraft/scheduled_events.dat sorted by (time, seq)
110 TimerQueue.remove port crates/horizon-client/src/game/functions.rs::Game::cmd_schedule schedule clear arm
111 TimerQueue.schedule port crates/horizon-client/src/game/functions.rs::Game::cmd_schedule schedule function arm
112 TimerQueue.tick port crates/horizon-client/src/game/functions.rs::Game::tick_functions runs due events in (time, seq) order, then the tick tag
113 TimerQueue.Event.Packed.codec skip:java codec
114 TimerQueue.Packed.codec skip:java codec
115 ContentValidationException.getMessage skip:java exception message getter
116 DirectoryValidator.validateDirectory skip:server server check of symlinks in world and resource folders (allowed_symlinks.txt)
117 DirectoryValidator.validateSymlink skip:server server check of symlinks in world and resource folders (allowed_symlinks.txt)
118 PathAllowList.getForFileSystem skip:server server file allow-list
119 PathAllowList.readPlain skip:server server file allow-list
120 PathAllowList.ConfigEntry.parse skip:server server file allow-list
121 BlockHitResult.hitBorder missing minor: BlockHit has no world-border flag; vanilla projectiles check it on a border hit
122 BlockHitResult.withDirection skip:java copy helper (Rust struct update)
123 BlockHitResult.withPosition skip:java copy helper (Rust struct update)
124 HitResult.distanceTo missing minor: only the fishing bobber's block-hit bounce uses it; Horizon's bobber does not bounce back on a block hit
125 Vec2.add skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
126 Vec2.distanceToSqr skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
127 Vec2.dot skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
128 Vec2.length skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
129 Vec2.lengthSquared skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
130 Vec2.normalized skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
131 Vec2.rotate skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
132 Vec2.scale skip:other 2D vector maths; Horizon has no Vec2 type and keeps 2D maths in its callers
133 Vec2.equals skip:java Object equality; Rust derives it
134 Vec2.hashCode skip:java Object hashing; Rust derives it
135 ArrayVoxelShape.getCoords port crates/horizon-core/src/geometry/shape.rs::VoxelShape::coordinates
136 BitSetDiscreteVoxelShape.<init> port crates/horizon-core/src/geometry/shape.rs::VoxelShape::from_cube gap: minor: takes the occupancy from the caller; there is no empty-grid constructor
137 BitSetDiscreteVoxelShape.clearZStrip port crates/horizon-core/src/geometry/shape.rs::clear_strip
138 BitSetDiscreteVoxelShape.fillUpdateBounds inline crates/horizon-core/src/geometry/shape.rs::VoxelShape::build bounds computed from the filled grid
139 BitSetDiscreteVoxelShape.forAllBoxes port crates/horizon-core/src/geometry/shape.rs::VoxelShape::decompose
140 BitSetDiscreteVoxelShape.getIndex port crates/horizon-core/src/geometry/shape.rs::index
141 BitSetDiscreteVoxelShape.isInterior skip:other no vanilla caller outside its own class
142 BitSetDiscreteVoxelShape.isXZRectangleFull inline crates/horizon-core/src/geometry/shape.rs::VoxelShape::decompose the greedy x-z merge inside decompose
143 BitSetDiscreteVoxelShape.isZStripFull port crates/horizon-core/src/geometry/shape.rs::strip_full
144 BitSetDiscreteVoxelShape.join port crates/horizon-core/src/geometry/shape/create.rs::VoxelShape::join
145 BitSetDiscreteVoxelShape.withFilledBounds port crates/horizon-core/src/geometry/shape.rs::VoxelShape::with_discrete_bounds
146 CubeVoxelShape.findIndex port crates/horizon-core/src/geometry/shape.rs::VoxelShape::find_index
147 DiscreteCubeMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::merge
148 IdenticalMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::merge
149 IndirectMerger.<init> skip:java list wrapper constructor
150 IndirectMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::merge
151 IndirectMerger.getList skip:java list accessor
152 MinecartCollisionContext missing player: vanilla lets a rail cart pass through the block under its rail and the slope block of an ascending rail (MinecartCollisionContext); minecarts.rs move_cart has no such exclusion, so carts may bump on those blocks (read from code, not checked in game)
153 NonOverlappingMerger.forMergedIndexes port crates/horizon-core/src/geometry/shape/join.rs::disjoint
154 NonOverlappingMerger.forNonSwappedIndexes port crates/horizon-core/src/geometry/shape/join.rs::disjoint
155 NonOverlappingMerger.getDouble skip:java list accessor
156 PositionCollisionContext.isAbove port crates/horizon-world/src/collision_context.rs::CollisionContext::is_above
+18
View File
@@ -0,0 +1,18 @@
SubShape.clampToShape inline crates/horizon-core/src/geometry/shape/face.rs::VoxelShape::calculate_face clamps the parent's discrete extrema to the slice (face.rs:43-46)
SubShape.fill skip:other write path on a read-only slice; vanilla calls fill only on fresh BitSetDiscreteVoxelShape (Shapes.java:25, DiscreteVoxelShape.java:43), never on a SubShape; Horizon shapes are immutable
SubShape.isFull inline crates/horizon-core/src/geometry/shape/face.rs::VoxelShape::calculate_face slice occupancy is copied from the parent plane when the face is built (face.rs:61-68)
PlayerScores.getOrCreate port crates/horizon-client-core/src/scoreboard.rs::Scoreboard::score_mut creates the score and tracks the holder (holder_order.insert)
PlayerScores.listScores port crates/horizon-client-core/src/scoreboard.rs::Scoreboard::holder_scores one holder's (objective, value) pairs
ScoreboardSaveData.setData inline crates/horizon-client/src/game/scoreboard.rs::Game::save_scoreboard gap: minor: no in-memory save-data copy and no equality/dirty check; the file is rewritten from board.pack() on each save
LevelChunkTicks.count port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::count
LevelChunkTicks.pack port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::pack
LevelChunkTicks.poll port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::poll
LevelChunkTicks.removeIf port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::remove_if
LevelChunkTicks.scheduleUnchecked inline crates/horizon-core/src/ticks/mod.rs::ChunkTicks::schedule gap: minor: push only, no duplicate check (the unpack path is in ChunkTicks::unpack); the onTickAdded deadline update is in LevelTicks::schedule
LevelChunkTicks.unpack port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::unpack gap: minor: the deadline refresh is in LevelTicks::unpack_chunk
AttributeTrack.bakeSampler inline crates/horizon-client/src/environment.rs::Environment::load_dimension gap: minor: builds the day timeline's tracks only (keyframes, easing, multiply); the clock holder is implicit
AttributeTrack.createCodec skip:java codec; Horizon parses the timeline JSON in Environment::load_dimension and patrol.rs GameplayAttributes::load
AttributeTrack.createCodecWithModifier skip:java codec; same parsing as createCodec
AttributeTrack.validatePeriod skip:data load-time check of keyframes against period_ticks; Horizon reads the vanilla timeline files without it
AttributeTrackSampler.applyTimeBased port crates/horizon-client/src/environment.rs::Environment::value gap: minor: multiply and override only; star_brightness 'maximum' reads as override (same value at base 0); booleans are in patrol.rs BoolTrack or hardcoded per consumer; no per-tick cache
Timelines.bootstrap skip:data registers the timelines in code; Horizon reads data/minecraft/timeline/*.json, and the few day-cycle numbers it needs are in level/timeline.rs
1 SubShape.clampToShape inline crates/horizon-core/src/geometry/shape/face.rs::VoxelShape::calculate_face clamps the parent's discrete extrema to the slice (face.rs:43-46)
2 SubShape.fill skip:other write path on a read-only slice; vanilla calls fill only on fresh BitSetDiscreteVoxelShape (Shapes.java:25, DiscreteVoxelShape.java:43), never on a SubShape; Horizon shapes are immutable
3 SubShape.isFull inline crates/horizon-core/src/geometry/shape/face.rs::VoxelShape::calculate_face slice occupancy is copied from the parent plane when the face is built (face.rs:61-68)
4 PlayerScores.getOrCreate port crates/horizon-client-core/src/scoreboard.rs::Scoreboard::score_mut creates the score and tracks the holder (holder_order.insert)
5 PlayerScores.listScores port crates/horizon-client-core/src/scoreboard.rs::Scoreboard::holder_scores one holder's (objective, value) pairs
6 ScoreboardSaveData.setData inline crates/horizon-client/src/game/scoreboard.rs::Game::save_scoreboard gap: minor: no in-memory save-data copy and no equality/dirty check; the file is rewritten from board.pack() on each save
7 LevelChunkTicks.count port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::count
8 LevelChunkTicks.pack port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::pack
9 LevelChunkTicks.poll port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::poll
10 LevelChunkTicks.removeIf port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::remove_if
11 LevelChunkTicks.scheduleUnchecked inline crates/horizon-core/src/ticks/mod.rs::ChunkTicks::schedule gap: minor: push only, no duplicate check (the unpack path is in ChunkTicks::unpack); the onTickAdded deadline update is in LevelTicks::schedule
12 LevelChunkTicks.unpack port crates/horizon-core/src/ticks/mod.rs::ChunkTicks::unpack gap: minor: the deadline refresh is in LevelTicks::unpack_chunk
13 AttributeTrack.bakeSampler inline crates/horizon-client/src/environment.rs::Environment::load_dimension gap: minor: builds the day timeline's tracks only (keyframes, easing, multiply); the clock holder is implicit
14 AttributeTrack.createCodec skip:java codec; Horizon parses the timeline JSON in Environment::load_dimension and patrol.rs GameplayAttributes::load
15 AttributeTrack.createCodecWithModifier skip:java codec; same parsing as createCodec
16 AttributeTrack.validatePeriod skip:data load-time check of keyframes against period_ticks; Horizon reads the vanilla timeline files without it
17 AttributeTrackSampler.applyTimeBased port crates/horizon-client/src/environment.rs::Environment::value gap: minor: multiply and override only; star_brightness 'maximum' reads as override (same value at base 0); booleans are in patrol.rs BoolTrack or hardcoded per consumer; no per-tick cache
18 Timelines.bootstrap skip:data registers the timelines in code; Horizon reads data/minecraft/timeline/*.json, and the few day-cycle numbers it needs are in level/timeline.rs
+117
View File
@@ -0,0 +1,117 @@
AccountProfileKeyPairManager.prepareKeyPair skip:service Mojang profile key pair for chat signing; Horizon fetches none
AccountProfileKeyPairManager.shouldRefreshKeyPair skip:service profile key refresh timer; no chat signing key pair
AccountProfileKeyPairManager.readOrFetchProfileKeyPair skip:service profile key pair fetch; no chat signing
AccountProfileKeyPairManager.readProfileKeyPair skip:service reads the cached profile key pair file; no chat signing
AccountProfileKeyPairManager.writeProfileKeyPair skip:service writes the cached profile key pair file; no chat signing
AccountProfileKeyPairManager.fetchProfileKeyPair skip:service fetches a profile key pair from the Mojang API
AccountProfileKeyPairManager.parsePublicKey skip:service parses a profile public key from the Mojang API
CacheSlot.compute skip:java memo slot for a computed value; Horizon has no per-context cache slot
ChunkBatchSizeCalculator.onBatchFinished missing minor: Horizon answers every ChunkBatchFinished with a fixed 64 chunks per tick (remote.rs), so the server's batch pace is never tuned to batch timing
ClientAdvancements.setSelectedTab port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_mouse gap: minor: the tab change is local; the openedTab packet to the server is not sent
ClientAdvancements.setListener skip:ui listener plumbing for the advancements screen; Horizon's screen reads its state each frame
ClientAdvancements.get port crates/horizon-client/src/advancements.rs::Tree::get returns the advancement by id; holder wrapper is not needed
ClientChunkCache.isValidChunk skip:other chunks are stored by position, so there is no ring slot to check
ClientChunkCache.drop port crates/horizon-client/src/streaming.rs::Streaming::forget gap: minor: no ChunkEvent unload hook; block entities and renderer columns are cleared in Game::handle_packet
ClientChunkCache.getChunk skip:java lookup of a loaded chunk; Horizon reads world.chunks directly
ClientChunkCache.replaceBiomes missing minor: ChunksBiomes (id 13) has no arm in Game::handle_packet, so server biome changes (e.g. /fillbiome) do not reach the client until the chunk is resent
ClientChunkCache.flipUpdateTrackingSets skip:other double-buffered change lists for LevelRenderer; Horizon hands changed columns to the renderer directly
ClientChunkCache.Storage.getIndex skip:java ring-buffer index into the view range; Horizon keys chunks by position
ClientChunkCache.Storage.replace port crates/horizon-client/src/game/remote_chunks.rs::Game::remote_chunk gap: minor: old chunk unload is in Streaming::forget, not here
ClientChunkCache.Storage.drop port crates/horizon-client/src/streaming.rs::Streaming::forget forgets the chunk at the index
ClientChunkCache.Storage.onSectionEmptinessChanged skip:java empty-section sets for the renderer's culling; Horizon's mesher works from block data
ClientChunkCache.Storage.onChunkRemoved skip:java empty-section bookkeeping when a chunk leaves; see Storage.onSectionEmptinessChanged
ClientChunkCache.Storage.onChunkAdded skip:java empty-section bookkeeping when a chunk arrives; see Storage.onSectionEmptinessChanged
ClientChunkCache.Storage.refreshEmptySections skip:java empty-section bookkeeping; see Storage.onSectionEmptinessChanged
ClientChunkCache.Storage.markSectionEmpty skip:java empty-section set update; see Storage.onSectionEmptinessChanged
ClientChunkCache.Storage.markSectionNotEmpty skip:java empty-section set update; see Storage.onSectionEmptinessChanged
ClientChunkCache.Storage.dumpChunks skip:debug writes a chunk list file for debugging
ClientCommonPacketListenerImpl.onPacketError missing minor: Horizon logs an undecodable packet and carries on (Event::DecodeError) instead of disconnecting with a report
ClientCommonPacketListenerImpl.createDisconnectionInfo skip:debug builds the disconnect crash report and its file
ClientCommonPacketListenerImpl.storeDisconnectionReport skip:debug writes the disconnect report file under debug/
ClientCommonPacketListenerImpl.shouldHandleMessage inline crates/horizon-client/src/net.rs::receive_play minor: receive_play returns at Transfer, so nothing else is read after a transfer starts
ClientCommonPacketListenerImpl.handleKeepAlive port crates/horizon-client/src/net.rs::receive_play gap: minor: the keep-alive reply is sent at once; vanilla defers it while the game is frozen at poll events
ClientCommonPacketListenerImpl.handleCustomPayload port crates/horizon-client/src/net.rs::receive_brand gap: minor: reads the brand only; other custom payloads go to the game and are ignored
ClientCommonPacketListenerImpl.handleResourcePackPush port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push
ClientCommonPacketListenerImpl.handleResourcePackPop port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_pop
ClientCommonPacketListenerImpl.handlePostEffects missing player: a server's screen post effect (ClientboundPostEffectsPacket, set by /posteffect and on join) is not drawn on remote servers; Horizon's /posteffect only works in its own game
ClientCommonPacketListenerImpl.preparePackPrompt port crates/horizon-client/src/game/server_packs.rs::PackPrompt::texts builds the server prompt line from the header and the server's prompt
ClientCommonPacketListenerImpl.handleStoreCookie port crates/horizon-client/src/net.rs::receive_play stores the cookie for a later transfer or cookie request
ClientCommonPacketListenerImpl.handleCustomReportDetails skip:debug extra lines for crash reports only
ClientCommonPacketListenerImpl.showDialog port crates/horizon-client/src/game/dialogs.rs::Game::show_play_dialog shows a direct or registry dialog
ClientCommonPacketListenerImpl.clearDialog port crates/horizon-client/src/game/dialogs.rs::Game::clear_dialog closes the dialog screen
ClientCommonPacketListenerImpl.sendDeferredPackets missing minor: no deferred-packet queue; keep-alive and other packets are sent at once
ClientCommonPacketListenerImpl.onDisconnect port crates/horizon-client/src/game/remote.rs::Game::leave_server shows the disconnect reason on the multiplayer screen; no telemetry
ClientCommonPacketListenerImpl.fillListenerSpecificCrashDetails skip:debug crash report details only
ClientCommonPacketListenerImpl.createDisconnectScreen port crates/horizon-client/src/game/remote.rs::Game::leave_server disconnected view with the reason (Screen::Disconnected)
ClientCommonPacketListenerImpl.sendWhen missing minor: no deferred sends; packets go out at once (see handleKeepAlive)
ClientCommonPacketListenerImpl.addOrUpdatePackPrompt port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push one prompt holds every pack pushed before it is answered
ClientCommonPacketListenerImpl.PackConfirmScreen.<init> port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push creates the prompt with its pending requests
ClientCommonPacketListenerImpl.PackConfirmScreen.update port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push adds the new request to the open prompt
ClientConfigurationPacketListenerImpl.handleRegistryData port crates/horizon-client/src/net.rs::configure registry entries are collected in configuration
ClientConfigurationPacketListenerImpl.handleUpdateTags missing minor: UpdateTags is not read in configure (net.rs); Horizon uses its built-in tags, which match vanilla unless a datapack changes them
ClientConfigurationPacketListenerImpl.handleSelectKnownPacks port crates/horizon-client/src/net.rs::configure gap: minor: always answers with no known packs, so the server sends every registry entry
ClientConfigurationPacketListenerImpl.runWithResources skip:data resource loading for known packs; Horizon reads its data from tables
ClientConfigurationPacketListenerImpl.handleCodeOfConduct port crates/horizon-client/src/net.rs::configure gap: player: accepts the server's code of conduct at once; the player never sees its text or can decline
ClientConfigurationPacketListenerImpl.handleConfigurationFinished port crates/horizon-client/src/net.rs::configure gap: minor: no registry filter for an integrated server (see filterRegistries)
ClientConfigurationPacketListenerImpl.filterRegistries skip:data Horizon's registries come from its own data; nothing to filter
ClientDebugSubscriber.requestedSubscriptions missing minor: Horizon never requests debug subscriptions; vanilla asks for server tick time while the F3+2 chart is on
ClientDebugSubscriber.tick missing minor: no subscriptions to purge
ClientDebugSubscriber.onSubscriptionsChanged missing minor: no ServerboundDebugSubscriptionRequest is sent
ClientDebugSubscriber.initializeSubscriptions skip:java creates empty value maps per subscription
ClientDebugSubscriber.getValueMap skip:java map accessor for debug values
ClientDebugSubscriber.getValue skip:java value accessor for debug values
ClientDebugSubscriber.pushEvent missing minor: server debug events are dropped
ClientDebugSubscriber.updateMap missing minor: server debug updates are dropped
ClientDebugSubscriber.forEachValue skip:java iterates debug values
ClientDebugSubscriber.dropChunk missing minor: no server debug values to drop with a chunk
ClientDebugSubscriber.dropEntity missing minor: no server debug values to drop with an entity
ClientDebugSubscriber.ValueMap.getValue skip:java value accessor
ClientDebugSubscriber.ValueMap.apply missing minor: applies server debug updates, which Horizon never receives
ClientDebugSubscriber.ValueMap.forEach skip:java iteration helper
ClientDebugSubscriber.ValueMaps.purgeExpired missing minor: expiry of server debug values; none are received
ClientDebugSubscriber.ValueMaps.dropChunkAndBlocks missing minor: drops server debug values per chunk; none are received
ClientDebugSubscriber.ValueWrapper.hasExpired skip:java timestamp check on a debug value wrapper
ClientExplosionTracker.track inline crates/horizon-client/src/particles.rs::ParticleEngine::explosion gap: minor: the debris is thrown at once instead of queued for later ticks
ClientExplosionTracker.addParticle port crates/horizon-client/src/particles.rs::ParticleEngine::explosion_blocks gap: minor: always the default poof and smoke list; the explode packet's own block particle list is not read
ClientHandshakePacketListenerImpl.switchState inline crates/horizon-client/src/net.rs::run login steps run in packet order in run(); no state machine
ClientHandshakePacketListenerImpl.handleHello port crates/horizon-client/src/net.rs::run gap: minor: the session join and server check are in auth.rs (join_server); the encryption setup is in run
ClientHandshakePacketListenerImpl.setEncryption port crates/horizon-client/src/net.rs::run enables the connection cipher
ClientHandshakePacketListenerImpl.handleLoginFinished port crates/horizon-client/src/net.rs::run login finished; play starts after configuration
ClientHandshakePacketListenerImpl.onDisconnect port crates/horizon-client/src/net.rs::run a login disconnect returns the reason to the connect screen
ClientHandshakePacketListenerImpl.handleCompression port crates/horizon-client/src/net.rs::run sets the compression threshold
ClientHandshakePacketListenerImpl.handleCustomQuery port crates/horizon-client/src/net.rs::run answers an unknown custom query with no data
ClientHandshakePacketListenerImpl.fillListenerSpecificCrashDetails skip:debug crash report details only
ClientLevel.handleBlockChangedAck port crates/horizon-client/src/game/remote.rs::Game::end_predictions settles the predicted block actions up to the sequence
ClientLevel.onBlockEntityAdded port crates/horizon-client/src/game.rs::Game::entity_geometry off-screen block entities (beacon, end gateway, structure and test blocks) are drawn without a view test
ClientLevel.syncBlockState port crates/horizon-client/src/game/remote.rs::Game::end_predictions gap: minor: writes the server's state but does not move the player out when the block would sit on them (absSnapTo)
ClientLevel.setBlock port crates/horizon-client/src/game/remote.rs::Game::set_block gap: minor: the prediction bookkeeping is in Game::server_block
ClientLevel.<init> port crates/horizon-client/src/game/remote.rs::Game::enter_remote_dimension gap: minor: the environment layers are applied in Game::render
ClientLevel.addEnvironmentAttributeLayers port crates/horizon-client/src/game.rs::Game::render sky colour and sky light move during a lightning flash
ClientLevel.pollLightUpdates skip:other light is applied when it arrives or relit at once (light.rs relight); there is no queue to poll
ClientLevel.getPrecipitationAt port crates/horizon-client/src/game.rs::GameLevel::precipitation gap: minor: no check that the chunk is loaded; vanilla answers none for an unloaded column
ClientLevel.removeBlockBreakingProgress inline crates/horizon-client/src/game.rs::Game::destroy_block_progress minor: the 400-tick expiry runs on every update, not every 20 ticks
ClientLevel.removeProgress inline crates/horizon-client/src/game.rs::Game::destroy_block_progress cracks are keyed by breaker id, so there are no per-position sets to tidy
ClientLevel.shouldTickDeath missing minor: death animations tick for every remote mob held; no simulation-distance check
ClientLevel.tickNonPassenger port crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities ticks each remote entity
ClientLevel.tickPassenger port crates/horizon-client/src/game/passengers.rs::Game::position_riders gap: minor: passengers are placed on their vehicle; no per-passenger tick
ClientLevel.update skip:other runs the light queue each tick; Horizon relights when changes arrive
ClientLevel.unload inline crates/horizon-client/src/game/remote.rs::Game::handle_packet minor: the ForgetLevelChunk arm clears block entities and renderer columns; light and entity ticking are not toggled
ClientLevel.onChunkLoaded inline crates/horizon-client/src/game/remote_chunks.rs::Game::remote_chunk minor: chunks are meshed on arrival; no tint cache to clear and no entity-ticking gate
ClientLevel.removeEntity port crates/horizon-client/src/game/remote.rs::Game::remove_entity removes the entity and its passengers
ClientLevel.getPushableEntities missing minor: the client does not push the local player with nearby mobs or boats; the server's position correction moves it
ClientLevel.disconnect port crates/horizon-client/src/game/remote.rs::Game::leave_server gap: minor: no presence update
ClientLevel.spawnParticle port crates/horizon-client/src/animate_tick.rs::try_spawn_drip drip particle from a block shape (doAnimateTick)
ClientLevel.spawnFluidParticle port crates/horizon-client/src/animate_tick.rs::try_spawn_drip drip particle over a solid top (doAnimateTick)
ClientLevel.fillReportDetails skip:debug crash report details only
ClientLevel.playPlayerSound skip:other no caller in the 26.3 client sources
ClientLevel.playSound missing player: distance-delayed sounds (over 10 blocks, sqrt(distance)/40 s) play at once, so far fireworks and similar sounds arrive early; audio.rs has no delay
ClientLevel.getRelativeTickSpeed skip:other no caller in the 26.3 client sources
ClientLevel.destroyBlockProgress port crates/horizon-client/src/game.rs::Game::destroy_block_progress sets or clears another player's crack on a block
ClientLevel.addAlwaysVisibleParticle port crates/horizon-client/src/particles.rs::ParticleEngine::add_with always-show flag set
ClientLevel.doAddParticle port crates/horizon-client/src/particles.rs::ParticleEngine::add_with drops particles beyond 32 blocks and at minimal particle level
ClientLevel.getSkyFlashTime inline crates/horizon-client/src/game.rs::Game::render the flash check with the hideLightningFlashes option
ClientLevel.calculateBlockTint port crates/horizon-client/src/mesher.rs::MeshTables::terrain_particle_tint gap: minor: returns none for grass-block tints
ClientLevel.playBreakingSound port crates/horizon-client/src/game/level_particles.rs::Game::breaking_block_effects the block's hit sound while digging
ClientLevel.getClientLeafTintColor port crates/horizon-client/src/animate_tick.rs::AnimateContext::foliage leaf tint for tinted leaves particles; the caller is TintedParticleLeavesBlock
ClientLevel.EntityCallbacks.onTrackingStart inline crates/horizon-client/src/game/remote.rs::Game::spawn_entity minor: ender dragon parts are placed by the dragon module, with no tracked parts list
ClientLevel.EntityCallbacks.onTrackingEnd port crates/horizon-client/src/game/remote.rs::Game::remove_entity minor: detaches passengers and removes the dragon's parts; the leave-level event is not posted
1 AccountProfileKeyPairManager.prepareKeyPair skip:service Mojang profile key pair for chat signing; Horizon fetches none
2 AccountProfileKeyPairManager.shouldRefreshKeyPair skip:service profile key refresh timer; no chat signing key pair
3 AccountProfileKeyPairManager.readOrFetchProfileKeyPair skip:service profile key pair fetch; no chat signing
4 AccountProfileKeyPairManager.readProfileKeyPair skip:service reads the cached profile key pair file; no chat signing
5 AccountProfileKeyPairManager.writeProfileKeyPair skip:service writes the cached profile key pair file; no chat signing
6 AccountProfileKeyPairManager.fetchProfileKeyPair skip:service fetches a profile key pair from the Mojang API
7 AccountProfileKeyPairManager.parsePublicKey skip:service parses a profile public key from the Mojang API
8 CacheSlot.compute skip:java memo slot for a computed value; Horizon has no per-context cache slot
9 ChunkBatchSizeCalculator.onBatchFinished missing minor: Horizon answers every ChunkBatchFinished with a fixed 64 chunks per tick (remote.rs), so the server's batch pace is never tuned to batch timing
10 ClientAdvancements.setSelectedTab port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_mouse gap: minor: the tab change is local; the openedTab packet to the server is not sent
11 ClientAdvancements.setListener skip:ui listener plumbing for the advancements screen; Horizon's screen reads its state each frame
12 ClientAdvancements.get port crates/horizon-client/src/advancements.rs::Tree::get returns the advancement by id; holder wrapper is not needed
13 ClientChunkCache.isValidChunk skip:other chunks are stored by position, so there is no ring slot to check
14 ClientChunkCache.drop port crates/horizon-client/src/streaming.rs::Streaming::forget gap: minor: no ChunkEvent unload hook; block entities and renderer columns are cleared in Game::handle_packet
15 ClientChunkCache.getChunk skip:java lookup of a loaded chunk; Horizon reads world.chunks directly
16 ClientChunkCache.replaceBiomes missing minor: ChunksBiomes (id 13) has no arm in Game::handle_packet, so server biome changes (e.g. /fillbiome) do not reach the client until the chunk is resent
17 ClientChunkCache.flipUpdateTrackingSets skip:other double-buffered change lists for LevelRenderer; Horizon hands changed columns to the renderer directly
18 ClientChunkCache.Storage.getIndex skip:java ring-buffer index into the view range; Horizon keys chunks by position
19 ClientChunkCache.Storage.replace port crates/horizon-client/src/game/remote_chunks.rs::Game::remote_chunk gap: minor: old chunk unload is in Streaming::forget, not here
20 ClientChunkCache.Storage.drop port crates/horizon-client/src/streaming.rs::Streaming::forget forgets the chunk at the index
21 ClientChunkCache.Storage.onSectionEmptinessChanged skip:java empty-section sets for the renderer's culling; Horizon's mesher works from block data
22 ClientChunkCache.Storage.onChunkRemoved skip:java empty-section bookkeeping when a chunk leaves; see Storage.onSectionEmptinessChanged
23 ClientChunkCache.Storage.onChunkAdded skip:java empty-section bookkeeping when a chunk arrives; see Storage.onSectionEmptinessChanged
24 ClientChunkCache.Storage.refreshEmptySections skip:java empty-section bookkeeping; see Storage.onSectionEmptinessChanged
25 ClientChunkCache.Storage.markSectionEmpty skip:java empty-section set update; see Storage.onSectionEmptinessChanged
26 ClientChunkCache.Storage.markSectionNotEmpty skip:java empty-section set update; see Storage.onSectionEmptinessChanged
27 ClientChunkCache.Storage.dumpChunks skip:debug writes a chunk list file for debugging
28 ClientCommonPacketListenerImpl.onPacketError missing minor: Horizon logs an undecodable packet and carries on (Event::DecodeError) instead of disconnecting with a report
29 ClientCommonPacketListenerImpl.createDisconnectionInfo skip:debug builds the disconnect crash report and its file
30 ClientCommonPacketListenerImpl.storeDisconnectionReport skip:debug writes the disconnect report file under debug/
31 ClientCommonPacketListenerImpl.shouldHandleMessage inline crates/horizon-client/src/net.rs::receive_play minor: receive_play returns at Transfer, so nothing else is read after a transfer starts
32 ClientCommonPacketListenerImpl.handleKeepAlive port crates/horizon-client/src/net.rs::receive_play gap: minor: the keep-alive reply is sent at once; vanilla defers it while the game is frozen at poll events
33 ClientCommonPacketListenerImpl.handleCustomPayload port crates/horizon-client/src/net.rs::receive_brand gap: minor: reads the brand only; other custom payloads go to the game and are ignored
34 ClientCommonPacketListenerImpl.handleResourcePackPush port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push
35 ClientCommonPacketListenerImpl.handleResourcePackPop port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_pop
36 ClientCommonPacketListenerImpl.handlePostEffects missing player: a server's screen post effect (ClientboundPostEffectsPacket, set by /posteffect and on join) is not drawn on remote servers; Horizon's /posteffect only works in its own game
37 ClientCommonPacketListenerImpl.preparePackPrompt port crates/horizon-client/src/game/server_packs.rs::PackPrompt::texts builds the server prompt line from the header and the server's prompt
38 ClientCommonPacketListenerImpl.handleStoreCookie port crates/horizon-client/src/net.rs::receive_play stores the cookie for a later transfer or cookie request
39 ClientCommonPacketListenerImpl.handleCustomReportDetails skip:debug extra lines for crash reports only
40 ClientCommonPacketListenerImpl.showDialog port crates/horizon-client/src/game/dialogs.rs::Game::show_play_dialog shows a direct or registry dialog
41 ClientCommonPacketListenerImpl.clearDialog port crates/horizon-client/src/game/dialogs.rs::Game::clear_dialog closes the dialog screen
42 ClientCommonPacketListenerImpl.sendDeferredPackets missing minor: no deferred-packet queue; keep-alive and other packets are sent at once
43 ClientCommonPacketListenerImpl.onDisconnect port crates/horizon-client/src/game/remote.rs::Game::leave_server shows the disconnect reason on the multiplayer screen; no telemetry
44 ClientCommonPacketListenerImpl.fillListenerSpecificCrashDetails skip:debug crash report details only
45 ClientCommonPacketListenerImpl.createDisconnectScreen port crates/horizon-client/src/game/remote.rs::Game::leave_server disconnected view with the reason (Screen::Disconnected)
46 ClientCommonPacketListenerImpl.sendWhen missing minor: no deferred sends; packets go out at once (see handleKeepAlive)
47 ClientCommonPacketListenerImpl.addOrUpdatePackPrompt port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push one prompt holds every pack pushed before it is answered
48 ClientCommonPacketListenerImpl.PackConfirmScreen.<init> port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push creates the prompt with its pending requests
49 ClientCommonPacketListenerImpl.PackConfirmScreen.update port crates/horizon-client/src/game/server_packs.rs::Game::handle_pack_push adds the new request to the open prompt
50 ClientConfigurationPacketListenerImpl.handleRegistryData port crates/horizon-client/src/net.rs::configure registry entries are collected in configuration
51 ClientConfigurationPacketListenerImpl.handleUpdateTags missing minor: UpdateTags is not read in configure (net.rs); Horizon uses its built-in tags, which match vanilla unless a datapack changes them
52 ClientConfigurationPacketListenerImpl.handleSelectKnownPacks port crates/horizon-client/src/net.rs::configure gap: minor: always answers with no known packs, so the server sends every registry entry
53 ClientConfigurationPacketListenerImpl.runWithResources skip:data resource loading for known packs; Horizon reads its data from tables
54 ClientConfigurationPacketListenerImpl.handleCodeOfConduct port crates/horizon-client/src/net.rs::configure gap: player: accepts the server's code of conduct at once; the player never sees its text or can decline
55 ClientConfigurationPacketListenerImpl.handleConfigurationFinished port crates/horizon-client/src/net.rs::configure gap: minor: no registry filter for an integrated server (see filterRegistries)
56 ClientConfigurationPacketListenerImpl.filterRegistries skip:data Horizon's registries come from its own data; nothing to filter
57 ClientDebugSubscriber.requestedSubscriptions missing minor: Horizon never requests debug subscriptions; vanilla asks for server tick time while the F3+2 chart is on
58 ClientDebugSubscriber.tick missing minor: no subscriptions to purge
59 ClientDebugSubscriber.onSubscriptionsChanged missing minor: no ServerboundDebugSubscriptionRequest is sent
60 ClientDebugSubscriber.initializeSubscriptions skip:java creates empty value maps per subscription
61 ClientDebugSubscriber.getValueMap skip:java map accessor for debug values
62 ClientDebugSubscriber.getValue skip:java value accessor for debug values
63 ClientDebugSubscriber.pushEvent missing minor: server debug events are dropped
64 ClientDebugSubscriber.updateMap missing minor: server debug updates are dropped
65 ClientDebugSubscriber.forEachValue skip:java iterates debug values
66 ClientDebugSubscriber.dropChunk missing minor: no server debug values to drop with a chunk
67 ClientDebugSubscriber.dropEntity missing minor: no server debug values to drop with an entity
68 ClientDebugSubscriber.ValueMap.getValue skip:java value accessor
69 ClientDebugSubscriber.ValueMap.apply missing minor: applies server debug updates, which Horizon never receives
70 ClientDebugSubscriber.ValueMap.forEach skip:java iteration helper
71 ClientDebugSubscriber.ValueMaps.purgeExpired missing minor: expiry of server debug values; none are received
72 ClientDebugSubscriber.ValueMaps.dropChunkAndBlocks missing minor: drops server debug values per chunk; none are received
73 ClientDebugSubscriber.ValueWrapper.hasExpired skip:java timestamp check on a debug value wrapper
74 ClientExplosionTracker.track inline crates/horizon-client/src/particles.rs::ParticleEngine::explosion gap: minor: the debris is thrown at once instead of queued for later ticks
75 ClientExplosionTracker.addParticle port crates/horizon-client/src/particles.rs::ParticleEngine::explosion_blocks gap: minor: always the default poof and smoke list; the explode packet's own block particle list is not read
76 ClientHandshakePacketListenerImpl.switchState inline crates/horizon-client/src/net.rs::run login steps run in packet order in run(); no state machine
77 ClientHandshakePacketListenerImpl.handleHello port crates/horizon-client/src/net.rs::run gap: minor: the session join and server check are in auth.rs (join_server); the encryption setup is in run
78 ClientHandshakePacketListenerImpl.setEncryption port crates/horizon-client/src/net.rs::run enables the connection cipher
79 ClientHandshakePacketListenerImpl.handleLoginFinished port crates/horizon-client/src/net.rs::run login finished; play starts after configuration
80 ClientHandshakePacketListenerImpl.onDisconnect port crates/horizon-client/src/net.rs::run a login disconnect returns the reason to the connect screen
81 ClientHandshakePacketListenerImpl.handleCompression port crates/horizon-client/src/net.rs::run sets the compression threshold
82 ClientHandshakePacketListenerImpl.handleCustomQuery port crates/horizon-client/src/net.rs::run answers an unknown custom query with no data
83 ClientHandshakePacketListenerImpl.fillListenerSpecificCrashDetails skip:debug crash report details only
84 ClientLevel.handleBlockChangedAck port crates/horizon-client/src/game/remote.rs::Game::end_predictions settles the predicted block actions up to the sequence
85 ClientLevel.onBlockEntityAdded port crates/horizon-client/src/game.rs::Game::entity_geometry off-screen block entities (beacon, end gateway, structure and test blocks) are drawn without a view test
86 ClientLevel.syncBlockState port crates/horizon-client/src/game/remote.rs::Game::end_predictions gap: minor: writes the server's state but does not move the player out when the block would sit on them (absSnapTo)
87 ClientLevel.setBlock port crates/horizon-client/src/game/remote.rs::Game::set_block gap: minor: the prediction bookkeeping is in Game::server_block
88 ClientLevel.<init> port crates/horizon-client/src/game/remote.rs::Game::enter_remote_dimension gap: minor: the environment layers are applied in Game::render
89 ClientLevel.addEnvironmentAttributeLayers port crates/horizon-client/src/game.rs::Game::render sky colour and sky light move during a lightning flash
90 ClientLevel.pollLightUpdates skip:other light is applied when it arrives or relit at once (light.rs relight); there is no queue to poll
91 ClientLevel.getPrecipitationAt port crates/horizon-client/src/game.rs::GameLevel::precipitation gap: minor: no check that the chunk is loaded; vanilla answers none for an unloaded column
92 ClientLevel.removeBlockBreakingProgress inline crates/horizon-client/src/game.rs::Game::destroy_block_progress minor: the 400-tick expiry runs on every update, not every 20 ticks
93 ClientLevel.removeProgress inline crates/horizon-client/src/game.rs::Game::destroy_block_progress cracks are keyed by breaker id, so there are no per-position sets to tidy
94 ClientLevel.shouldTickDeath missing minor: death animations tick for every remote mob held; no simulation-distance check
95 ClientLevel.tickNonPassenger port crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities ticks each remote entity
96 ClientLevel.tickPassenger port crates/horizon-client/src/game/passengers.rs::Game::position_riders gap: minor: passengers are placed on their vehicle; no per-passenger tick
97 ClientLevel.update skip:other runs the light queue each tick; Horizon relights when changes arrive
98 ClientLevel.unload inline crates/horizon-client/src/game/remote.rs::Game::handle_packet minor: the ForgetLevelChunk arm clears block entities and renderer columns; light and entity ticking are not toggled
99 ClientLevel.onChunkLoaded inline crates/horizon-client/src/game/remote_chunks.rs::Game::remote_chunk minor: chunks are meshed on arrival; no tint cache to clear and no entity-ticking gate
100 ClientLevel.removeEntity port crates/horizon-client/src/game/remote.rs::Game::remove_entity removes the entity and its passengers
101 ClientLevel.getPushableEntities missing minor: the client does not push the local player with nearby mobs or boats; the server's position correction moves it
102 ClientLevel.disconnect port crates/horizon-client/src/game/remote.rs::Game::leave_server gap: minor: no presence update
103 ClientLevel.spawnParticle port crates/horizon-client/src/animate_tick.rs::try_spawn_drip drip particle from a block shape (doAnimateTick)
104 ClientLevel.spawnFluidParticle port crates/horizon-client/src/animate_tick.rs::try_spawn_drip drip particle over a solid top (doAnimateTick)
105 ClientLevel.fillReportDetails skip:debug crash report details only
106 ClientLevel.playPlayerSound skip:other no caller in the 26.3 client sources
107 ClientLevel.playSound missing player: distance-delayed sounds (over 10 blocks, sqrt(distance)/40 s) play at once, so far fireworks and similar sounds arrive early; audio.rs has no delay
108 ClientLevel.getRelativeTickSpeed skip:other no caller in the 26.3 client sources
109 ClientLevel.destroyBlockProgress port crates/horizon-client/src/game.rs::Game::destroy_block_progress sets or clears another player's crack on a block
110 ClientLevel.addAlwaysVisibleParticle port crates/horizon-client/src/particles.rs::ParticleEngine::add_with always-show flag set
111 ClientLevel.doAddParticle port crates/horizon-client/src/particles.rs::ParticleEngine::add_with drops particles beyond 32 blocks and at minimal particle level
112 ClientLevel.getSkyFlashTime inline crates/horizon-client/src/game.rs::Game::render the flash check with the hideLightningFlashes option
113 ClientLevel.calculateBlockTint port crates/horizon-client/src/mesher.rs::MeshTables::terrain_particle_tint gap: minor: returns none for grass-block tints
114 ClientLevel.playBreakingSound port crates/horizon-client/src/game/level_particles.rs::Game::breaking_block_effects the block's hit sound while digging
115 ClientLevel.getClientLeafTintColor port crates/horizon-client/src/animate_tick.rs::AnimateContext::foliage leaf tint for tinted leaves particles; the caller is TintedParticleLeavesBlock
116 ClientLevel.EntityCallbacks.onTrackingStart inline crates/horizon-client/src/game/remote.rs::Game::spawn_entity minor: ender dragon parts are placed by the dragon module, with no tracked parts list
117 ClientLevel.EntityCallbacks.onTrackingEnd port crates/horizon-client/src/game/remote.rs::Game::remove_entity minor: detaches passengers and removes the dragon's parts; the leave-level event is not posted
+147
View File
@@ -0,0 +1,147 @@
ClientPacketListener.<init> port crates/horizon-client/src/game/remote.rs::Game::join_server gap: minor: clears the chat on join; vanilla restores chat state kept across a reconfiguration
ClientPacketListener.clearCacheSlots skip:java weak-reference cache slots; Horizon has no such cache
ClientPacketListener.handleAddEntity inline crates/horizon-client/src/game/remote.rs::Game::handle_packet AddEntity arm: spawn_entity, then object or projectile spawn, then motion
ClientPacketListener.createEntityFromPacket inline crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: the player spawns without checking that its profile is known
ClientPacketListener.handleSetEntityData port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: only the data indexes Horizon reads are applied (flags, names, sleep, crouch, mob fields)
ClientPacketListener.handleEntityPositionSync port crates/horizon-client/src/game/remote.rs::Game::move_entity absolute move with the packet rotation and on-ground flag
ClientPacketListener.handleTeleportEntity inline crates/horizon-client/src/game/remote.rs::Game::handle_packet TeleportEntity arm works out the relative position, then move_entity; gap: minor: a teleport of the player's former vehicle is not applied to the player
ClientPacketListener.handleTickingState port crates/horizon-client/src/game/remote.rs::Game::handle_packet TickingState arm: clock rate and frozen flag
ClientPacketListener.handleTickingStep port crates/horizon-client/src/game/remote.rs::Game::handle_packet TickingStep arm: frozen ticks to run
ClientPacketListener.handleMoveEntity port crates/horizon-client/src/game/remote.rs::Game::move_entity relative move and rotation from the Pos, PosRot and Rot packets
ClientPacketListener.handleMinecartAlongTrack missing player: the server's rail steps for a minecart are dropped, so a cart on a dedicated server follows the client's own rail physics and can drift from where the server has it
ClientPacketListener.handleRemoveEntities port crates/horizon-client/src/game/remote.rs::Game::remove_entity gap: minor: a removed vehicle carrying the player is not remembered for a later teleport
ClientPacketListener.setValuesFromPositionPacket port crates/horizon-client/src/game/remote.rs::Game::remote_teleport gap: minor: the entity case (TeleportEntity) is in the handle_packet arm, not here
ClientPacketListener.handleRotatePlayer port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerRotation arm; gap: minor: no ServerboundMovePlayerPacket.Rot reply is sent
ClientPacketListener.handleChunkBlocksUpdate port crates/horizon-client/src/game/remote.rs::Game::handle_packet SectionBlocksUpdate arm: each change through the block update
ClientPacketListener.handleChunksBiomes missing player: biome updates for loaded chunks are dropped, so grass, leaves and water keep the old biome colour
ClientPacketListener.enableChunkLight inline crates/horizon-client/src/streaming.rs::Streaming::insert_remote gap: minor: the air-only section status is not set; every section of the 3x3 columns is marked dirty
ClientPacketListener.handleForgetLevelChunk port crates/horizon-client/src/game/remote.rs::Game::handle_packet ForgetLevelChunk arm: Streaming::forget, block entities and renderer columns dropped
ClientPacketListener.queueLightRemoval inline crates/horizon-client/src/streaming.rs::Streaming::forget gap: minor: the column's light state is dropped with the column; no per-section light clearing
ClientPacketListener.handleBlockUpdate port crates/horizon-client/src/game/remote.rs::Game::server_block
ClientPacketListener.handleConfigurationStart port crates/horizon-client/src/net.rs::receive_play gap: player: no reconfiguring screen is shown and the chat state is not stored
ClientPacketListener.handleSystemChat port crates/horizon-client/src/game/remote.rs::Game::handle_packet SystemChat arm: overlay to the action bar, otherwise the chat
ClientPacketListener.handlePlayerChat port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerChat arm; gap: minor: no signature, chat index or validity checks
ClientPacketListener.handleDisguisedChat port crates/horizon-client/src/game/remote.rs::Game::handle_packet DisguisedChat arm
ClientPacketListener.handleDeleteChat missing player: a chat line the server deletes (moderation) stays on screen
ClientPacketListener.handleAnimate port crates/horizon-client/src/game/remote.rs::Game::remote_animate action 0 stops sleeping, 1 and 2 emit crit and enchanted hit particles
ClientPacketListener.handleHurtAnimation port crates/horizon-client/src/game/remote.rs::Game::handle_packet HurtAnimation arm: own player's hurt tilt, or a mob's hurt time
ClientPacketListener.handleSetSpawn port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetDefaultSpawnPosition arm; gap: minor: only an overworld spawn is kept, other dimensions are dropped
ClientPacketListener.handleAddTransientBlockPacket missing minor: the transient block shown while a falling block lands is not drawn; the block update still arrives
ClientPacketListener.findTotem missing player: the totem of undying pop-up over the screen is not shown when death protection triggers; Horizon has no item activation
ClientPacketListener.handleSetExperience port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetExperience arm
ClientPacketListener.determineLevelLoadingReason port crates/horizon-client/src/game.rs::Game::loading_reason gap: player: only the in-frame game picks a reason; a dedicated server join or dimension change shows no level loading screen
ClientPacketListener.handleOpenScreen port crates/horizon-client/src/game/remote.rs::Game::remote_open_screen
ClientPacketListener.handleSetCursorItem port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetCursorItem arm; gap: minor: sets the carried stack even while the creative screen is open
ClientPacketListener.handleSetPlayerInventory port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetPlayerInventory arm: slots 0-35, armour 36-39, off hand 40
ClientPacketListener.handleContainerContent port crates/horizon-client/src/game/remote.rs::Game::handle_packet ContainerSetContent arm: each slot, then the carried stack
ClientPacketListener.handleBlockEntityData port crates/horizon-client/src/game/remote.rs::Game::remote_block_entity_data
ClientPacketListener.handleContainerSetData port crates/horizon-client/src/game/remote.rs::Game::handle_packet ContainerSetData arms (lectern, furnace, crafter, brewing); station containers go to remote_stations.rs::Game::remote_station_data
ClientPacketListener.handleContainerClose port crates/horizon-client/src/game/remote.rs::Game::handle_packet ContainerClose arm: closes the inventory screen; gap: minor: a server close while the creative screen is open is ignored
ClientPacketListener.handleBlockEvent port crates/horizon-client/src/game/remote.rs::Game::handle_packet BlockEvent arm: client block event, then the block entity event
ClientPacketListener.handleGameEvent port crates/horizon-client/src/game/remote.rs::Game::handle_packet GameEvent arm; gap: player: no handling for 0 (no spawn point message), 6 (arrow hit sound), 9 (puffer fish sting), 12 (limited crafting); 5 (demo) and 13 (chunk load start) are minor
ClientPacketListener.openDemoIntroScreen skip:other demo mode only (GameEvent 5); Horizon has no demo mode
ClientPacketListener.startWaitingForNewLevel missing player: no level loading screen after a dimension change or respawn on a dedicated server; a join shows only the 'Loading terrain' status text
ClientPacketListener.handleMapItemData port crates/horizon-client/src/game/maps.rs::Game::remote_map_item_data
ClientPacketListener.handleUpdateAdvancementsPacket port crates/horizon-client/src/game/advancements.rs::Game::remote_advancements UpdateAdvancements arm passes the added icons
ClientPacketListener.handleSelectAdvancementsTab missing minor: the server's advancement tab choice is ignored
ClientPacketListener.handleCommands port crates/horizon-client/src/game/remote.rs::Game::handle_packet Commands arm: command tree from the packet, merged with Horizon's own
ClientPacketListener.handleStopSoundEvent port crates/horizon-client/src/game/remote.rs::Game::handle_packet StopSound arm: audio stop_sounds
ClientPacketListener.handleUpdateRecipes skip:data Horizon reads recipes from its own tables; the server's list is not read
ClientPacketListener.handleLookAt missing player: a server command that turns the camera (/faceplayer, /tp with facing) does not turn this player's view
ClientPacketListener.handleTagQueryPacket skip:debug answer to a debug NBT query; Horizon sends none
ClientPacketListener.handleAwardStats port crates/horizon-client/src/game/remote.rs::Game::handle_packet AwardStats arm: known stat keys into the stats values
ClientPacketListener.handleRecipeBookAdd port crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_add
ClientPacketListener.handleRecipeBookRemove port crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_remove
ClientPacketListener.handleRecipeBookSettings port crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_settings
ClientPacketListener.refreshRecipeBook inline crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_add the collections rebuild lazily through the client version bump
ClientPacketListener.updateTags skip:data the server's tag payload is not read; tags come from Horizon's own data (net.rs configure ignores UpdateTags)
ClientPacketListener.handleUpdateTags skip:data the server's tag payload is not read; tags come from Horizon's own data (net.rs configure ignores UpdateTags)
ClientPacketListener.handleChangeDifficulty port crates/horizon-client/src/game/remote.rs::Game::handle_packet ChangeDifficulty arm
ClientPacketListener.handleSetCamera missing player: a spectator's view does not attach to the entity it spectates (for example /spectate)
ClientPacketListener.handleInitializeBorder port crates/horizon-client/src/game/remote.rs::Game::handle_packet InitializeBorder arm: centre, size or lerp, absolute max, warnings
ClientPacketListener.handleSetBorderCenter port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderCenter arm
ClientPacketListener.handleSetBorderLerpSize port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderLerpSize arm
ClientPacketListener.handleSetBorderSize port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderSize arm
ClientPacketListener.handleSetBorderWarningDistance port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderWarningDistance arm
ClientPacketListener.handleSetBorderWarningDelay port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderWarningDelay arm
ClientPacketListener.handleTitlesClear port crates/horizon-client/src/game/remote.rs::Game::handle_packet ClearTitles arm: clear, optionally reset the times
ClientPacketListener.handleCustomChatCompletions missing minor: server-sent custom chat completions are not used
ClientPacketListener.setTitleText port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetTitleText arm
ClientPacketListener.setSubtitleText port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetSubtitleText arm
ClientPacketListener.setTitlesAnimation port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetTitlesAnimation arm
ClientPacketListener.handleTabListCustomisation port crates/horizon-client/src/game/remote.rs::Game::handle_packet TabList arm: empty text clears the header or footer
ClientPacketListener.handleRemoveMobEffect port crates/horizon-client/src/game/remote.rs::Game::handle_packet RemoveMobEffect arm; gap: minor: only the player's own effects are removed
ClientPacketListener.handlePlayerInfoRemove port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerInfoRemove arm
ClientPacketListener.handlePlayerInfoUpdate port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerInfoUpdate arm: new entries, then listing, latency, name, hat, list order and game mode for tab players
ClientPacketListener.applyPlayerInfoUpdate inline crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: the own player's game-mode update does not change the local mode; INITIALIZE_CHAT is ignored
ClientPacketListener.initializeChatSession missing minor: other players' chat keys are not kept or checked, so no signature check is made on their messages
ClientPacketListener.enforcesSecureChat missing minor: the Login flag enforces_secure_chat is not read
ClientPacketListener.handleGameRuleValues port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_rules
ClientPacketListener.handleSoundEntityEvent missing unsure: no SoundEntity arm; a sound attached to an entity would be silent unless mob_sounds.rs plays it
ClientPacketListener.handleAddObjective port crates/horizon-client/src/game/remote.rs::Game::remote_objective add, remove and update of an objective
ClientPacketListener.handleSetScore port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetScore arm
ClientPacketListener.handleResetScore port crates/horizon-client/src/game/remote.rs::Game::handle_packet ResetScore arm
ClientPacketListener.handleSetDisplayObjective port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetDisplayObjective arm: display slot names
ClientPacketListener.handleSetPlayerTeamPacket port crates/horizon-client/src/game/remote.rs::Game::remote_team
ClientPacketListener.tryAddParticle skip:other the try/catch that drops one particle that fails to add; Horizon's particle ids are typed, so nothing is caught
ClientPacketListener.handlePlaceRecipe port crates/horizon-client/src/game/recipe_book.rs::Game::remote_ghost_recipe
ClientPacketListener.handleLightUpdatePacket port crates/horizon-client/src/game/remote_chunks.rs::Game::remote_light_update
ClientPacketListener.handleMerchantOffers port crates/horizon-client/src/game/remote.rs::Game::remote_merchant_offers
ClientPacketListener.handleSetChunkCacheRadius port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetChunkCacheRadius arm: streaming radius, columns out of range dropped
ClientPacketListener.handleSetSimulationDistance missing minor: the server's simulation distance is not read
ClientPacketListener.handleSetChunkCacheCenter port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetChunkCacheCenter arm
ClientPacketListener.handleBlockChangedAck port crates/horizon-client/src/game/remote.rs::Game::end_predictions
ClientPacketListener.handleBundlePacket inline crates/horizon-client/src/net.rs::receive_play bundle delimiters are dropped; the packets inside arrive as a stream and are handled one by one, in order
ClientPacketListener.handleProjectilePowerPacket missing minor: the projectile's acceleration power is not read (ProjectilePower has no arm)
ClientPacketListener.handleChunkBatchFinished port crates/horizon-client/src/game/remote.rs::Game::handle_packet ChunkBatchFinished arm; gap: minor: answers with a fixed 64 chunks per tick, not a measured rate
ClientPacketListener.handleTestInstanceBlockStatus skip:debug status for the test instance block editor (developer blocks); Horizon has no editor
ClientPacketListener.handleDebugChunkValue skip:debug debug overlay values from the server
ClientPacketListener.handleDebugBlockValue skip:debug debug overlay values from the server
ClientPacketListener.handleDebugEntityValue skip:debug debug overlay values from the server
ClientPacketListener.handleDebugEvent skip:debug debug overlay events from the server
ClientPacketListener.handleGameTestHighlightPos skip:debug game test block highlight (developer tool)
ClientPacketListener.isAcceptingMessages inline crates/horizon-client/src/game/remote.rs::Game::send_chat gap: minor: only the chat abilities are checked; no connection-open check
ClientPacketListener.getPlayerInfo skip:java a map lookup by UUID; Horizon keeps the player list in remote.tab_players and remote.players
ClientPacketListener.getPlayerInfoIgnoreCase missing unsure: a case-insensitive name lookup for profiles (LocalPlayerResolver); Horizon has none
ClientPacketListener.markMessageAsProcessed missing minor: no secure-chat acknowledgement tracking; Horizon's chat is unsigned
ClientPacketListener.sendChatAcknowledgement missing minor: no ChatAck is sent; Horizon's chat is unsigned
ClientPacketListener.sendCommand port crates/horizon-client/src/game/remote.rs::Game::send_chat gap: player: commands are sent unsigned, including ones with signable arguments such as /msg
ClientPacketListener.verifyCommand missing minor: no parse or permission check before a command is sent, so the confirmation screens never show
ClientPacketListener.isValidCommand missing minor: only used by verifyCommand, which is missing
ClientPacketListener.openSendConfirmationWindow missing minor: the confirmation screen before a command with problems is not shown
ClientPacketListener.openCommandSendConfirmationWindow missing minor: the same confirmation screen for click-to-run commands is not shown
ClientPacketListener.openSignedCommandSendConfirmationWindow missing minor: no confirmation screen for a command that needs a signature
ClientPacketListener.broadcastClientInformation port crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: only view distance and chat visibility are sent, and only when they change
ClientPacketListener.notifyPlayerLoaded port crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: gated on the player's column being lit, not on its sections being compiled
ClientPacketListener.setKeyPair missing player: no chat key pair is ever set, so chat and commands stay unsigned
ClientRegistryLayer.createRegistryAccess skip:data registry layers come from Horizon's own tables
ClientSuggestionProvider.getOnlinePlayerNames port crates/horizon-client/src/game/remote.rs::Game::remote_online_names sorted names of the server's player list
ClientSuggestionProvider.getCustomTabSuggestions missing minor: server-sent custom completions are not used
ClientSuggestionProvider.getSelectedEntities missing minor: no suggestion for the entity under the crosshair
ClientSuggestionProvider.suggestRegistryElements port crates/horizon-command/src/args.rs::suggest_resources registry ids come from Horizon's registry tables
ClientSuggestionProvider.getRelevantCoordinates port crates/horizon-command/src/args.rs::suggest_coordinates the block under the crosshair for block positions
ClientSuggestionProvider.getAbsoluteCoordinates port crates/horizon-command/src/args.rs::suggest_coordinates gap: minor: the exact hit point is not offered; Vec3 arguments only get ~
ClientSuggestionProvider.modifyCustomCompletions missing minor: server-sent custom completions are not stored
KnownPacksManager.trySelectingPacks skip:data Horizon answers SelectKnownPacks with no packs, so the server sends full registries (net.rs configure)
LegacyServerPinger.channelActive skip:other legacy pre-1.7 server-list ping, not used by this client
LegacyServerPinger.channelRead0 skip:other legacy pre-1.7 server-list ping, not used by this client
LevelLoadTracker.startClientLoad inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: player: no loading screen state; the wait is only for the player's column to be lit
LevelLoadTracker.isLevelReady inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: readiness is the player's column being lit; vanilla's close delay is not kept
LevelLoadTracker.getPlayerCompiledSectionCallback inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: the gate is the column being lit, not the section being compiled
LevelLoadTracker.WaitingForPlayerChunk.isReady inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: no timeout and no spectator or dead exemption
LevelLoadTracker.WaitingForServer.loadingPacketsReceived missing minor: the server's level-chunks-start event (GameEvent 13) is ignored
MultiPlayerGameMode.startPrediction port crates/horizon-client/src/game/remote.rs::Game::next_sequence gap: minor: only the sequence number; each caller builds and sends its own packet
MultiPlayerGameMode.ensureHasSentCarriedItem inline crates/horizon-client/src/game/remote.rs::Game::remote_send_state the SetCarriedItem check, made on every send
MultiPlayerGameMode.performUseItemOn port crates/horizon-client/src/game/remote.rs::Game::remote_use_block gap: minor: no world-border check, and UseItemOn always sends world_border false
MultiPlayerGameMode.createPlayer port crates/horizon-client/src/game/remote.rs::Game::remote_teleport gap: minor: the player is created on the first position packet, not at login
MultiPlayerGameMode.handleCreativeModeItemAdd inline crates/horizon-client/src/game/remote.rs::Game::remote_send_state gap: minor: the creative inventory is sent as a per-tick diff, with no feature-flag check
MultiPlayerGameMode.handleCreativeModeItemDrop port crates/horizon-client/src/game/remote.rs::Game::remote_creative_drop gap: minor: no check that another container screen is open
MultiPlayerGameMode.getDestroyStage port crates/horizon-client/src/first_person.rs::Destroying::stage
RegistryDataCollector.appendContents skip:data registry data for the configuration handshake; Horizon reads its own tables
RegistryDataCollector.appendTags skip:data registry tags for the configuration handshake; Horizon reads its own tables
RegistryDataCollector.loadNewElementsAndTags skip:data registry loading for the configuration handshake; Horizon reads its own tables
RegistryDataCollector.addCrashDetails skip:debug crash report details
RegistryDataCollector.loadOnlyTags skip:data registry tags for the configuration handshake; Horizon reads its own tables
RegistryDataCollector.updateComponents skip:data data component registry; Horizon reads its own tables
RegistryDataCollector.collectGameRegistries skip:data registry collection for the configuration handshake; Horizon reads its own tables
RegistryDataCollector.ContentsCollector.append skip:data registry contents collector; Horizon reads its own tables
1 ClientPacketListener.<init> port crates/horizon-client/src/game/remote.rs::Game::join_server gap: minor: clears the chat on join; vanilla restores chat state kept across a reconfiguration
2 ClientPacketListener.clearCacheSlots skip:java weak-reference cache slots; Horizon has no such cache
3 ClientPacketListener.handleAddEntity inline crates/horizon-client/src/game/remote.rs::Game::handle_packet AddEntity arm: spawn_entity, then object or projectile spawn, then motion
4 ClientPacketListener.createEntityFromPacket inline crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: the player spawns without checking that its profile is known
5 ClientPacketListener.handleSetEntityData port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: only the data indexes Horizon reads are applied (flags, names, sleep, crouch, mob fields)
6 ClientPacketListener.handleEntityPositionSync port crates/horizon-client/src/game/remote.rs::Game::move_entity absolute move with the packet rotation and on-ground flag
7 ClientPacketListener.handleTeleportEntity inline crates/horizon-client/src/game/remote.rs::Game::handle_packet TeleportEntity arm works out the relative position, then move_entity; gap: minor: a teleport of the player's former vehicle is not applied to the player
8 ClientPacketListener.handleTickingState port crates/horizon-client/src/game/remote.rs::Game::handle_packet TickingState arm: clock rate and frozen flag
9 ClientPacketListener.handleTickingStep port crates/horizon-client/src/game/remote.rs::Game::handle_packet TickingStep arm: frozen ticks to run
10 ClientPacketListener.handleMoveEntity port crates/horizon-client/src/game/remote.rs::Game::move_entity relative move and rotation from the Pos, PosRot and Rot packets
11 ClientPacketListener.handleMinecartAlongTrack missing player: the server's rail steps for a minecart are dropped, so a cart on a dedicated server follows the client's own rail physics and can drift from where the server has it
12 ClientPacketListener.handleRemoveEntities port crates/horizon-client/src/game/remote.rs::Game::remove_entity gap: minor: a removed vehicle carrying the player is not remembered for a later teleport
13 ClientPacketListener.setValuesFromPositionPacket port crates/horizon-client/src/game/remote.rs::Game::remote_teleport gap: minor: the entity case (TeleportEntity) is in the handle_packet arm, not here
14 ClientPacketListener.handleRotatePlayer port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerRotation arm; gap: minor: no ServerboundMovePlayerPacket.Rot reply is sent
15 ClientPacketListener.handleChunkBlocksUpdate port crates/horizon-client/src/game/remote.rs::Game::handle_packet SectionBlocksUpdate arm: each change through the block update
16 ClientPacketListener.handleChunksBiomes missing player: biome updates for loaded chunks are dropped, so grass, leaves and water keep the old biome colour
17 ClientPacketListener.enableChunkLight inline crates/horizon-client/src/streaming.rs::Streaming::insert_remote gap: minor: the air-only section status is not set; every section of the 3x3 columns is marked dirty
18 ClientPacketListener.handleForgetLevelChunk port crates/horizon-client/src/game/remote.rs::Game::handle_packet ForgetLevelChunk arm: Streaming::forget, block entities and renderer columns dropped
19 ClientPacketListener.queueLightRemoval inline crates/horizon-client/src/streaming.rs::Streaming::forget gap: minor: the column's light state is dropped with the column; no per-section light clearing
20 ClientPacketListener.handleBlockUpdate port crates/horizon-client/src/game/remote.rs::Game::server_block
21 ClientPacketListener.handleConfigurationStart port crates/horizon-client/src/net.rs::receive_play gap: player: no reconfiguring screen is shown and the chat state is not stored
22 ClientPacketListener.handleSystemChat port crates/horizon-client/src/game/remote.rs::Game::handle_packet SystemChat arm: overlay to the action bar, otherwise the chat
23 ClientPacketListener.handlePlayerChat port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerChat arm; gap: minor: no signature, chat index or validity checks
24 ClientPacketListener.handleDisguisedChat port crates/horizon-client/src/game/remote.rs::Game::handle_packet DisguisedChat arm
25 ClientPacketListener.handleDeleteChat missing player: a chat line the server deletes (moderation) stays on screen
26 ClientPacketListener.handleAnimate port crates/horizon-client/src/game/remote.rs::Game::remote_animate action 0 stops sleeping, 1 and 2 emit crit and enchanted hit particles
27 ClientPacketListener.handleHurtAnimation port crates/horizon-client/src/game/remote.rs::Game::handle_packet HurtAnimation arm: own player's hurt tilt, or a mob's hurt time
28 ClientPacketListener.handleSetSpawn port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetDefaultSpawnPosition arm; gap: minor: only an overworld spawn is kept, other dimensions are dropped
29 ClientPacketListener.handleAddTransientBlockPacket missing minor: the transient block shown while a falling block lands is not drawn; the block update still arrives
30 ClientPacketListener.findTotem missing player: the totem of undying pop-up over the screen is not shown when death protection triggers; Horizon has no item activation
31 ClientPacketListener.handleSetExperience port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetExperience arm
32 ClientPacketListener.determineLevelLoadingReason port crates/horizon-client/src/game.rs::Game::loading_reason gap: player: only the in-frame game picks a reason; a dedicated server join or dimension change shows no level loading screen
33 ClientPacketListener.handleOpenScreen port crates/horizon-client/src/game/remote.rs::Game::remote_open_screen
34 ClientPacketListener.handleSetCursorItem port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetCursorItem arm; gap: minor: sets the carried stack even while the creative screen is open
35 ClientPacketListener.handleSetPlayerInventory port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetPlayerInventory arm: slots 0-35, armour 36-39, off hand 40
36 ClientPacketListener.handleContainerContent port crates/horizon-client/src/game/remote.rs::Game::handle_packet ContainerSetContent arm: each slot, then the carried stack
37 ClientPacketListener.handleBlockEntityData port crates/horizon-client/src/game/remote.rs::Game::remote_block_entity_data
38 ClientPacketListener.handleContainerSetData port crates/horizon-client/src/game/remote.rs::Game::handle_packet ContainerSetData arms (lectern, furnace, crafter, brewing); station containers go to remote_stations.rs::Game::remote_station_data
39 ClientPacketListener.handleContainerClose port crates/horizon-client/src/game/remote.rs::Game::handle_packet ContainerClose arm: closes the inventory screen; gap: minor: a server close while the creative screen is open is ignored
40 ClientPacketListener.handleBlockEvent port crates/horizon-client/src/game/remote.rs::Game::handle_packet BlockEvent arm: client block event, then the block entity event
41 ClientPacketListener.handleGameEvent port crates/horizon-client/src/game/remote.rs::Game::handle_packet GameEvent arm; gap: player: no handling for 0 (no spawn point message), 6 (arrow hit sound), 9 (puffer fish sting), 12 (limited crafting); 5 (demo) and 13 (chunk load start) are minor
42 ClientPacketListener.openDemoIntroScreen skip:other demo mode only (GameEvent 5); Horizon has no demo mode
43 ClientPacketListener.startWaitingForNewLevel missing player: no level loading screen after a dimension change or respawn on a dedicated server; a join shows only the 'Loading terrain' status text
44 ClientPacketListener.handleMapItemData port crates/horizon-client/src/game/maps.rs::Game::remote_map_item_data
45 ClientPacketListener.handleUpdateAdvancementsPacket port crates/horizon-client/src/game/advancements.rs::Game::remote_advancements UpdateAdvancements arm passes the added icons
46 ClientPacketListener.handleSelectAdvancementsTab missing minor: the server's advancement tab choice is ignored
47 ClientPacketListener.handleCommands port crates/horizon-client/src/game/remote.rs::Game::handle_packet Commands arm: command tree from the packet, merged with Horizon's own
48 ClientPacketListener.handleStopSoundEvent port crates/horizon-client/src/game/remote.rs::Game::handle_packet StopSound arm: audio stop_sounds
49 ClientPacketListener.handleUpdateRecipes skip:data Horizon reads recipes from its own tables; the server's list is not read
50 ClientPacketListener.handleLookAt missing player: a server command that turns the camera (/faceplayer, /tp with facing) does not turn this player's view
51 ClientPacketListener.handleTagQueryPacket skip:debug answer to a debug NBT query; Horizon sends none
52 ClientPacketListener.handleAwardStats port crates/horizon-client/src/game/remote.rs::Game::handle_packet AwardStats arm: known stat keys into the stats values
53 ClientPacketListener.handleRecipeBookAdd port crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_add
54 ClientPacketListener.handleRecipeBookRemove port crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_remove
55 ClientPacketListener.handleRecipeBookSettings port crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_settings
56 ClientPacketListener.refreshRecipeBook inline crates/horizon-client/src/game/recipe_book.rs::Game::remote_recipe_book_add the collections rebuild lazily through the client version bump
57 ClientPacketListener.updateTags skip:data the server's tag payload is not read; tags come from Horizon's own data (net.rs configure ignores UpdateTags)
58 ClientPacketListener.handleUpdateTags skip:data the server's tag payload is not read; tags come from Horizon's own data (net.rs configure ignores UpdateTags)
59 ClientPacketListener.handleChangeDifficulty port crates/horizon-client/src/game/remote.rs::Game::handle_packet ChangeDifficulty arm
60 ClientPacketListener.handleSetCamera missing player: a spectator's view does not attach to the entity it spectates (for example /spectate)
61 ClientPacketListener.handleInitializeBorder port crates/horizon-client/src/game/remote.rs::Game::handle_packet InitializeBorder arm: centre, size or lerp, absolute max, warnings
62 ClientPacketListener.handleSetBorderCenter port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderCenter arm
63 ClientPacketListener.handleSetBorderLerpSize port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderLerpSize arm
64 ClientPacketListener.handleSetBorderSize port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderSize arm
65 ClientPacketListener.handleSetBorderWarningDistance port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderWarningDistance arm
66 ClientPacketListener.handleSetBorderWarningDelay port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetBorderWarningDelay arm
67 ClientPacketListener.handleTitlesClear port crates/horizon-client/src/game/remote.rs::Game::handle_packet ClearTitles arm: clear, optionally reset the times
68 ClientPacketListener.handleCustomChatCompletions missing minor: server-sent custom chat completions are not used
69 ClientPacketListener.setTitleText port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetTitleText arm
70 ClientPacketListener.setSubtitleText port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetSubtitleText arm
71 ClientPacketListener.setTitlesAnimation port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetTitlesAnimation arm
72 ClientPacketListener.handleTabListCustomisation port crates/horizon-client/src/game/remote.rs::Game::handle_packet TabList arm: empty text clears the header or footer
73 ClientPacketListener.handleRemoveMobEffect port crates/horizon-client/src/game/remote.rs::Game::handle_packet RemoveMobEffect arm; gap: minor: only the player's own effects are removed
74 ClientPacketListener.handlePlayerInfoRemove port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerInfoRemove arm
75 ClientPacketListener.handlePlayerInfoUpdate port crates/horizon-client/src/game/remote.rs::Game::handle_packet PlayerInfoUpdate arm: new entries, then listing, latency, name, hat, list order and game mode for tab players
76 ClientPacketListener.applyPlayerInfoUpdate inline crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: the own player's game-mode update does not change the local mode; INITIALIZE_CHAT is ignored
77 ClientPacketListener.initializeChatSession missing minor: other players' chat keys are not kept or checked, so no signature check is made on their messages
78 ClientPacketListener.enforcesSecureChat missing minor: the Login flag enforces_secure_chat is not read
79 ClientPacketListener.handleGameRuleValues port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_rules
80 ClientPacketListener.handleSoundEntityEvent missing unsure: no SoundEntity arm; a sound attached to an entity would be silent unless mob_sounds.rs plays it
81 ClientPacketListener.handleAddObjective port crates/horizon-client/src/game/remote.rs::Game::remote_objective add, remove and update of an objective
82 ClientPacketListener.handleSetScore port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetScore arm
83 ClientPacketListener.handleResetScore port crates/horizon-client/src/game/remote.rs::Game::handle_packet ResetScore arm
84 ClientPacketListener.handleSetDisplayObjective port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetDisplayObjective arm: display slot names
85 ClientPacketListener.handleSetPlayerTeamPacket port crates/horizon-client/src/game/remote.rs::Game::remote_team
86 ClientPacketListener.tryAddParticle skip:other the try/catch that drops one particle that fails to add; Horizon's particle ids are typed, so nothing is caught
87 ClientPacketListener.handlePlaceRecipe port crates/horizon-client/src/game/recipe_book.rs::Game::remote_ghost_recipe
88 ClientPacketListener.handleLightUpdatePacket port crates/horizon-client/src/game/remote_chunks.rs::Game::remote_light_update
89 ClientPacketListener.handleMerchantOffers port crates/horizon-client/src/game/remote.rs::Game::remote_merchant_offers
90 ClientPacketListener.handleSetChunkCacheRadius port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetChunkCacheRadius arm: streaming radius, columns out of range dropped
91 ClientPacketListener.handleSetSimulationDistance missing minor: the server's simulation distance is not read
92 ClientPacketListener.handleSetChunkCacheCenter port crates/horizon-client/src/game/remote.rs::Game::handle_packet SetChunkCacheCenter arm
93 ClientPacketListener.handleBlockChangedAck port crates/horizon-client/src/game/remote.rs::Game::end_predictions
94 ClientPacketListener.handleBundlePacket inline crates/horizon-client/src/net.rs::receive_play bundle delimiters are dropped; the packets inside arrive as a stream and are handled one by one, in order
95 ClientPacketListener.handleProjectilePowerPacket missing minor: the projectile's acceleration power is not read (ProjectilePower has no arm)
96 ClientPacketListener.handleChunkBatchFinished port crates/horizon-client/src/game/remote.rs::Game::handle_packet ChunkBatchFinished arm; gap: minor: answers with a fixed 64 chunks per tick, not a measured rate
97 ClientPacketListener.handleTestInstanceBlockStatus skip:debug status for the test instance block editor (developer blocks); Horizon has no editor
98 ClientPacketListener.handleDebugChunkValue skip:debug debug overlay values from the server
99 ClientPacketListener.handleDebugBlockValue skip:debug debug overlay values from the server
100 ClientPacketListener.handleDebugEntityValue skip:debug debug overlay values from the server
101 ClientPacketListener.handleDebugEvent skip:debug debug overlay events from the server
102 ClientPacketListener.handleGameTestHighlightPos skip:debug game test block highlight (developer tool)
103 ClientPacketListener.isAcceptingMessages inline crates/horizon-client/src/game/remote.rs::Game::send_chat gap: minor: only the chat abilities are checked; no connection-open check
104 ClientPacketListener.getPlayerInfo skip:java a map lookup by UUID; Horizon keeps the player list in remote.tab_players and remote.players
105 ClientPacketListener.getPlayerInfoIgnoreCase missing unsure: a case-insensitive name lookup for profiles (LocalPlayerResolver); Horizon has none
106 ClientPacketListener.markMessageAsProcessed missing minor: no secure-chat acknowledgement tracking; Horizon's chat is unsigned
107 ClientPacketListener.sendChatAcknowledgement missing minor: no ChatAck is sent; Horizon's chat is unsigned
108 ClientPacketListener.sendCommand port crates/horizon-client/src/game/remote.rs::Game::send_chat gap: player: commands are sent unsigned, including ones with signable arguments such as /msg
109 ClientPacketListener.verifyCommand missing minor: no parse or permission check before a command is sent, so the confirmation screens never show
110 ClientPacketListener.isValidCommand missing minor: only used by verifyCommand, which is missing
111 ClientPacketListener.openSendConfirmationWindow missing minor: the confirmation screen before a command with problems is not shown
112 ClientPacketListener.openCommandSendConfirmationWindow missing minor: the same confirmation screen for click-to-run commands is not shown
113 ClientPacketListener.openSignedCommandSendConfirmationWindow missing minor: no confirmation screen for a command that needs a signature
114 ClientPacketListener.broadcastClientInformation port crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: only view distance and chat visibility are sent, and only when they change
115 ClientPacketListener.notifyPlayerLoaded port crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: gated on the player's column being lit, not on its sections being compiled
116 ClientPacketListener.setKeyPair missing player: no chat key pair is ever set, so chat and commands stay unsigned
117 ClientRegistryLayer.createRegistryAccess skip:data registry layers come from Horizon's own tables
118 ClientSuggestionProvider.getOnlinePlayerNames port crates/horizon-client/src/game/remote.rs::Game::remote_online_names sorted names of the server's player list
119 ClientSuggestionProvider.getCustomTabSuggestions missing minor: server-sent custom completions are not used
120 ClientSuggestionProvider.getSelectedEntities missing minor: no suggestion for the entity under the crosshair
121 ClientSuggestionProvider.suggestRegistryElements port crates/horizon-command/src/args.rs::suggest_resources registry ids come from Horizon's registry tables
122 ClientSuggestionProvider.getRelevantCoordinates port crates/horizon-command/src/args.rs::suggest_coordinates the block under the crosshair for block positions
123 ClientSuggestionProvider.getAbsoluteCoordinates port crates/horizon-command/src/args.rs::suggest_coordinates gap: minor: the exact hit point is not offered; Vec3 arguments only get ~
124 ClientSuggestionProvider.modifyCustomCompletions missing minor: server-sent custom completions are not stored
125 KnownPacksManager.trySelectingPacks skip:data Horizon answers SelectKnownPacks with no packs, so the server sends full registries (net.rs configure)
126 LegacyServerPinger.channelActive skip:other legacy pre-1.7 server-list ping, not used by this client
127 LegacyServerPinger.channelRead0 skip:other legacy pre-1.7 server-list ping, not used by this client
128 LevelLoadTracker.startClientLoad inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: player: no loading screen state; the wait is only for the player's column to be lit
129 LevelLoadTracker.isLevelReady inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: readiness is the player's column being lit; vanilla's close delay is not kept
130 LevelLoadTracker.getPlayerCompiledSectionCallback inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: the gate is the column being lit, not the section being compiled
131 LevelLoadTracker.WaitingForPlayerChunk.isReady inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_level gap: minor: no timeout and no spectator or dead exemption
132 LevelLoadTracker.WaitingForServer.loadingPacketsReceived missing minor: the server's level-chunks-start event (GameEvent 13) is ignored
133 MultiPlayerGameMode.startPrediction port crates/horizon-client/src/game/remote.rs::Game::next_sequence gap: minor: only the sequence number; each caller builds and sends its own packet
134 MultiPlayerGameMode.ensureHasSentCarriedItem inline crates/horizon-client/src/game/remote.rs::Game::remote_send_state the SetCarriedItem check, made on every send
135 MultiPlayerGameMode.performUseItemOn port crates/horizon-client/src/game/remote.rs::Game::remote_use_block gap: minor: no world-border check, and UseItemOn always sends world_border false
136 MultiPlayerGameMode.createPlayer port crates/horizon-client/src/game/remote.rs::Game::remote_teleport gap: minor: the player is created on the first position packet, not at login
137 MultiPlayerGameMode.handleCreativeModeItemAdd inline crates/horizon-client/src/game/remote.rs::Game::remote_send_state gap: minor: the creative inventory is sent as a per-tick diff, with no feature-flag check
138 MultiPlayerGameMode.handleCreativeModeItemDrop port crates/horizon-client/src/game/remote.rs::Game::remote_creative_drop gap: minor: no check that another container screen is open
139 MultiPlayerGameMode.getDestroyStage port crates/horizon-client/src/first_person.rs::Destroying::stage
140 RegistryDataCollector.appendContents skip:data registry data for the configuration handshake; Horizon reads its own tables
141 RegistryDataCollector.appendTags skip:data registry tags for the configuration handshake; Horizon reads its own tables
142 RegistryDataCollector.loadNewElementsAndTags skip:data registry loading for the configuration handshake; Horizon reads its own tables
143 RegistryDataCollector.addCrashDetails skip:debug crash report details
144 RegistryDataCollector.loadOnlyTags skip:data registry tags for the configuration handshake; Horizon reads its own tables
145 RegistryDataCollector.updateComponents skip:data data component registry; Horizon reads its own tables
146 RegistryDataCollector.collectGameRegistries skip:data registry collection for the configuration handshake; Horizon reads its own tables
147 RegistryDataCollector.ContentsCollector.append skip:data registry contents collector; Horizon reads its own tables
+150
View File
@@ -0,0 +1,150 @@
ServerData.write port crates/horizon-protocol/src/servers.rs::ServerEntry::to_tag gap: minor: no acceptedCodeOfConduct entry (Horizon never stores code of conduct acceptance)
ServerData.read port crates/horizon-protocol/src/servers.rs::ServerEntry::from_tag gap: minor: acceptedCodeOfConduct is not read
ServerData.copyNameIconFrom inline crates/horizon-client/src/multiplayer.rs::Screen::click the Edit save writes name, ip and pack setting and keeps the icon
ServerData.copyFrom inline crates/horizon-client/src/multiplayer.rs::Screen::click Edit opens the form pre-filled from the entry (name, ip, pack setting)
ServerData.validateIcon port crates/horizon-client/src/multiplayer.rs::icon_pixels gap: minor: only 64x64 PNGs are kept; vanilla keeps any PNG up to 1024x1024 in servers.dat
ServerList.get missing minor: Direct Connect never looks up a saved entry by address, so its saved pack setting and icon are not used
ServerList.unhide missing minor: no hidden-server list (vanilla keeps up to 16 direct-join entries)
ServerList.remove port crates/horizon-client/src/multiplayer.rs::Screen::click Delete confirm removes the selected row and saves
ServerList.add port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: direct-join entries are not kept hidden (hidden=true)
ServerList.swap port crates/horizon-client/src/multiplayer.rs::Screen::click arrow click on a row swaps it with its neighbour and saves
ServerList.set missing minor: no write-back of one saved entry by name and address (only the code-of-conduct save uses it)
ServerStatusPinger.pingServer port crates/horizon-client/src/multiplayer.rs::ping_all gap: minor: no unknown-host message; one thread per server with a 5 s timeout
ServerStatusPinger.onPingFailed port crates/horizon-client/src/multiplayer.rs::ping_all failed ping stores Ping::Failed, shown as can't-connect in the row
ServerStatusPinger.pingLegacyServer missing player: a server that answers only the old legacy ping shows as incompatible with its version and player count in vanilla; Horizon shows it as unreachable
ServerStatusPinger.tick skip:other Horizon pings on plain threads, so there are no connections to tick
ServerStatusPinger.removeAll skip:other pings are not cancelled on screen close; threads end on their own timeout
SessionSearchTrees.rebuildAfterLanguageChange skip:java creative search reads names at query time, so there are no trees to rebuild
SessionSearchTrees.getTooltipLines inline crates/horizon-client/src/creative.rs::Creative::from_json search lines come pre-stripped from the export and are read here
SessionSearchTrees.updateCreativeTags inline crates/horizon-client/src/creative.rs::Creative::from_json tag index comes from the export's tag lists
SessionSearchTrees.updateCreativeTooltips inline crates/horizon-client/src/creative.rs::Creative::from_json name index comes from the export's tooltip lines
ChatAbilities.selectVisibleMessages port crates/horizon-client/src/chat.rs::ChatAbilities::shows source filter: client lines always, player and server lines per the abilities
ChatAbilities.Builder.build inline crates/horizon-client/src/chat.rs::ChatAbilities::new restrictions come from the Chat option alone; new() maps the visibility to them
ChatListener.tick missing player: the Chat Delay option does nothing; lines show at once instead of after the delay
ChatListener.setMessageDelay missing player: no delayed-message queue, so Chat Delay has no effect
ChatListener.flushQueue missing player: no queue to flush (part of Chat Delay)
ChatListener.removeFromDelayedMessageQueue missing minor: only matters while a delayed message is queued
ChatListener.handleMessage missing player: nothing is held back, so Chat Delay is ignored
ChatListener.handlePlayerChatMessage port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: player: no Only Show Secure Chat filter, no server filter-mask text, no block or friend-only hiding of chat lines
ChatListener.handleChatMessageError missing player: a signed chat line that fails validation shows no red chat.validation_error line; Horizon checks no chat signatures (rare on most servers)
ChatListener.handleDisguisedChatMessage port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: no narration and no chat log entry
ChatListener.showMessageToPlayer port crates/horizon-client/src/game/remote.rs::Game::chat_line gap: player: trust, block, friend-only and secure-only checks are not run before showing
ChatListener.evaluateTrustLevel missing player: no secure, modified or not-secure marking, so unsigned lines show with no Not Secure bar and Only Show Secure Chat does nothing
ChatListener.logPlayerMessage skip:service feeds the chat log that chat reports read
ChatListener.logSystemMessage skip:service feeds the chat log that chat reports read
ChatListener.handleSystemMessage port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: hide-matched-names and friend filtering are not applied to system lines
ChatListener.guessChatUUID skip:service social lookup of a name in a system line, used only for blocking and hiding
ChatListener.isSenderLocalPlayer missing minor: only feeds the trust level check
ChatLog.codec skip:java serializer of the chat log
ChatLog.loggedChatEvents skip:service chat log for chat reports
ChatLog.push skip:service chat log for chat reports
ChatLog.lookup skip:service chat log for chat reports
ChatTrustLevel.evaluate missing player: no Not Secure or Modified marking on chat lines, and Only Show Secure Chat does nothing (see createTag)
ChatTrustLevel.isModified missing minor: only feeds the Modified marking
ChatTrustLevel.containsModifiedStyle missing minor: only feeds the Modified marking
ChatTrustLevel.createTag missing player: no grey Not Secure bar or Modified tag on player chat lines
GuiMessage.splitLines port crates/horizon-client/src/chat.rs::Chat::add_lines gap: minor: no width reserved for a tag icon; Horizon draws no icon tags
GuiMessageTag.chatModified missing minor: no Modified tag text or icon (needs the trust check)
GuiMessageTag.Icon.extractRenderState missing minor: the chat_modified icon is never drawn
LoggedChatMessage.Player.toContentComponent skip:service chat report view of a logged line
LoggedChatMessage.Player.toNarrationComponent skip:service chat report view of a logged line
LoggedChatMessage.Player.toHeadingComponent skip:service chat report view of a logged line
LoggedChatMessage.Player.getTimeComponent skip:service chat report view of a logged line
AbuseReportSender.Services.send skip:service chat and player reporting
AbuseReportSender.Services.getErrorDescription skip:service chat and player reporting
BanReason.byId skip:service chat and player reporting
ChatReport.toggleReported skip:service chat and player reporting
ChatReport.copy skip:service chat and player reporting
ChatReport.Builder.hasContent skip:service chat and player reporting
ChatReport.Builder.checkBuildable skip:service chat and player reporting
ChatReport.Builder.build skip:service chat and player reporting
ChatReport.Builder.buildEvidence skip:service chat and player reporting
ChatReport.Builder.buildReportedChatMessage skip:service chat and player reporting
ChatReportContextBuilder.collectAllContext skip:service chat and player reporting
ChatReportContextBuilder.acceptContext skip:service chat and player reporting
ChatReportContextBuilder.Collector.accept skip:service chat and player reporting
ChatReportContextBuilder.Collector.isComplete skip:service chat and player reporting
NameReport.copy skip:service chat and player reporting
NameReport.Builder.checkBuildable skip:service chat and player reporting
NameReport.Builder.build skip:service chat and player reporting
ReportEnvironment.thirdPartyServerInfo skip:service chat and player reporting
ReportEnvironment.realmInfo skip:service chat and player reporting
ReportEnvironment.getClientVersion skip:service chat and player reporting
ReportReason.getIncompatibleCategories skip:service chat and player reporting
ReportingContext.create skip:service chat and player reporting
ReportingContext.draftReportHandled skip:service chat and player reporting
ReportingContext.hasDraftReportFor skip:service chat and player reporting
SkinReport.copy skip:service chat and player reporting
SkinReport.Builder.hasContent skip:service chat and player reporting
SkinReport.Builder.checkBuildable skip:service chat and player reporting
SkinReport.Builder.build skip:service chat and player reporting
BlockStatePredictionHandler.updateKnownServerState port crates/horizon-client/src/game/remote.rs::Game::server_block a predicted block keeps its predicted state; the server state is remembered
BlockStatePredictionHandler.startPredicting port crates/horizon-client/src/game/remote.rs::Game::predict_break gap: minor: the sequence number is passed in by the caller instead of counted here
AddressCheck.createFromService missing minor: no block-list suppliers are loaded, so no address is refused on connect
ServerAddress.isValidAddress port crates/horizon-protocol/src/servers.rs::parse_address gap: minor: no IDN check on the host name
ServerAddress.equals skip:java value equality; Horizon compares the strings
ServerNameResolver.resolveAddress port crates/horizon-protocol/src/resolver.rs::resolve gap: minor: no block-list check on the resolved address
ServerRedirectHandler.createDnsSrvRedirectHandler port crates/horizon-protocol/src/resolver.rs::srv_redirect SRV lookup of _minecraft._tcp on port 25565
AbstractBoatRenderer.submit port crates/horizon-client/src/game/boats.rs::Game::boat_geometry gap: player: no bubble-column wobble (bubbleAngle tilt); the rest of the transform, hurt tilt and paddles are drawn
AbstractBoatRenderer.extractRenderState inline crates/horizon-client/src/game/boats.rs::Game::boat_geometry gap: player: bubbleAngle is not read, so boats in bubble columns do not wobble
AbstractCubeMobRenderer.downscaleSlightly port crates/horizon-client/src/mobs/cube.rs::scale slime only: the 0.999 scale and small lift
AbstractCubeMobRenderer.applySizeAndSquish port crates/horizon-client/src/mobs/cube.rs::scale size and squish scale
AbstractCubeMobRenderer.extractRenderState port crates/horizon-client/src/mobs/cube.rs::scale squish and size are read from the mob at draw time
AbstractHoglinRenderer.extractRenderState port crates/horizon-client/src/mobs/piglin.rs::hoglin_anim the headbutt count (anim_ticks) drives the head pose
AbstractHorseRenderer.extractRenderState port crates/horizon-client/src/mobs/equine.rs::anim eat, stand and mouth poses; saddle and armour come from render.rs layers
AbstractMinecartRenderer.submit port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry gap: player: no hurt tilt when a cart is hit (hurt_time is not read here); minor: no per-cart offset jitter
AbstractMinecartRenderer.newRender missing minor: experimental minecart movement (new render path) is not implemented
AbstractMinecartRenderer.oldRender port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry rail-based draw is the path Horizon has
AbstractMinecartRenderer.newExtractState missing minor: experimental minecart movement (new render path) is not implemented
AbstractMinecartRenderer.oldExtractState port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry rail front and back points are taken from the cart's rail position
AbstractMinecartRenderer.getRenderOffset missing minor: only the new render path offsets the cart
AbstractSkeletonRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::setup gap: player: a skeleton's freeze-conversion shake (its isShaking) is not drawn; the aggressive and bow flags are read in setup
AbstractSkeletonRenderer.getArmPose port crates/horizon-client/src/mobs/anim.rs::setup bow-and-arrow arm pose when aggressive with a bow
AbstractZombieRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::setup aggressive arms (zombie arm pose)
AbstractZombieRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting zombies and husks shake
AgeableMobRenderer.submit port crates/horizon-client/src/mobs/render.rs::body baby or adult model choice
AllayRenderer.extractRenderState port crates/horizon-client/src/mobs/allay.rs::animate dance, spin and hold clocks
ArmadilloRenderer.extractRenderState port crates/horizon-client/src/mobs/armadillo.rs::animate roll-out, roll-up and peek states; hiding_in_shell covers the shell flag
ArmorModelSet.get skip:java container lookup of baked models
ArmorModelSet.map skip:java container of baked models
ArmorModelSet.putFrom skip:java container of baked models
ArmorModelSet.bake skip:data models are loaded from Horizon's assets, not baked from layer locations
ArmorStandRenderer.extractRenderState port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry wiggle, small, marker and poses are read there
ArmorStandRenderer.submit port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry small or big model
ArmorStandRenderer.setupRotations port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry the wiggle turn after a hit
ArmorStandRenderer.getRenderType port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry gap: minor: the translucent marker variant is not split out
ArrowRenderer.submit inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry the arrow model is drawn here, turned by its yaw and pitch
ArrowRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry arrow yaw and pitch are read here
AxolotlRenderer.extractRenderState port crates/horizon-client/src/mobs/axolotl.rs::Animation::tick in-water, on-ground, moving and playing-dead factors are updated here; poses in body_anim::axolotl
BatRenderer.extractRenderState port crates/horizon-client/src/mobs/bat.rs::setup_animation_states flying and resting states; resting() is the flag
BeeRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::bee stinger, wings on the ground, angry and roll read there
BreezeRenderer.extractRenderState port crates/horizon-client/src/mobs/breeze.rs::anim idle, shoot, slide, inhale and long-jump states
CamelRenderer.createCamelSaddleLayer port crates/horizon-client/src/mobs/render.rs::layers camel uses the equine saddle branch
CamelRenderer.extractAdditionalState port crates/horizon-client/src/mobs/camel.rs::animation_states sit, stand, idle and dash states; the dash cooldown is in dash()
CatRenderer.extractRenderState port crates/horizon-client/src/mobs/tame.rs::anim gap: player: sitting and roll poses are drawn; lie-down (lieDownAmount) and relaxed poses are not, so a cat never lies down
ChickenRenderer.bakeModels skip:data models are loaded from Horizon's assets
ChickenRenderer.submit port crates/horizon-client/src/mobs/render.rs::body adult, baby and cold model choice
ChickenRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body texture by variant and age
ChickenRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::setup wing flap and flap speed; the variant is read in render.rs::body
CodRenderer.setupRotations missing player: a cod out of water is not turned onto its side and in water does not sway; salmon and tropical fish share this
CopperGolemRenderer.extractRenderState port crates/horizon-client/src/mobs/copper_golem.rs::anim chest and idle animation states; the weathering texture comes from texture()
CowRenderer.bakeModels skip:data models are loaded from Horizon's assets
CowRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant texture, baby texture for babies
CowRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::body variant is read there
CowRenderer.submit port crates/horizon-client/src/mobs/render.rs::body model per variant and age
CreakingRenderer.extractRenderState port crates/horizon-client/src/mobs/creaking.rs::animate attack, invulnerability and death clocks
CreeperRenderer.extractRenderState port crates/horizon-client/src/overlay.rs::creeper_progress white flash from swelling; the charged layer is in render.rs (energy swirl)
CushionRenderer.extractRenderState port crates/horizon-client/src/game/cushions.rs::Game::cushion_geometry yaw and colour texture are read there
CushionRenderer.submit port crates/horizon-client/src/game/cushions.rs::Game::cushion_geometry turned to its facing and drawn
DisplayRenderer.getSkyLightLevel port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry brightness override
DisplayRenderer.getBlockLightLevel port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry brightness override
DisplayRenderer.getShadowRadius missing minor: display shadows are not drawn (shadow_radius is stored and not read)
DisplayRenderer.getShadowStrength missing minor: display shadows are not drawn (shadow_strength is stored and not read)
DisplayRenderer.submit port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry gap: player: only text displays are drawn; block and item displays are not
DisplayRenderer.calculateOrientation port crates/horizon-client/src/text_display.rs::TextDisplayData::matrix billboard orientation (fixed, horizontal, vertical, center)
DisplayRenderer.extractRenderState port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry interpolation progress and the entity yaw and pitch are read there
DisplayRenderer.BlockDisplayRenderer.extractRenderState missing player: block display entities are invisible; the remote path tracks only text displays
DisplayRenderer.ItemDisplayRenderer.extractRenderState missing player: item display entities are invisible
DisplayRenderer.ItemDisplayRenderer.submitInner missing player: item displays draw nothing
DisplayRenderer.TextDisplayRenderer.extractRenderState port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry render state comes from the text display's metadata
DisplayRenderer.TextDisplayRenderer.submitInner port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry text, background and opacity
1 ServerData.write port crates/horizon-protocol/src/servers.rs::ServerEntry::to_tag gap: minor: no acceptedCodeOfConduct entry (Horizon never stores code of conduct acceptance)
2 ServerData.read port crates/horizon-protocol/src/servers.rs::ServerEntry::from_tag gap: minor: acceptedCodeOfConduct is not read
3 ServerData.copyNameIconFrom inline crates/horizon-client/src/multiplayer.rs::Screen::click the Edit save writes name, ip and pack setting and keeps the icon
4 ServerData.copyFrom inline crates/horizon-client/src/multiplayer.rs::Screen::click Edit opens the form pre-filled from the entry (name, ip, pack setting)
5 ServerData.validateIcon port crates/horizon-client/src/multiplayer.rs::icon_pixels gap: minor: only 64x64 PNGs are kept; vanilla keeps any PNG up to 1024x1024 in servers.dat
6 ServerList.get missing minor: Direct Connect never looks up a saved entry by address, so its saved pack setting and icon are not used
7 ServerList.unhide missing minor: no hidden-server list (vanilla keeps up to 16 direct-join entries)
8 ServerList.remove port crates/horizon-client/src/multiplayer.rs::Screen::click Delete confirm removes the selected row and saves
9 ServerList.add port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: direct-join entries are not kept hidden (hidden=true)
10 ServerList.swap port crates/horizon-client/src/multiplayer.rs::Screen::click arrow click on a row swaps it with its neighbour and saves
11 ServerList.set missing minor: no write-back of one saved entry by name and address (only the code-of-conduct save uses it)
12 ServerStatusPinger.pingServer port crates/horizon-client/src/multiplayer.rs::ping_all gap: minor: no unknown-host message; one thread per server with a 5 s timeout
13 ServerStatusPinger.onPingFailed port crates/horizon-client/src/multiplayer.rs::ping_all failed ping stores Ping::Failed, shown as can't-connect in the row
14 ServerStatusPinger.pingLegacyServer missing player: a server that answers only the old legacy ping shows as incompatible with its version and player count in vanilla; Horizon shows it as unreachable
15 ServerStatusPinger.tick skip:other Horizon pings on plain threads, so there are no connections to tick
16 ServerStatusPinger.removeAll skip:other pings are not cancelled on screen close; threads end on their own timeout
17 SessionSearchTrees.rebuildAfterLanguageChange skip:java creative search reads names at query time, so there are no trees to rebuild
18 SessionSearchTrees.getTooltipLines inline crates/horizon-client/src/creative.rs::Creative::from_json search lines come pre-stripped from the export and are read here
19 SessionSearchTrees.updateCreativeTags inline crates/horizon-client/src/creative.rs::Creative::from_json tag index comes from the export's tag lists
20 SessionSearchTrees.updateCreativeTooltips inline crates/horizon-client/src/creative.rs::Creative::from_json name index comes from the export's tooltip lines
21 ChatAbilities.selectVisibleMessages port crates/horizon-client/src/chat.rs::ChatAbilities::shows source filter: client lines always, player and server lines per the abilities
22 ChatAbilities.Builder.build inline crates/horizon-client/src/chat.rs::ChatAbilities::new restrictions come from the Chat option alone; new() maps the visibility to them
23 ChatListener.tick missing player: the Chat Delay option does nothing; lines show at once instead of after the delay
24 ChatListener.setMessageDelay missing player: no delayed-message queue, so Chat Delay has no effect
25 ChatListener.flushQueue missing player: no queue to flush (part of Chat Delay)
26 ChatListener.removeFromDelayedMessageQueue missing minor: only matters while a delayed message is queued
27 ChatListener.handleMessage missing player: nothing is held back, so Chat Delay is ignored
28 ChatListener.handlePlayerChatMessage port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: player: no Only Show Secure Chat filter, no server filter-mask text, no block or friend-only hiding of chat lines
29 ChatListener.handleChatMessageError missing player: a signed chat line that fails validation shows no red chat.validation_error line; Horizon checks no chat signatures (rare on most servers)
30 ChatListener.handleDisguisedChatMessage port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: no narration and no chat log entry
31 ChatListener.showMessageToPlayer port crates/horizon-client/src/game/remote.rs::Game::chat_line gap: player: trust, block, friend-only and secure-only checks are not run before showing
32 ChatListener.evaluateTrustLevel missing player: no secure, modified or not-secure marking, so unsigned lines show with no Not Secure bar and Only Show Secure Chat does nothing
33 ChatListener.logPlayerMessage skip:service feeds the chat log that chat reports read
34 ChatListener.logSystemMessage skip:service feeds the chat log that chat reports read
35 ChatListener.handleSystemMessage port crates/horizon-client/src/game/remote.rs::Game::handle_packet gap: minor: hide-matched-names and friend filtering are not applied to system lines
36 ChatListener.guessChatUUID skip:service social lookup of a name in a system line, used only for blocking and hiding
37 ChatListener.isSenderLocalPlayer missing minor: only feeds the trust level check
38 ChatLog.codec skip:java serializer of the chat log
39 ChatLog.loggedChatEvents skip:service chat log for chat reports
40 ChatLog.push skip:service chat log for chat reports
41 ChatLog.lookup skip:service chat log for chat reports
42 ChatTrustLevel.evaluate missing player: no Not Secure or Modified marking on chat lines, and Only Show Secure Chat does nothing (see createTag)
43 ChatTrustLevel.isModified missing minor: only feeds the Modified marking
44 ChatTrustLevel.containsModifiedStyle missing minor: only feeds the Modified marking
45 ChatTrustLevel.createTag missing player: no grey Not Secure bar or Modified tag on player chat lines
46 GuiMessage.splitLines port crates/horizon-client/src/chat.rs::Chat::add_lines gap: minor: no width reserved for a tag icon; Horizon draws no icon tags
47 GuiMessageTag.chatModified missing minor: no Modified tag text or icon (needs the trust check)
48 GuiMessageTag.Icon.extractRenderState missing minor: the chat_modified icon is never drawn
49 LoggedChatMessage.Player.toContentComponent skip:service chat report view of a logged line
50 LoggedChatMessage.Player.toNarrationComponent skip:service chat report view of a logged line
51 LoggedChatMessage.Player.toHeadingComponent skip:service chat report view of a logged line
52 LoggedChatMessage.Player.getTimeComponent skip:service chat report view of a logged line
53 AbuseReportSender.Services.send skip:service chat and player reporting
54 AbuseReportSender.Services.getErrorDescription skip:service chat and player reporting
55 BanReason.byId skip:service chat and player reporting
56 ChatReport.toggleReported skip:service chat and player reporting
57 ChatReport.copy skip:service chat and player reporting
58 ChatReport.Builder.hasContent skip:service chat and player reporting
59 ChatReport.Builder.checkBuildable skip:service chat and player reporting
60 ChatReport.Builder.build skip:service chat and player reporting
61 ChatReport.Builder.buildEvidence skip:service chat and player reporting
62 ChatReport.Builder.buildReportedChatMessage skip:service chat and player reporting
63 ChatReportContextBuilder.collectAllContext skip:service chat and player reporting
64 ChatReportContextBuilder.acceptContext skip:service chat and player reporting
65 ChatReportContextBuilder.Collector.accept skip:service chat and player reporting
66 ChatReportContextBuilder.Collector.isComplete skip:service chat and player reporting
67 NameReport.copy skip:service chat and player reporting
68 NameReport.Builder.checkBuildable skip:service chat and player reporting
69 NameReport.Builder.build skip:service chat and player reporting
70 ReportEnvironment.thirdPartyServerInfo skip:service chat and player reporting
71 ReportEnvironment.realmInfo skip:service chat and player reporting
72 ReportEnvironment.getClientVersion skip:service chat and player reporting
73 ReportReason.getIncompatibleCategories skip:service chat and player reporting
74 ReportingContext.create skip:service chat and player reporting
75 ReportingContext.draftReportHandled skip:service chat and player reporting
76 ReportingContext.hasDraftReportFor skip:service chat and player reporting
77 SkinReport.copy skip:service chat and player reporting
78 SkinReport.Builder.hasContent skip:service chat and player reporting
79 SkinReport.Builder.checkBuildable skip:service chat and player reporting
80 SkinReport.Builder.build skip:service chat and player reporting
81 BlockStatePredictionHandler.updateKnownServerState port crates/horizon-client/src/game/remote.rs::Game::server_block a predicted block keeps its predicted state; the server state is remembered
82 BlockStatePredictionHandler.startPredicting port crates/horizon-client/src/game/remote.rs::Game::predict_break gap: minor: the sequence number is passed in by the caller instead of counted here
83 AddressCheck.createFromService missing minor: no block-list suppliers are loaded, so no address is refused on connect
84 ServerAddress.isValidAddress port crates/horizon-protocol/src/servers.rs::parse_address gap: minor: no IDN check on the host name
85 ServerAddress.equals skip:java value equality; Horizon compares the strings
86 ServerNameResolver.resolveAddress port crates/horizon-protocol/src/resolver.rs::resolve gap: minor: no block-list check on the resolved address
87 ServerRedirectHandler.createDnsSrvRedirectHandler port crates/horizon-protocol/src/resolver.rs::srv_redirect SRV lookup of _minecraft._tcp on port 25565
88 AbstractBoatRenderer.submit port crates/horizon-client/src/game/boats.rs::Game::boat_geometry gap: player: no bubble-column wobble (bubbleAngle tilt); the rest of the transform, hurt tilt and paddles are drawn
89 AbstractBoatRenderer.extractRenderState inline crates/horizon-client/src/game/boats.rs::Game::boat_geometry gap: player: bubbleAngle is not read, so boats in bubble columns do not wobble
90 AbstractCubeMobRenderer.downscaleSlightly port crates/horizon-client/src/mobs/cube.rs::scale slime only: the 0.999 scale and small lift
91 AbstractCubeMobRenderer.applySizeAndSquish port crates/horizon-client/src/mobs/cube.rs::scale size and squish scale
92 AbstractCubeMobRenderer.extractRenderState port crates/horizon-client/src/mobs/cube.rs::scale squish and size are read from the mob at draw time
93 AbstractHoglinRenderer.extractRenderState port crates/horizon-client/src/mobs/piglin.rs::hoglin_anim the headbutt count (anim_ticks) drives the head pose
94 AbstractHorseRenderer.extractRenderState port crates/horizon-client/src/mobs/equine.rs::anim eat, stand and mouth poses; saddle and armour come from render.rs layers
95 AbstractMinecartRenderer.submit port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry gap: player: no hurt tilt when a cart is hit (hurt_time is not read here); minor: no per-cart offset jitter
96 AbstractMinecartRenderer.newRender missing minor: experimental minecart movement (new render path) is not implemented
97 AbstractMinecartRenderer.oldRender port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry rail-based draw is the path Horizon has
98 AbstractMinecartRenderer.newExtractState missing minor: experimental minecart movement (new render path) is not implemented
99 AbstractMinecartRenderer.oldExtractState port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry rail front and back points are taken from the cart's rail position
100 AbstractMinecartRenderer.getRenderOffset missing minor: only the new render path offsets the cart
101 AbstractSkeletonRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::setup gap: player: a skeleton's freeze-conversion shake (its isShaking) is not drawn; the aggressive and bow flags are read in setup
102 AbstractSkeletonRenderer.getArmPose port crates/horizon-client/src/mobs/anim.rs::setup bow-and-arrow arm pose when aggressive with a bow
103 AbstractZombieRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::setup aggressive arms (zombie arm pose)
104 AbstractZombieRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting zombies and husks shake
105 AgeableMobRenderer.submit port crates/horizon-client/src/mobs/render.rs::body baby or adult model choice
106 AllayRenderer.extractRenderState port crates/horizon-client/src/mobs/allay.rs::animate dance, spin and hold clocks
107 ArmadilloRenderer.extractRenderState port crates/horizon-client/src/mobs/armadillo.rs::animate roll-out, roll-up and peek states; hiding_in_shell covers the shell flag
108 ArmorModelSet.get skip:java container lookup of baked models
109 ArmorModelSet.map skip:java container of baked models
110 ArmorModelSet.putFrom skip:java container of baked models
111 ArmorModelSet.bake skip:data models are loaded from Horizon's assets, not baked from layer locations
112 ArmorStandRenderer.extractRenderState port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry wiggle, small, marker and poses are read there
113 ArmorStandRenderer.submit port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry small or big model
114 ArmorStandRenderer.setupRotations port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry the wiggle turn after a hit
115 ArmorStandRenderer.getRenderType port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_geometry gap: minor: the translucent marker variant is not split out
116 ArrowRenderer.submit inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry the arrow model is drawn here, turned by its yaw and pitch
117 ArrowRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry arrow yaw and pitch are read here
118 AxolotlRenderer.extractRenderState port crates/horizon-client/src/mobs/axolotl.rs::Animation::tick in-water, on-ground, moving and playing-dead factors are updated here; poses in body_anim::axolotl
119 BatRenderer.extractRenderState port crates/horizon-client/src/mobs/bat.rs::setup_animation_states flying and resting states; resting() is the flag
120 BeeRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::bee stinger, wings on the ground, angry and roll read there
121 BreezeRenderer.extractRenderState port crates/horizon-client/src/mobs/breeze.rs::anim idle, shoot, slide, inhale and long-jump states
122 CamelRenderer.createCamelSaddleLayer port crates/horizon-client/src/mobs/render.rs::layers camel uses the equine saddle branch
123 CamelRenderer.extractAdditionalState port crates/horizon-client/src/mobs/camel.rs::animation_states sit, stand, idle and dash states; the dash cooldown is in dash()
124 CatRenderer.extractRenderState port crates/horizon-client/src/mobs/tame.rs::anim gap: player: sitting and roll poses are drawn; lie-down (lieDownAmount) and relaxed poses are not, so a cat never lies down
125 ChickenRenderer.bakeModels skip:data models are loaded from Horizon's assets
126 ChickenRenderer.submit port crates/horizon-client/src/mobs/render.rs::body adult, baby and cold model choice
127 ChickenRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body texture by variant and age
128 ChickenRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::setup wing flap and flap speed; the variant is read in render.rs::body
129 CodRenderer.setupRotations missing player: a cod out of water is not turned onto its side and in water does not sway; salmon and tropical fish share this
130 CopperGolemRenderer.extractRenderState port crates/horizon-client/src/mobs/copper_golem.rs::anim chest and idle animation states; the weathering texture comes from texture()
131 CowRenderer.bakeModels skip:data models are loaded from Horizon's assets
132 CowRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant texture, baby texture for babies
133 CowRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::body variant is read there
134 CowRenderer.submit port crates/horizon-client/src/mobs/render.rs::body model per variant and age
135 CreakingRenderer.extractRenderState port crates/horizon-client/src/mobs/creaking.rs::animate attack, invulnerability and death clocks
136 CreeperRenderer.extractRenderState port crates/horizon-client/src/overlay.rs::creeper_progress white flash from swelling; the charged layer is in render.rs (energy swirl)
137 CushionRenderer.extractRenderState port crates/horizon-client/src/game/cushions.rs::Game::cushion_geometry yaw and colour texture are read there
138 CushionRenderer.submit port crates/horizon-client/src/game/cushions.rs::Game::cushion_geometry turned to its facing and drawn
139 DisplayRenderer.getSkyLightLevel port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry brightness override
140 DisplayRenderer.getBlockLightLevel port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry brightness override
141 DisplayRenderer.getShadowRadius missing minor: display shadows are not drawn (shadow_radius is stored and not read)
142 DisplayRenderer.getShadowStrength missing minor: display shadows are not drawn (shadow_strength is stored and not read)
143 DisplayRenderer.submit port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry gap: player: only text displays are drawn; block and item displays are not
144 DisplayRenderer.calculateOrientation port crates/horizon-client/src/text_display.rs::TextDisplayData::matrix billboard orientation (fixed, horizontal, vertical, center)
145 DisplayRenderer.extractRenderState port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry interpolation progress and the entity yaw and pitch are read there
146 DisplayRenderer.BlockDisplayRenderer.extractRenderState missing player: block display entities are invisible; the remote path tracks only text displays
147 DisplayRenderer.ItemDisplayRenderer.extractRenderState missing player: item display entities are invisible
148 DisplayRenderer.ItemDisplayRenderer.submitInner missing player: item displays draw nothing
149 DisplayRenderer.TextDisplayRenderer.extractRenderState port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry render state comes from the text display's metadata
150 DisplayRenderer.TextDisplayRenderer.submitInner port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry text, background and opacity
+149
View File
@@ -0,0 +1,149 @@
DolphinRenderer.extractRenderState port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry gap: minor: isMoving (dolphin motion flag) is not read
DragonFireballRenderer.submit port crates/horizon-client/src/game/dragon.rs::Game::dragon_fireball_geometry
DragonFireballRenderer.buildQuad inline crates/horizon-client/src/game/dragon.rs::Game::dragon_fireball_geometry quad built inline
DragonFireballRenderer.vertex inline crates/horizon-client/src/game/dragon.rs::Game::dragon_fireball_geometry vertex built inline
EndCrystalRenderer.submit port crates/horizon-client/src/game/end.rs::Game::end_crystal_geometry model at scale 2 and the beam to the target
EndCrystalRenderer.extractRenderState inline crates/horizon-client/src/game/end.rs::Game::end_crystal_geometry age, show-bottom and beam target read from the crystal there
EndCrystalRenderer.shouldRender inline crates/horizon-client/src/game/end.rs::Game::end_crystal_geometry gap: minor: no frustum test; crystals within 256 blocks always draw, beam included
EnderDragonRenderer.submit port crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry
EnderDragonRenderer.submitRays port crates/horizon-client/src/game/dragon.rs::Game::dragon_rays
EnderDragonRenderer.submitCrystalBeams port crates/horizon-client/src/game/dragon.rs::Game::crystal_beam
EnderDragonRenderer.extractRenderState inline crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry flap, death fade, hurt overlay, nearest-crystal beam and egg distance read there
EndermanRenderer.getRenderOffset missing player: an angry enderman does not jitter sideways (vanilla random offset each frame); no such offset in the mob draw path
EndermanRenderer.extractRenderState inline crates/horizon-client/src/mobs/enderman.rs::anim gap: minor: carried block is drawn by game/mob_blocks.rs, not from this pose
EntityRenderDispatcher.getRenderer skip:other renderer lookup; Horizon dispatches by mob kind in game.rs::Game::entity_geometry and game/creatures.rs::Game::mob_geometry
EntityRenderDispatcher.getAvatarRenderer port crates/horizon-client/src/mobs/render.rs::body slim or wide arm model by skin
EntityRenderDispatcher.shouldRender skip:other frustum culling only; Horizon culls with its own entity culler
EntityRenderDispatcher.extractEntity skip:other render-state wrapper with a crash report; Horizon has no separate extraction stage
EntityRenderDispatcher.fillRendererDetails skip:debug crash report detail
EntityRenderDispatcher.onResourceManagerReload skip:data renderer rebuild on resource reload; Horizon loads its assets from files
EntityRenderer.getBlockLightLevel port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry burning mobs drawn at full light (game/creatures.rs::Game::mob_geometry); other entities use world light
EntityRenderer.submit inline crates/horizon-client/src/game.rs::Game::entity_geometry leash ropes and name tags drawn in their own passes from there
EntityRenderer.shouldShowName port crates/horizon-client/src/game/names.rs::Game::name_tags named mob under the crosshair
EntityRenderer.submitNameDisplay port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry
EntityRenderer.createRenderState skip:java allocates the render-state object
EntityRenderer.extractRenderState inline crates/horizon-client/src/game.rs::Game::entity_geometry positions, invisibility, leash state, outline colour and light read there
EntityRenderer.finalizeRenderState inline crates/horizon-client/src/game.rs::Game::entity_geometry shadow pass after the entities
EntityRenderer.extractShadowPiece port crates/horizon-client/src/shadows.rs::shadow block-top shadow pieces with fall-off
EntityRenderer.getServerSideEntity skip:other no callers in vanilla (dead code)
EntityRenderers.createEntityRenderers skip:data renderer registration table
EntityRenderers.createAvatarRenderers skip:data renderer registration table
EntityRenderers.validateRegistrations skip:debug startup check that every type has a renderer
EvokerFangsRenderer.submit port crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry bite progress and facing
EvokerFangsRenderer.extractRenderState inline crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry yaw and bite progress read there
ExperienceOrbRenderer.submit inline crates/horizon-client/src/game.rs::Game::entity_geometry orb billboards with the pulsing colour, in the entity pass
ExperienceOrbRenderer.vertex inline crates/horizon-client/src/game.rs::Game::entity_geometry vertex built inline
FallingBlockRenderer.shouldRender missing minor: a falling block inside an identical block (vanilla hides it that tick) is still drawn; no such check in game.rs or falling_block.rs
FallingBlockRenderer.submit inline crates/horizon-client/src/game.rs::Game::entity_geometry falling block pass with its baked block model
FallingBlockRenderer.extractRenderState inline crates/horizon-client/src/game.rs::Game::entity_geometry position, state, biome tint and light read there
FireworkEntityRenderer.extractRenderState port crates/horizon-client/src/game/fireworks.rs::Game::rocket_geometry angled rocket keeps its direction
FishingHookRenderer.shouldRender inline crates/horizon-client/src/game/fishing.rs::Game::fishing_geometry hook drawn only with an owner
FishingHookRenderer.submit port crates/horizon-client/src/game/fishing.rs::Game::fishing_geometry hook quad and line
FishingHookRenderer.vertex inline crates/horizon-client/src/game/fishing.rs::Game::fishing_geometry hook quad vertex
FishingHookRenderer.stringVertex inline crates/horizon-client/src/game/fishing.rs::Game::fishing_line line strip vertices
FishingHookRenderer.extractRenderState port crates/horizon-client/src/game/fishing.rs::Game::rod_hand_position line origin from the rod hand
FoxRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::fox crouch, sleep, sit, faceplant, pounce and head roll
FrogRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::frog jump, croak, tongue and swim animations; climate texture in mobs/render.rs::body
GiantMobRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid gap: minor: giant model comes from the species table (giant#main), not a separate renderer
GlowSquidRenderer.getBlockLightLevel port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: player: glow squid dark-tick light is not read, so its body never brightens in the dark
GoatRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::goat horns and ramming head pitch
GuardianRenderer.shouldRender skip:other frustum culling of the beam only; the guardian body is culled by the entity culler
GuardianRenderer.getPosition inline crates/horizon-client/src/mobs/guardian.rs::beam_geometry target and eye positions
GuardianRenderer.submit port crates/horizon-client/src/mobs/guardian.rs::beam_geometry beam to the attack target
GuardianRenderer.vertex inline crates/horizon-client/src/mobs/guardian.rs::beam_geometry vertex built inline
GuardianRenderer.extractRenderState port crates/horizon-client/src/mobs/guardian.rs::beam beam attack scale and time
HappyGhastRenderer.getBoundingBoxForCulling skip:other culling box only
HappyGhastRenderer.extractRenderState port crates/horizon-client/src/mobs/happy_ghast.rs::wearing_harness gap: player: the body item (harness) is not drawn on the ghast; only the harnessed state is read
HoglinRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting hoglin shakes
HorseRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
HorseRenderer.extractRenderState port crates/horizon-client/src/mobs/equine.rs::markings variant, markings and armour layer
HumanoidMobRenderer.getArmPose port crates/horizon-client/src/mobs/anim.rs::pose_arm spear and empty arm poses
HumanoidMobRenderer.usesSpearPose inline crates/horizon-client/src/mobs/anim.rs::pose_arm spear pose check folded into the arm pose
HumanoidMobRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid arm poses for both arms
HumanoidMobRenderer.extractHumanoidRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid crouch, swim, use-item hand, elytra and armour state
HumanoidMobRenderer.getEquipmentIfRenderable port crates/horizon-client/src/mobs/render.rs::humanoid_armor armour slot shown only when renderable
IllagerRenderer.extractRenderState port crates/horizon-client/src/mobs/illager.rs::holding_crossbow crossbow charge and aggressive pose
IllusionerRenderer.extractRenderState port crates/horizon-client/src/mobs/illusioner.rs::offsets mirror-image offsets; casting flag
IronGolemRenderer.extractRenderState port crates/horizon-client/src/mobs/golem.rs::client_tick gap: player: the offered poppy is not drawn in the golem hand and cracks from damage are not drawn
IronGolemRenderer.setupRotations missing player: an iron golem does not tilt side to side as it walks (IronGolemRenderer.setupRotations); only arm and leg swing is ported in mobs/golem.rs
ItemEntityRenderer.extractRenderState port crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry bob offset, spin and spread
ItemEntityRenderer.renderMultipleFromCount port crates/horizon-client/src/item_render.rs::cluster_poses copies of a stack laid out by depth
ItemFrameRenderer.submit port crates/horizon-client/src/game/frames.rs::Game::frame_geometry frame model, item or map
ItemFrameRenderer.getRenderOffset inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry offset in front of the wall
ItemFrameRenderer.extractRenderState inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry direction, item, rotation, glow and map read there
LeashKnotRenderer.submit port crates/horizon-client/src/game/leads.rs::Game::leash_geometry knot drawn with the rope pass
LightningBoltRenderer.quad inline crates/horizon-client/src/gfx/lightning.rs::geometry quad built inline
LivingEntityRenderer.getBoundingBoxForCulling skip:other culling box only (dragon-head inflate)
LivingEntityRenderer.isEntityUpsideDown port crates/horizon-client/src/mobs/render.rs::base_transform_at upside-down flip for Dinnerbone and Grumm
LivingEntityRenderer.isUpsideDownName inline crates/horizon-client/src/mobs/render.rs::base_transform_at name check folded into the flip
LivingEntityRenderer.extractNameTags port crates/horizon-client/src/game/names.rs::Game::name_tags gap: minor: unsure whether the name-tag distance attributes are read
LivingEntityRenderer.solveBodyRot missing minor: unsure: no rider body-rotation clamp (85 degrees, 50 degree lag) found; mob AI turn limits only
LlamaRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
LlamaRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::llama chest flag; decor layers in mobs/render.rs::layers
LlamaSpitRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: minor: drawn as a camera-facing sprite, not the spit model with its rotation
LlamaSpitRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry rotation read there
MobRenderer.checkMagicName inline crates/horizon-client/src/mobs/render.rs::body gap: player: Toast is handled; a sheep named jeb_ does not get rainbow wool
MushroomCowRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
MushroomCowRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::body gap: player: the mushroom block on the back is not drawn
NautilusRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::layers saddle and armour layers
OcelotRenderer.extractRenderState missing player: an ocelot keeps the standing pose when crouching or sprinting; no ocelot pose code in mobs/
OminousItemSpawnerRenderer.extractRenderState inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::ominous_item_spawner_geometry item and age read there
OminousItemSpawnerRenderer.submit port crates/horizon-client/src/game/ominous_item_spawner.rs::Game::ominous_item_spawner_geometry spinning item cluster, scaled in during the first 50 ticks
PaintingRenderer.submit port crates/horizon-client/src/game/paintings.rs::Game::painting_geometry
PaintingRenderer.extractRenderState inline crates/horizon-client/src/game/paintings.rs::Game::painting_geometry per-segment light read there
PaintingRenderer.renderPainting port crates/horizon-client/src/game/paintings.rs::Game::painting_geometry front, back and edge quads
PaintingRenderer.vertex inline crates/horizon-client/src/game/paintings.rs::Game::painting_geometry vertex built inline
PandaRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::panda sit, lie, sneeze and roll states
ParrotRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::parrot pose and flap angle
PhantomRenderer.extractRenderState port crates/horizon-client/src/mobs/phantom.rs::anim gap: player: phantom size is not read, so phantoms never grow
PhantomRenderer.scale missing player: phantoms are never drawn larger (vanilla scale 1 + 0.15 x size); no phantom size in mobs/render.rs::species_scale
PhantomRenderer.setupRotations port crates/horizon-client/src/mobs/phantom.rs::anim gap: minor: body pitch (xRot) is not applied; wings and tail are
PigRenderer.bakeModels skip:data model baking; Horizon loads model data from files
PigRenderer.submit port crates/horizon-client/src/mobs/render.rs::body cold or normal model by variant
PigRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
PigRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::layers saddle layer and variant
PiglinRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body brute, baby and zombified texture
PiglinRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid brute flag, arm pose and crossbow charge
PiglinRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting piglin shakes
PolarBearRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::polar_bear standing scale
PufferfishRenderer.submit port crates/horizon-client/src/mobs/render.rs::body small, medium or big model by size
PufferfishRenderer.setupRotations missing player: a pufferfish does not bob up and down (cos bob, 0.08 blocks); no such offset in mobs/anim.rs, body_anim.rs or aquatic.rs
RabbitRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::rabbit hop and idle head-tilt animations; Toast name in mobs/render.rs::body
RavagerRenderer.extractRenderState port crates/horizon-client/src/mobs/ravager.rs::anim stun, bite and roar clocks
SalmonRenderer.setupRotations missing player: salmon do not wiggle their body while swimming or flop on land (SalmonRenderer.setupRotations); no 4.3 amplitude or flop pose in mobs/
SheepRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::sheep_wool_rgb gap: player: sheep named jeb_ do not cycle their wool colour; head eat and sheared state read elsewhere
ShulkerBulletRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: minor: drawn as a spark sprite, not the spinning two-layer model
ShulkerBulletRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry rotation read there
ShulkerRenderer.shouldRender skip:other frustum culling only
ShulkerRenderer.getTextureLocation port crates/horizon-client/src/mobs/shulker.rs::texture colour texture
ShulkerRenderer.extractRenderState port crates/horizon-client/src/mobs/shulker.rs::rotations peek and head angles
SnifferRenderer.extractRenderState port crates/horizon-client/src/mobs/sniffer.rs::anim searching state and animation clocks
SnowGolemRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::snow_golem gap: player: a carved pumpkin on the head is not drawn; the pumpkin flag is not read
SquidRenderer.extractRenderState port crates/horizon-client/src/mobs/aquatic.rs::squid_ai_step tentacle cycle clock
SquidRenderer.setupRotations missing player: a squid does not tilt its body while swimming (xBodyRot, zBodyRot); only the vector rotation for ink exists in mobs/aquatic.rs
StriderRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body cold texture when suffocating
StriderRenderer.getShadowRadius missing minor: a baby strider keeps the full shadow (shadows.rs::shadow_params takes the species only)
StriderRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::strider saddle, suffocating and ridden states
StriderRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking suffocating strider shakes
SulfurCubeRenderer.submit port crates/horizon-client/src/mobs/sulfur_cube.rs::body normal or small model
SulfurCubeRenderer.extractRenderState port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_body_geometry fuse flash, contained block and worn head
SulfurCubeRenderer.applySizeAndSquish port crates/horizon-client/src/mobs/sulfur_cube.rs::scale size and squish scale
ThrownItemRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry thrown item sprite at its scale
ThrownItemRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry item sprite read there
ThrownTridentRenderer.submit port crates/horizon-client/src/game/trident.rs::Game::trident_geometry gap: minor: foil glint is not drawn on a thrown trident
ThrownTridentRenderer.extractRenderState inline crates/horizon-client/src/game/trident.rs::Game::trident_geometry yaw, pitch and foil read there
TippableArrowRenderer.extractRenderState missing player: a tipped arrow looks like a plain arrow; no potion colour on arrows in game/creatures.rs or projectiles.rs
TntMinecartRenderer.submitMinecartContents port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry TNT block swell and white flash
TntMinecartRenderer.submitWhiteSolidBlock inline crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry white overlay built inline
TntMinecartRenderer.extractRenderState inline crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry fuse read from the cart
TntRenderer.submit port crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry swell and white flash
TntRenderer.getSwellAmount inline crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry swell curve folded in
TntRenderer.isLit inline crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry flash every 5 ticks
TntRenderer.extractRenderState inline crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry fuse read there
TropicalFishRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body small or large texture
TropicalFishRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::body_color pattern colours
TropicalFishRenderer.submit port crates/horizon-client/src/mobs/render.rs::body small or large model
TropicalFishRenderer.setupRotations missing player: a tropical fish does not wiggle its body while swimming or flop on land (see SalmonRenderer.setupRotations); no 4.3 amplitude in mobs/
TurtleRenderer.getShadowRadius missing minor: a baby turtle keeps the full shadow (shadows.rs::shadow_params takes the species only)
TurtleRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::turtle on-land, laying and egg states
VexRenderer.extractRenderState port crates/horizon-client/src/mobs/vex.rs::anim charging pose; held item in mobs/render.rs::hand_base
1 DolphinRenderer.extractRenderState port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry gap: minor: isMoving (dolphin motion flag) is not read
2 DragonFireballRenderer.submit port crates/horizon-client/src/game/dragon.rs::Game::dragon_fireball_geometry
3 DragonFireballRenderer.buildQuad inline crates/horizon-client/src/game/dragon.rs::Game::dragon_fireball_geometry quad built inline
4 DragonFireballRenderer.vertex inline crates/horizon-client/src/game/dragon.rs::Game::dragon_fireball_geometry vertex built inline
5 EndCrystalRenderer.submit port crates/horizon-client/src/game/end.rs::Game::end_crystal_geometry model at scale 2 and the beam to the target
6 EndCrystalRenderer.extractRenderState inline crates/horizon-client/src/game/end.rs::Game::end_crystal_geometry age, show-bottom and beam target read from the crystal there
7 EndCrystalRenderer.shouldRender inline crates/horizon-client/src/game/end.rs::Game::end_crystal_geometry gap: minor: no frustum test; crystals within 256 blocks always draw, beam included
8 EnderDragonRenderer.submit port crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry
9 EnderDragonRenderer.submitRays port crates/horizon-client/src/game/dragon.rs::Game::dragon_rays
10 EnderDragonRenderer.submitCrystalBeams port crates/horizon-client/src/game/dragon.rs::Game::crystal_beam
11 EnderDragonRenderer.extractRenderState inline crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry flap, death fade, hurt overlay, nearest-crystal beam and egg distance read there
12 EndermanRenderer.getRenderOffset missing player: an angry enderman does not jitter sideways (vanilla random offset each frame); no such offset in the mob draw path
13 EndermanRenderer.extractRenderState inline crates/horizon-client/src/mobs/enderman.rs::anim gap: minor: carried block is drawn by game/mob_blocks.rs, not from this pose
14 EntityRenderDispatcher.getRenderer skip:other renderer lookup; Horizon dispatches by mob kind in game.rs::Game::entity_geometry and game/creatures.rs::Game::mob_geometry
15 EntityRenderDispatcher.getAvatarRenderer port crates/horizon-client/src/mobs/render.rs::body slim or wide arm model by skin
16 EntityRenderDispatcher.shouldRender skip:other frustum culling only; Horizon culls with its own entity culler
17 EntityRenderDispatcher.extractEntity skip:other render-state wrapper with a crash report; Horizon has no separate extraction stage
18 EntityRenderDispatcher.fillRendererDetails skip:debug crash report detail
19 EntityRenderDispatcher.onResourceManagerReload skip:data renderer rebuild on resource reload; Horizon loads its assets from files
20 EntityRenderer.getBlockLightLevel port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry burning mobs drawn at full light (game/creatures.rs::Game::mob_geometry); other entities use world light
21 EntityRenderer.submit inline crates/horizon-client/src/game.rs::Game::entity_geometry leash ropes and name tags drawn in their own passes from there
22 EntityRenderer.shouldShowName port crates/horizon-client/src/game/names.rs::Game::name_tags named mob under the crosshair
23 EntityRenderer.submitNameDisplay port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry
24 EntityRenderer.createRenderState skip:java allocates the render-state object
25 EntityRenderer.extractRenderState inline crates/horizon-client/src/game.rs::Game::entity_geometry positions, invisibility, leash state, outline colour and light read there
26 EntityRenderer.finalizeRenderState inline crates/horizon-client/src/game.rs::Game::entity_geometry shadow pass after the entities
27 EntityRenderer.extractShadowPiece port crates/horizon-client/src/shadows.rs::shadow block-top shadow pieces with fall-off
28 EntityRenderer.getServerSideEntity skip:other no callers in vanilla (dead code)
29 EntityRenderers.createEntityRenderers skip:data renderer registration table
30 EntityRenderers.createAvatarRenderers skip:data renderer registration table
31 EntityRenderers.validateRegistrations skip:debug startup check that every type has a renderer
32 EvokerFangsRenderer.submit port crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry bite progress and facing
33 EvokerFangsRenderer.extractRenderState inline crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry yaw and bite progress read there
34 ExperienceOrbRenderer.submit inline crates/horizon-client/src/game.rs::Game::entity_geometry orb billboards with the pulsing colour, in the entity pass
35 ExperienceOrbRenderer.vertex inline crates/horizon-client/src/game.rs::Game::entity_geometry vertex built inline
36 FallingBlockRenderer.shouldRender missing minor: a falling block inside an identical block (vanilla hides it that tick) is still drawn; no such check in game.rs or falling_block.rs
37 FallingBlockRenderer.submit inline crates/horizon-client/src/game.rs::Game::entity_geometry falling block pass with its baked block model
38 FallingBlockRenderer.extractRenderState inline crates/horizon-client/src/game.rs::Game::entity_geometry position, state, biome tint and light read there
39 FireworkEntityRenderer.extractRenderState port crates/horizon-client/src/game/fireworks.rs::Game::rocket_geometry angled rocket keeps its direction
40 FishingHookRenderer.shouldRender inline crates/horizon-client/src/game/fishing.rs::Game::fishing_geometry hook drawn only with an owner
41 FishingHookRenderer.submit port crates/horizon-client/src/game/fishing.rs::Game::fishing_geometry hook quad and line
42 FishingHookRenderer.vertex inline crates/horizon-client/src/game/fishing.rs::Game::fishing_geometry hook quad vertex
43 FishingHookRenderer.stringVertex inline crates/horizon-client/src/game/fishing.rs::Game::fishing_line line strip vertices
44 FishingHookRenderer.extractRenderState port crates/horizon-client/src/game/fishing.rs::Game::rod_hand_position line origin from the rod hand
45 FoxRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::fox crouch, sleep, sit, faceplant, pounce and head roll
46 FrogRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::frog jump, croak, tongue and swim animations; climate texture in mobs/render.rs::body
47 GiantMobRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid gap: minor: giant model comes from the species table (giant#main), not a separate renderer
48 GlowSquidRenderer.getBlockLightLevel port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: player: glow squid dark-tick light is not read, so its body never brightens in the dark
49 GoatRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::goat horns and ramming head pitch
50 GuardianRenderer.shouldRender skip:other frustum culling of the beam only; the guardian body is culled by the entity culler
51 GuardianRenderer.getPosition inline crates/horizon-client/src/mobs/guardian.rs::beam_geometry target and eye positions
52 GuardianRenderer.submit port crates/horizon-client/src/mobs/guardian.rs::beam_geometry beam to the attack target
53 GuardianRenderer.vertex inline crates/horizon-client/src/mobs/guardian.rs::beam_geometry vertex built inline
54 GuardianRenderer.extractRenderState port crates/horizon-client/src/mobs/guardian.rs::beam beam attack scale and time
55 HappyGhastRenderer.getBoundingBoxForCulling skip:other culling box only
56 HappyGhastRenderer.extractRenderState port crates/horizon-client/src/mobs/happy_ghast.rs::wearing_harness gap: player: the body item (harness) is not drawn on the ghast; only the harnessed state is read
57 HoglinRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting hoglin shakes
58 HorseRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
59 HorseRenderer.extractRenderState port crates/horizon-client/src/mobs/equine.rs::markings variant, markings and armour layer
60 HumanoidMobRenderer.getArmPose port crates/horizon-client/src/mobs/anim.rs::pose_arm spear and empty arm poses
61 HumanoidMobRenderer.usesSpearPose inline crates/horizon-client/src/mobs/anim.rs::pose_arm spear pose check folded into the arm pose
62 HumanoidMobRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid arm poses for both arms
63 HumanoidMobRenderer.extractHumanoidRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid crouch, swim, use-item hand, elytra and armour state
64 HumanoidMobRenderer.getEquipmentIfRenderable port crates/horizon-client/src/mobs/render.rs::humanoid_armor armour slot shown only when renderable
65 IllagerRenderer.extractRenderState port crates/horizon-client/src/mobs/illager.rs::holding_crossbow crossbow charge and aggressive pose
66 IllusionerRenderer.extractRenderState port crates/horizon-client/src/mobs/illusioner.rs::offsets mirror-image offsets; casting flag
67 IronGolemRenderer.extractRenderState port crates/horizon-client/src/mobs/golem.rs::client_tick gap: player: the offered poppy is not drawn in the golem hand and cracks from damage are not drawn
68 IronGolemRenderer.setupRotations missing player: an iron golem does not tilt side to side as it walks (IronGolemRenderer.setupRotations); only arm and leg swing is ported in mobs/golem.rs
69 ItemEntityRenderer.extractRenderState port crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry bob offset, spin and spread
70 ItemEntityRenderer.renderMultipleFromCount port crates/horizon-client/src/item_render.rs::cluster_poses copies of a stack laid out by depth
71 ItemFrameRenderer.submit port crates/horizon-client/src/game/frames.rs::Game::frame_geometry frame model, item or map
72 ItemFrameRenderer.getRenderOffset inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry offset in front of the wall
73 ItemFrameRenderer.extractRenderState inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry direction, item, rotation, glow and map read there
74 LeashKnotRenderer.submit port crates/horizon-client/src/game/leads.rs::Game::leash_geometry knot drawn with the rope pass
75 LightningBoltRenderer.quad inline crates/horizon-client/src/gfx/lightning.rs::geometry quad built inline
76 LivingEntityRenderer.getBoundingBoxForCulling skip:other culling box only (dragon-head inflate)
77 LivingEntityRenderer.isEntityUpsideDown port crates/horizon-client/src/mobs/render.rs::base_transform_at upside-down flip for Dinnerbone and Grumm
78 LivingEntityRenderer.isUpsideDownName inline crates/horizon-client/src/mobs/render.rs::base_transform_at name check folded into the flip
79 LivingEntityRenderer.extractNameTags port crates/horizon-client/src/game/names.rs::Game::name_tags gap: minor: unsure whether the name-tag distance attributes are read
80 LivingEntityRenderer.solveBodyRot missing minor: unsure: no rider body-rotation clamp (85 degrees, 50 degree lag) found; mob AI turn limits only
81 LlamaRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
82 LlamaRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::llama chest flag; decor layers in mobs/render.rs::layers
83 LlamaSpitRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: minor: drawn as a camera-facing sprite, not the spit model with its rotation
84 LlamaSpitRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry rotation read there
85 MobRenderer.checkMagicName inline crates/horizon-client/src/mobs/render.rs::body gap: player: Toast is handled; a sheep named jeb_ does not get rainbow wool
86 MushroomCowRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
87 MushroomCowRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::body gap: player: the mushroom block on the back is not drawn
88 NautilusRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::layers saddle and armour layers
89 OcelotRenderer.extractRenderState missing player: an ocelot keeps the standing pose when crouching or sprinting; no ocelot pose code in mobs/
90 OminousItemSpawnerRenderer.extractRenderState inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::ominous_item_spawner_geometry item and age read there
91 OminousItemSpawnerRenderer.submit port crates/horizon-client/src/game/ominous_item_spawner.rs::Game::ominous_item_spawner_geometry spinning item cluster, scaled in during the first 50 ticks
92 PaintingRenderer.submit port crates/horizon-client/src/game/paintings.rs::Game::painting_geometry
93 PaintingRenderer.extractRenderState inline crates/horizon-client/src/game/paintings.rs::Game::painting_geometry per-segment light read there
94 PaintingRenderer.renderPainting port crates/horizon-client/src/game/paintings.rs::Game::painting_geometry front, back and edge quads
95 PaintingRenderer.vertex inline crates/horizon-client/src/game/paintings.rs::Game::painting_geometry vertex built inline
96 PandaRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::panda sit, lie, sneeze and roll states
97 ParrotRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::parrot pose and flap angle
98 PhantomRenderer.extractRenderState port crates/horizon-client/src/mobs/phantom.rs::anim gap: player: phantom size is not read, so phantoms never grow
99 PhantomRenderer.scale missing player: phantoms are never drawn larger (vanilla scale 1 + 0.15 x size); no phantom size in mobs/render.rs::species_scale
100 PhantomRenderer.setupRotations port crates/horizon-client/src/mobs/phantom.rs::anim gap: minor: body pitch (xRot) is not applied; wings and tail are
101 PigRenderer.bakeModels skip:data model baking; Horizon loads model data from files
102 PigRenderer.submit port crates/horizon-client/src/mobs/render.rs::body cold or normal model by variant
103 PigRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body variant and baby texture
104 PigRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::layers saddle layer and variant
105 PiglinRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body brute, baby and zombified texture
106 PiglinRenderer.extractRenderState port crates/horizon-client/src/mobs/anim.rs::humanoid brute flag, arm pose and crossbow charge
107 PiglinRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting piglin shakes
108 PolarBearRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::polar_bear standing scale
109 PufferfishRenderer.submit port crates/horizon-client/src/mobs/render.rs::body small, medium or big model by size
110 PufferfishRenderer.setupRotations missing player: a pufferfish does not bob up and down (cos bob, 0.08 blocks); no such offset in mobs/anim.rs, body_anim.rs or aquatic.rs
111 RabbitRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::rabbit hop and idle head-tilt animations; Toast name in mobs/render.rs::body
112 RavagerRenderer.extractRenderState port crates/horizon-client/src/mobs/ravager.rs::anim stun, bite and roar clocks
113 SalmonRenderer.setupRotations missing player: salmon do not wiggle their body while swimming or flop on land (SalmonRenderer.setupRotations); no 4.3 amplitude or flop pose in mobs/
114 SheepRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::sheep_wool_rgb gap: player: sheep named jeb_ do not cycle their wool colour; head eat and sheared state read elsewhere
115 ShulkerBulletRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: minor: drawn as a spark sprite, not the spinning two-layer model
116 ShulkerBulletRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry rotation read there
117 ShulkerRenderer.shouldRender skip:other frustum culling only
118 ShulkerRenderer.getTextureLocation port crates/horizon-client/src/mobs/shulker.rs::texture colour texture
119 ShulkerRenderer.extractRenderState port crates/horizon-client/src/mobs/shulker.rs::rotations peek and head angles
120 SnifferRenderer.extractRenderState port crates/horizon-client/src/mobs/sniffer.rs::anim searching state and animation clocks
121 SnowGolemRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::snow_golem gap: player: a carved pumpkin on the head is not drawn; the pumpkin flag is not read
122 SquidRenderer.extractRenderState port crates/horizon-client/src/mobs/aquatic.rs::squid_ai_step tentacle cycle clock
123 SquidRenderer.setupRotations missing player: a squid does not tilt its body while swimming (xBodyRot, zBodyRot); only the vector rotation for ink exists in mobs/aquatic.rs
124 StriderRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body cold texture when suffocating
125 StriderRenderer.getShadowRadius missing minor: a baby strider keeps the full shadow (shadows.rs::shadow_params takes the species only)
126 StriderRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::strider saddle, suffocating and ridden states
127 StriderRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking suffocating strider shakes
128 SulfurCubeRenderer.submit port crates/horizon-client/src/mobs/sulfur_cube.rs::body normal or small model
129 SulfurCubeRenderer.extractRenderState port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_body_geometry fuse flash, contained block and worn head
130 SulfurCubeRenderer.applySizeAndSquish port crates/horizon-client/src/mobs/sulfur_cube.rs::scale size and squish scale
131 ThrownItemRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry thrown item sprite at its scale
132 ThrownItemRenderer.extractRenderState inline crates/horizon-client/src/game/creatures.rs::Game::mob_geometry item sprite read there
133 ThrownTridentRenderer.submit port crates/horizon-client/src/game/trident.rs::Game::trident_geometry gap: minor: foil glint is not drawn on a thrown trident
134 ThrownTridentRenderer.extractRenderState inline crates/horizon-client/src/game/trident.rs::Game::trident_geometry yaw, pitch and foil read there
135 TippableArrowRenderer.extractRenderState missing player: a tipped arrow looks like a plain arrow; no potion colour on arrows in game/creatures.rs or projectiles.rs
136 TntMinecartRenderer.submitMinecartContents port crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry TNT block swell and white flash
137 TntMinecartRenderer.submitWhiteSolidBlock inline crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry white overlay built inline
138 TntMinecartRenderer.extractRenderState inline crates/horizon-client/src/game/minecarts.rs::Game::cart_geometry fuse read from the cart
139 TntRenderer.submit port crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry swell and white flash
140 TntRenderer.getSwellAmount inline crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry swell curve folded in
141 TntRenderer.isLit inline crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry flash every 5 ticks
142 TntRenderer.extractRenderState inline crates/horizon-client/src/game/tnt.rs::Game::tnt_geometry fuse read there
143 TropicalFishRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body small or large texture
144 TropicalFishRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::body_color pattern colours
145 TropicalFishRenderer.submit port crates/horizon-client/src/mobs/render.rs::body small or large model
146 TropicalFishRenderer.setupRotations missing player: a tropical fish does not wiggle its body while swimming or flop on land (see SalmonRenderer.setupRotations); no 4.3 amplitude in mobs/
147 TurtleRenderer.getShadowRadius missing minor: a baby turtle keeps the full shadow (shadows.rs::shadow_params takes the species only)
148 TurtleRenderer.extractRenderState port crates/horizon-client/src/mobs/body_anim.rs::turtle on-land, laying and egg states
149 VexRenderer.extractRenderState port crates/horizon-client/src/mobs/vex.rs::anim charging pose; held item in mobs/render.rs::hand_base
+149
View File
@@ -0,0 +1,149 @@
VillagerRenderer.getShadowRadius missing minor: baby villagers keep the full shadow radius; shadows.rs shadow_params takes no baby flag
VillagerRenderer.extractRenderState port crates/horizon-client/src/mobs/villager.rs::anim unhappy head shake read here; gap: player: no held item is read (Horizon villagers carry none)
WanderingTraderRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::render_with the trader's unhappy counter is never ticked in vanilla (only Villager ticks it), so nothing is read
WardenRenderer.<init> port crates/horizon-client/src/mobs/warden.rs::emissive_layers the four emissive layers: bioluminescent, pulsating spots, tendrils, heart
WardenRenderer.extractRenderState port crates/horizon-client/src/mobs/warden.rs::anim tendril and heart clocks and the animation states (roar, sniff, emerge, dig, attack, sonic boom)
WindChargeRenderer.submit port crates/horizon-client/src/game/wind.rs::Game::wind_charge_geometry gap: player: the wind texture does not scroll (no xOffset), the charge is drawn with a fixed texture
WitchRenderer.extractRenderState port crates/horizon-client/src/mobs/witch.rs::anim nose wobble; gap: player: the held potion is not drawn (see WitchItemLayer.applyTranslation)
WitherBossRenderer.getTextureLocation port crates/horizon-client/src/mobs/wither.rs::texture invulnerable blink texture
WitherBossRenderer.extractRenderState port crates/horizon-client/src/mobs/wither.rs::anim invulnerable clock feeds the texture and scale; the powered glow is render.rs::energy_swirl
WitherSkullRenderer.createSkullLayer skip:data the skull model is baked into entity-models.json
WitherSkullRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: player: the skull is drawn as a flat sprite (Projectile::item_sprite), not the 3D skull model
WitherSkullRenderer.extractRenderState port crates/horizon-client/src/projectiles.rs::Projectile::item_sprite the dangerous (blue) skull texture is chosen here; gap: player: skull turns are not drawn (sprite only)
WolfRenderer.getModelTint port crates/horizon-client/src/mobs/tame.rs::tint wet shade as a vertex colour
WolfRenderer.extractRenderState port crates/horizon-client/src/mobs/tame.rs::anim tail angle, head roll and shake body roll; texture, collar and armour are read at draw
ZombieNautilusRenderer.bakeModels skip:data models are baked into entity-models.json
ZombieNautilusRenderer.submit port crates/horizon-client/src/mobs/render.rs::body model chosen by variant
ZombieNautilusRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body texture by variant
ZombieNautilusRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::layers saddle and armour layers
ZombieVillagerRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::shaking converting shake; type and profession are in layers, aggressive arms in anim
ZombieVillagerRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting zombie villagers shake
BlockDecorationLayer.submit missing player: a block placed on a copper golem's antenna is not drawn; Horizon reads the antenna slot only as the flower
BreezeEyesLayer.submit port crates/horizon-client/src/mobs/render.rs::layers breeze eyes layer, full bright
BreezeWindLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: player: the wind layer does not scroll (no texture offset, as noted in layers)
CapeLayer.hasLayer missing player: capes are never drawn; skin cape textures are downloaded (skins.rs) but no draw reads them
CapeLayer.submit missing player: capes are never drawn (see CapeLayer.hasLayer)
CarriedBlockLayer.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::mob_block_geometry the enderman's carried block
CatCollarLayer.submit port crates/horizon-client/src/mobs/render.rs::layers dyed collar
CrossedArmsItemLayer.submit missing player: a villager or wandering trader never shows an item in its folded arms (Horizon villagers carry nothing and the villager model has no right_arm for the hand lookup)
CrossedArmsItemLayer.applyTranslation missing player: no crossed-arms item placement (see CrossedArmsItemLayer.submit)
CustomHeadLayer.submit missing player: a skull or head in the head slot (player, zombie, creeper, dragon heads) is not drawn on players or mobs; only the snow golem pumpkin and mooshroom mushrooms are placed
CustomHeadLayer.resolveSkullRenderType missing player: player-head skins on worn heads are never resolved (no worn heads are drawn, see CustomHeadLayer.submit)
Deadmau5EarsLayer.submit missing minor: only a player named deadmau5 gets ears; the name tag lift for them is missing too
DolphinCarryingItemLayer.submit missing player: a dolphin carrying an item shows nothing (the dolphin model has no arm bones for the hand lookup)
DrownedOuterLayer.submit port crates/horizon-client/src/mobs/render.rs::layers drowned outer layer, adult and baby
EnergySwirlLayer.submit port crates/horizon-client/src/mobs/render.rs::energy_swirl charged creeper and powered wither swirl, drawn in render_visible
EquipmentLayerRenderer.renderLayers port crates/horizon-client/src/game/armor_stands.rs::Game::armor_layers gap: player: the leather overlay (layer 1 of the equipment asset) is never drawn, only layer 0
EquipmentLayerRenderer.getColorForLayer port crates/horizon-client/src/game/armor_stands.rs::Game::armor_layers gap: player: a dyed leather piece is drawn in the undyed brown; the stack's dyed colour is not read
EquipmentLayerRenderer.TrimTextureKey.createTextureWithNoPalette port crates/horizon-client/src/trims.rs::TrimTexture::generate a trim with no palette is used as its own texture
EyesLayer.submit port crates/horizon-client/src/mobs/render.rs::layers spider, enderman and phantom eyes
FoxHeldItemLayer.submit missing player: a fox's food in its mouth (berries, fish) is not drawn; the fox model has no arm bones for the hand lookup
HorseMarkingLayer.submit port crates/horizon-client/src/mobs/render.rs::layers horse markings layer
HumanoidArmorLayer.shouldRender port crates/horizon-client/src/mobs/render.rs::humanoid_armor slot read from the item id suffix (_helmet and so on); players use Game::armor_layers
HumanoidArmorLayer.submit port crates/horizon-client/src/mobs/render.rs::humanoid_armor armour for mobs; players use Game::armor_layers
HumanoidArmorLayer.renderArmorPiece port crates/horizon-client/src/mobs/render.rs::humanoid_armor one armour piece per slot with its layer model
HumanoidArmorLayer.getArmorModel port crates/horizon-client/src/mobs/render.rs::humanoid_armor armour model is the body's #helmet, #chestplate, #leggings or #boots part
IronGolemCrackinessLayer.submit port crates/horizon-client/src/mobs/render.rs::layers crack levels via golem::crackiness
IronGolemFlowerLayer.submit missing player: an iron golem offering a poppy raises its arm (golem anim) but no poppy is drawn in it
ItemInHandLayer.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry both hands through the item pipeline
ItemInHandLayer.useBabyOffset port crates/horizon-client/src/mobs/render.rs::hand_base baby hand offset
LivingEntityEmissiveLayer.submit port crates/horizon-client/src/mobs/render.rs::layers emissive layers drawn full bright; warden alpha is in warden::emissive_layers
LlamaDecorLayer.submit port crates/horizon-client/src/mobs/llama.rs::decor carpet, or the trader llama's blanket
LlamaDecorLayer.renderEquipment port crates/horizon-client/src/mobs/llama.rs::decor same decor model and texture
MushroomCowMushroomLayer.submitMushroomBlock port crates/horizon-client/src/game/mob_blocks.rs::Game::worn_block_geometry mushrooms on an adult mooshroom
PandaHoldsItemLayer.submit port crates/horizon-client/src/mobs/panda.rs::item_offset item in the mouth of a sitting panda, with the eating bob
ParrotOnShoulderLayer.submit missing player: a tamed parrot on a player's shoulder is not drawn
ParrotOnShoulderLayer.submitOnShoulder missing player: a parrot on a player's shoulder is not drawn (see ParrotOnShoulderLayer.submit)
PlayerItemInHandLayer.submitArmWithItem port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry gap: player: the spyglass raised to the eye is not drawn (see renderItemHeldToEye)
PlayerItemInHandLayer.renderItemHeldToEye missing player: another player using a spyglass does not hold it at the eye in third person; Horizon has no held-on-head state
RenderLayer.coloredCutoutModelCopyLayerRender port crates/horizon-client/src/mobs/render.rs::render_visible coloured cutout layers drawn in render_visible
RenderLayer.renderColoredCutoutModel port crates/horizon-client/src/mobs/render.rs::render_visible coloured cutout layers drawn in render_visible
RopesLayer.submit missing player: a harnessed happy ghast that holds a leash shows no rope model on its body
SheepWoolLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: minor: the outline-only pass for an invisible glowing sheep is not drawn
SheepWoolUndercoatLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: player: a sheep named jeb_ gets no undercoat while its wool is white (vanilla always draws it for jeb_)
SimpleEquipmentLayer.submit port crates/horizon-client/src/mobs/render.rs::layers pig, strider and nautilus saddles and the happy ghast harness
SkeletonClothingLayer.submit port crates/horizon-client/src/mobs/render.rs::layers stray and bogged overlay
SlimeOuterLayer.submit port crates/horizon-client/src/mobs/render.rs::layers translucent outer slime cube
SnowGolemHeadLayer.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::worn_block_geometry carved pumpkin on the snow golem
SpinAttackEffectLayer.submit port crates/horizon-client/src/game/perspective.rs::Game::spin_attack_geometry riptide spin model
StuckInBodyLayer.submitStuckItem missing player: arrows stuck in a player's body are not drawn (Horizon keeps no stuck-arrow count)
StuckInBodyLayer.submit missing player: arrows stuck in a player's body are not drawn (see submitStuckItem)
SulfurCubeInnerLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: player: a block swallowed by a sulfur cube is not drawn inside the shell (sulfur_cube::inner returns nothing when the cube has a body)
TropicalFishPatternLayer.submit port crates/horizon-client/src/mobs/render.rs::layers pattern on the small or large model, tinted
VillagerProfessionLayer.submit port crates/horizon-client/src/mobs/render.rs::layers type, profession and level layers; hat masks applied in render_visible
VillagerProfessionLayer.getIdentifier port crates/horizon-client/src/mobs/render.rs::layers texture paths built per type, profession and level
VillagerProfessionLayer.getHatData port crates/horizon-client/src/mobs/villager_hats.rs::VillagerHats::load hat metadata read from the resources
WingsLayer.submit port crates/horizon-client/src/game/perspective.rs::Game::player_elytra_geometry gap: minor: the wings texture comes from the equipment asset; a skin's own elytra or cape texture is not used
WingsLayer.getPlayerElytraTexture port crates/horizon-client/src/game/perspective.rs::Game::player_elytra_geometry gap: minor: a skin elytra or cape texture is never chosen
WitchItemLayer.applyTranslation missing player: a witch's potion (drunk or about to be thrown) is not drawn; the witch model has no right_arm for the hand lookup
WolfArmorLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: minor: the armour texture is fixed to the armadillo scute; the equipment asset is not read
WolfArmorLayer.maybeRenderCracks port crates/horizon-client/src/mobs/render.rs::layers cracks at three damage levels
WolfCollarLayer.submit port crates/horizon-client/src/mobs/render.rs::layers dyed collar
AvatarRenderer.<init> port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: player: no cape, ears, worn head, parrot or stuck-arrow layer; armour, held items, wings and spin are drawn
AvatarRenderer.getRenderOffset port crates/horizon-client/src/game/perspective.rs::Game::tick_player_model gap: minor: other players are not lowered 0.125 when sneaking; only the local model is
AvatarRenderer.submitNameDisplay port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry gap: minor: the 10 unit lift for ears is not applied (no ears)
AvatarRenderer.extractRenderState port crates/horizon-client/src/mobs.rs::Mob::tick_avatar_pose glide count, wings and swim read here; gap: player: arrow and stinger counts, parrots, cape, ears and the spyglass use are not read
AvatarRenderer.shouldShowName port crates/horizon-client/src/game/names.rs::Game::name_tags name tags for players and named mobs
AvatarRenderer.extractFlightData port crates/horizon-client/src/mobs/render.rs::base_transform_at glide time drives the tilt; gap: player: the body does not turn toward the flight direction (no flying yaw)
AvatarRenderer.extractCapeState missing player: capes are never drawn, so the cape flap and lean are never used
AvatarRenderer.renderRightHand port crates/horizon-client/src/game.rs::Game::hand_geometry first-person arm; gap: minor: no 0.1 radian arm tilt or sleeve toggle in hand_geometry
AvatarRenderer.renderLeftHand port crates/horizon-client/src/game.rs::Game::hand_geometry first-person arm; gap: minor: no 0.1 radian arm tilt or sleeve toggle in hand_geometry
AvatarRenderer.renderHand port crates/horizon-client/src/game.rs::Game::hand_geometry first-person arm; gap: minor: no 0.1 radian arm tilt or sleeve toggle in hand_geometry
AvatarRenderer.isEntityUpsideDown port crates/horizon-client/src/mobs/render.rs::base_transform_at Dinnerbone and Grumm flip; gap: minor: the cape-shown check is missing and the flip applies to every mob
ArmedEntityRenderState.getArmPose port crates/horizon-client/src/mobs/anim.rs::setup arm poses are chosen per species and hand inside setup
ArmedEntityRenderState.extractArmedEntityRenderState port crates/horizon-client/src/mobs/anim.rs::state swing and main arm; the held items are read in Game::held_item_geometry
AvatarRenderState.fallFlyingScale port crates/horizon-client/src/mobs/render.rs::base_transform_at glide scale: ticks squared over 100, clamped to 1
EnderDragonRenderState.getHeadPartYOffset port crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry sitting, landing and the part 6 cases
EntityRenderState.fillCrashReportCategory skip:debug crash report detail only
HumanoidRenderState.ticksUsingItem port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry use time for the hand that is using an item
ItemClusterRenderState.extractItemGroupRenderState port crates/horizon-client/src/item_render.rs::rendered_amount rendered count of the stack; the seed is taken in cluster_poses
SheepRenderState.getWoolColor port crates/horizon-client/src/mobs/render.rs::sheep_wool_rgb gap: player: a jeb_ sheep does not cycle through the rainbow (ColorLerper)
BabyModelTransform.apply skip:data baby meshes are baked into entity-models.json
HumanoidModel.createMesh skip:data humanoid mesh is baked into entity-models.json
HumanoidModel.createArmorMeshSet skip:data armour meshes are baked into entity-models.json
HumanoidModel.createBaseArmorMesh skip:data armour mesh is baked into entity-models.json
HumanoidModel.createBabyArmorMesh skip:data baby armour mesh is baked into entity-models.json
HumanoidModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid body sway and the swinging arm
Model.resetPose port crates/horizon-client/src/mobs/anim.rs::Poses::reset resets every part to its rest pose
QuadrupedModel.createBodyMesh skip:data quadruped mesh is baked into entity-models.json
QuadrupedModel.createLegs skip:data leg meshes are baked into entity-models.json
BatModel.createBodyLayer skip:data bat model is baked into entity-models.json
AllayModel.createBodyLayer skip:data allay model is baked into entity-models.json
AllayModel.translateToHand port crates/horizon-client/src/mobs/render.rs::held_item_transform gap: player: the allay's own hand transform (0.7 scale, forearm offset) is not applied; the humanoid hand offset is used
AdultArmadilloModel.createBodyLayer skip:data armadillo model is baked into entity-models.json
BabyArmadilloModel.createBodyLayer skip:data baby armadillo model is baked into entity-models.json
AdultAxolotlModel.setupAnim port crates/horizon-client/src/mobs/body_anim.rs::axolotl the axolotl pose dispatch
AdultAxolotlModel.setupLayStillOnGroundAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_lay lay-still pose on the ground
AdultAxolotlModel.setupGroundCrawlingAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_crawl ground crawl pose
AdultAxolotlModel.setupWaterHoveringAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_hover hovering in water
AdultAxolotlModel.setupSwimmingAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_swim swimming pose
AdultAxolotlModel.setupPlayDeadAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_dead playing dead
AdultAxolotlModel.applyMirrorLegRotations port crates/horizon-client/src/mobs/body_anim.rs::axolotl mirrored leg rotations, inline in axolotl
AdultBeeModel.bobUpAndDown port crates/horizon-client/src/mobs/body_anim.rs::bee adult antennae wiggle (not for babies)
BeeModel.bobUpAndDown port crates/horizon-client/src/mobs/body_anim.rs::bee bone, bob and leg swing
BeeStingerModel.createBodyLayer skip:data stinger model is baked into entity-models.json
AdultCamelModel.createBodyMesh skip:data camel mesh is baked into entity-models.json
BabyCamelModel.createBodyLayer skip:data baby camel model is baked into entity-models.json
CamelModel.applyHeadRotation port crates/horizon-client/src/mobs/camel.rs::anim head clamp and the jump cooldown lift
CamelSaddleModel.createSaddleLayer skip:data saddle model is baked into entity-models.json
AdultChickenModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::head head pitch and yaw from the state
AdultChickenModel.createBaseChickenModel skip:data chicken mesh is baked into entity-models.json
BabyChickenModel.createBodyLayer skip:data baby chicken model is baked into entity-models.json
ChickenModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup leg swing and wing flap
ColdChickenModel.createBodyLayer skip:data cold chicken model is baked into entity-models.json
BabyCowModel.createBodyLayer skip:data baby cow model is baked into entity-models.json
ColdCowModel.createBodyLayer skip:data cold cow model is baked into entity-models.json
CowModel.createBaseCowModel skip:data cow mesh is baked into entity-models.json
WarmCowModel.createBodyLayer skip:data warm cow model is baked into entity-models.json
BabyDolphinModel.createBodyLayer skip:data baby dolphin model is baked into entity-models.json
DolphinModel.createBodyLayer skip:data dolphin model is baked into entity-models.json
DolphinModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim body turn and, while moving, the tail and fin swing; gap: minor: moving is read from horizontal velocity, not the isMoving flag
AbstractEquineModel.createBodyMesh skip:data equine mesh is baked into entity-models.json
AbstractEquineModel.animateHeadPartsPlacement port crates/horizon-client/src/mobs/equine.rs::anim head part placement while eating and standing
BabyDonkeyModel.setupAnim port crates/horizon-client/src/mobs/equine.rs::anim baby donkey head pitch of -30 degrees and head part pose
BabyDonkeyModel.offsetLegPositionWhenStanding port crates/horizon-client/src/mobs/equine.rs::anim hind leg heights when standing
BabyDonkeyModel.animateHeadPartsPlacement port crates/horizon-client/src/mobs/equine.rs::anim baby donkey head part placement
BabyHorseModel.createBabyMesh skip:data baby horse mesh is baked into entity-models.json
BabyHorseModel.animateHeadPartsPlacement port crates/horizon-client/src/mobs/equine.rs::anim baby horse head part placement
DonkeyModel.createBodyLayer skip:data donkey model is baked into entity-models.json
DonkeyModel.setupAnim port crates/horizon-client/src/mobs/equine.rs::anim donkey pose
1 VillagerRenderer.getShadowRadius missing minor: baby villagers keep the full shadow radius; shadows.rs shadow_params takes no baby flag
2 VillagerRenderer.extractRenderState port crates/horizon-client/src/mobs/villager.rs::anim unhappy head shake read here; gap: player: no held item is read (Horizon villagers carry none)
3 WanderingTraderRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::render_with the trader's unhappy counter is never ticked in vanilla (only Villager ticks it), so nothing is read
4 WardenRenderer.<init> port crates/horizon-client/src/mobs/warden.rs::emissive_layers the four emissive layers: bioluminescent, pulsating spots, tendrils, heart
5 WardenRenderer.extractRenderState port crates/horizon-client/src/mobs/warden.rs::anim tendril and heart clocks and the animation states (roar, sniff, emerge, dig, attack, sonic boom)
6 WindChargeRenderer.submit port crates/horizon-client/src/game/wind.rs::Game::wind_charge_geometry gap: player: the wind texture does not scroll (no xOffset), the charge is drawn with a fixed texture
7 WitchRenderer.extractRenderState port crates/horizon-client/src/mobs/witch.rs::anim nose wobble; gap: player: the held potion is not drawn (see WitchItemLayer.applyTranslation)
8 WitherBossRenderer.getTextureLocation port crates/horizon-client/src/mobs/wither.rs::texture invulnerable blink texture
9 WitherBossRenderer.extractRenderState port crates/horizon-client/src/mobs/wither.rs::anim invulnerable clock feeds the texture and scale; the powered glow is render.rs::energy_swirl
10 WitherSkullRenderer.createSkullLayer skip:data the skull model is baked into entity-models.json
11 WitherSkullRenderer.submit port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: player: the skull is drawn as a flat sprite (Projectile::item_sprite), not the 3D skull model
12 WitherSkullRenderer.extractRenderState port crates/horizon-client/src/projectiles.rs::Projectile::item_sprite the dangerous (blue) skull texture is chosen here; gap: player: skull turns are not drawn (sprite only)
13 WolfRenderer.getModelTint port crates/horizon-client/src/mobs/tame.rs::tint wet shade as a vertex colour
14 WolfRenderer.extractRenderState port crates/horizon-client/src/mobs/tame.rs::anim tail angle, head roll and shake body roll; texture, collar and armour are read at draw
15 ZombieNautilusRenderer.bakeModels skip:data models are baked into entity-models.json
16 ZombieNautilusRenderer.submit port crates/horizon-client/src/mobs/render.rs::body model chosen by variant
17 ZombieNautilusRenderer.getTextureLocation port crates/horizon-client/src/mobs/render.rs::body texture by variant
18 ZombieNautilusRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::layers saddle and armour layers
19 ZombieVillagerRenderer.extractRenderState port crates/horizon-client/src/mobs/render.rs::shaking converting shake; type and profession are in layers, aggressive arms in anim
20 ZombieVillagerRenderer.isShaking port crates/horizon-client/src/mobs/render.rs::shaking converting zombie villagers shake
21 BlockDecorationLayer.submit missing player: a block placed on a copper golem's antenna is not drawn; Horizon reads the antenna slot only as the flower
22 BreezeEyesLayer.submit port crates/horizon-client/src/mobs/render.rs::layers breeze eyes layer, full bright
23 BreezeWindLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: player: the wind layer does not scroll (no texture offset, as noted in layers)
24 CapeLayer.hasLayer missing player: capes are never drawn; skin cape textures are downloaded (skins.rs) but no draw reads them
25 CapeLayer.submit missing player: capes are never drawn (see CapeLayer.hasLayer)
26 CarriedBlockLayer.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::mob_block_geometry the enderman's carried block
27 CatCollarLayer.submit port crates/horizon-client/src/mobs/render.rs::layers dyed collar
28 CrossedArmsItemLayer.submit missing player: a villager or wandering trader never shows an item in its folded arms (Horizon villagers carry nothing and the villager model has no right_arm for the hand lookup)
29 CrossedArmsItemLayer.applyTranslation missing player: no crossed-arms item placement (see CrossedArmsItemLayer.submit)
30 CustomHeadLayer.submit missing player: a skull or head in the head slot (player, zombie, creeper, dragon heads) is not drawn on players or mobs; only the snow golem pumpkin and mooshroom mushrooms are placed
31 CustomHeadLayer.resolveSkullRenderType missing player: player-head skins on worn heads are never resolved (no worn heads are drawn, see CustomHeadLayer.submit)
32 Deadmau5EarsLayer.submit missing minor: only a player named deadmau5 gets ears; the name tag lift for them is missing too
33 DolphinCarryingItemLayer.submit missing player: a dolphin carrying an item shows nothing (the dolphin model has no arm bones for the hand lookup)
34 DrownedOuterLayer.submit port crates/horizon-client/src/mobs/render.rs::layers drowned outer layer, adult and baby
35 EnergySwirlLayer.submit port crates/horizon-client/src/mobs/render.rs::energy_swirl charged creeper and powered wither swirl, drawn in render_visible
36 EquipmentLayerRenderer.renderLayers port crates/horizon-client/src/game/armor_stands.rs::Game::armor_layers gap: player: the leather overlay (layer 1 of the equipment asset) is never drawn, only layer 0
37 EquipmentLayerRenderer.getColorForLayer port crates/horizon-client/src/game/armor_stands.rs::Game::armor_layers gap: player: a dyed leather piece is drawn in the undyed brown; the stack's dyed colour is not read
38 EquipmentLayerRenderer.TrimTextureKey.createTextureWithNoPalette port crates/horizon-client/src/trims.rs::TrimTexture::generate a trim with no palette is used as its own texture
39 EyesLayer.submit port crates/horizon-client/src/mobs/render.rs::layers spider, enderman and phantom eyes
40 FoxHeldItemLayer.submit missing player: a fox's food in its mouth (berries, fish) is not drawn; the fox model has no arm bones for the hand lookup
41 HorseMarkingLayer.submit port crates/horizon-client/src/mobs/render.rs::layers horse markings layer
42 HumanoidArmorLayer.shouldRender port crates/horizon-client/src/mobs/render.rs::humanoid_armor slot read from the item id suffix (_helmet and so on); players use Game::armor_layers
43 HumanoidArmorLayer.submit port crates/horizon-client/src/mobs/render.rs::humanoid_armor armour for mobs; players use Game::armor_layers
44 HumanoidArmorLayer.renderArmorPiece port crates/horizon-client/src/mobs/render.rs::humanoid_armor one armour piece per slot with its layer model
45 HumanoidArmorLayer.getArmorModel port crates/horizon-client/src/mobs/render.rs::humanoid_armor armour model is the body's #helmet, #chestplate, #leggings or #boots part
46 IronGolemCrackinessLayer.submit port crates/horizon-client/src/mobs/render.rs::layers crack levels via golem::crackiness
47 IronGolemFlowerLayer.submit missing player: an iron golem offering a poppy raises its arm (golem anim) but no poppy is drawn in it
48 ItemInHandLayer.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry both hands through the item pipeline
49 ItemInHandLayer.useBabyOffset port crates/horizon-client/src/mobs/render.rs::hand_base baby hand offset
50 LivingEntityEmissiveLayer.submit port crates/horizon-client/src/mobs/render.rs::layers emissive layers drawn full bright; warden alpha is in warden::emissive_layers
51 LlamaDecorLayer.submit port crates/horizon-client/src/mobs/llama.rs::decor carpet, or the trader llama's blanket
52 LlamaDecorLayer.renderEquipment port crates/horizon-client/src/mobs/llama.rs::decor same decor model and texture
53 MushroomCowMushroomLayer.submitMushroomBlock port crates/horizon-client/src/game/mob_blocks.rs::Game::worn_block_geometry mushrooms on an adult mooshroom
54 PandaHoldsItemLayer.submit port crates/horizon-client/src/mobs/panda.rs::item_offset item in the mouth of a sitting panda, with the eating bob
55 ParrotOnShoulderLayer.submit missing player: a tamed parrot on a player's shoulder is not drawn
56 ParrotOnShoulderLayer.submitOnShoulder missing player: a parrot on a player's shoulder is not drawn (see ParrotOnShoulderLayer.submit)
57 PlayerItemInHandLayer.submitArmWithItem port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry gap: player: the spyglass raised to the eye is not drawn (see renderItemHeldToEye)
58 PlayerItemInHandLayer.renderItemHeldToEye missing player: another player using a spyglass does not hold it at the eye in third person; Horizon has no held-on-head state
59 RenderLayer.coloredCutoutModelCopyLayerRender port crates/horizon-client/src/mobs/render.rs::render_visible coloured cutout layers drawn in render_visible
60 RenderLayer.renderColoredCutoutModel port crates/horizon-client/src/mobs/render.rs::render_visible coloured cutout layers drawn in render_visible
61 RopesLayer.submit missing player: a harnessed happy ghast that holds a leash shows no rope model on its body
62 SheepWoolLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: minor: the outline-only pass for an invisible glowing sheep is not drawn
63 SheepWoolUndercoatLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: player: a sheep named jeb_ gets no undercoat while its wool is white (vanilla always draws it for jeb_)
64 SimpleEquipmentLayer.submit port crates/horizon-client/src/mobs/render.rs::layers pig, strider and nautilus saddles and the happy ghast harness
65 SkeletonClothingLayer.submit port crates/horizon-client/src/mobs/render.rs::layers stray and bogged overlay
66 SlimeOuterLayer.submit port crates/horizon-client/src/mobs/render.rs::layers translucent outer slime cube
67 SnowGolemHeadLayer.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::worn_block_geometry carved pumpkin on the snow golem
68 SpinAttackEffectLayer.submit port crates/horizon-client/src/game/perspective.rs::Game::spin_attack_geometry riptide spin model
69 StuckInBodyLayer.submitStuckItem missing player: arrows stuck in a player's body are not drawn (Horizon keeps no stuck-arrow count)
70 StuckInBodyLayer.submit missing player: arrows stuck in a player's body are not drawn (see submitStuckItem)
71 SulfurCubeInnerLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: player: a block swallowed by a sulfur cube is not drawn inside the shell (sulfur_cube::inner returns nothing when the cube has a body)
72 TropicalFishPatternLayer.submit port crates/horizon-client/src/mobs/render.rs::layers pattern on the small or large model, tinted
73 VillagerProfessionLayer.submit port crates/horizon-client/src/mobs/render.rs::layers type, profession and level layers; hat masks applied in render_visible
74 VillagerProfessionLayer.getIdentifier port crates/horizon-client/src/mobs/render.rs::layers texture paths built per type, profession and level
75 VillagerProfessionLayer.getHatData port crates/horizon-client/src/mobs/villager_hats.rs::VillagerHats::load hat metadata read from the resources
76 WingsLayer.submit port crates/horizon-client/src/game/perspective.rs::Game::player_elytra_geometry gap: minor: the wings texture comes from the equipment asset; a skin's own elytra or cape texture is not used
77 WingsLayer.getPlayerElytraTexture port crates/horizon-client/src/game/perspective.rs::Game::player_elytra_geometry gap: minor: a skin elytra or cape texture is never chosen
78 WitchItemLayer.applyTranslation missing player: a witch's potion (drunk or about to be thrown) is not drawn; the witch model has no right_arm for the hand lookup
79 WolfArmorLayer.submit port crates/horizon-client/src/mobs/render.rs::layers gap: minor: the armour texture is fixed to the armadillo scute; the equipment asset is not read
80 WolfArmorLayer.maybeRenderCracks port crates/horizon-client/src/mobs/render.rs::layers cracks at three damage levels
81 WolfCollarLayer.submit port crates/horizon-client/src/mobs/render.rs::layers dyed collar
82 AvatarRenderer.<init> port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry gap: player: no cape, ears, worn head, parrot or stuck-arrow layer; armour, held items, wings and spin are drawn
83 AvatarRenderer.getRenderOffset port crates/horizon-client/src/game/perspective.rs::Game::tick_player_model gap: minor: other players are not lowered 0.125 when sneaking; only the local model is
84 AvatarRenderer.submitNameDisplay port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry gap: minor: the 10 unit lift for ears is not applied (no ears)
85 AvatarRenderer.extractRenderState port crates/horizon-client/src/mobs.rs::Mob::tick_avatar_pose glide count, wings and swim read here; gap: player: arrow and stinger counts, parrots, cape, ears and the spyglass use are not read
86 AvatarRenderer.shouldShowName port crates/horizon-client/src/game/names.rs::Game::name_tags name tags for players and named mobs
87 AvatarRenderer.extractFlightData port crates/horizon-client/src/mobs/render.rs::base_transform_at glide time drives the tilt; gap: player: the body does not turn toward the flight direction (no flying yaw)
88 AvatarRenderer.extractCapeState missing player: capes are never drawn, so the cape flap and lean are never used
89 AvatarRenderer.renderRightHand port crates/horizon-client/src/game.rs::Game::hand_geometry first-person arm; gap: minor: no 0.1 radian arm tilt or sleeve toggle in hand_geometry
90 AvatarRenderer.renderLeftHand port crates/horizon-client/src/game.rs::Game::hand_geometry first-person arm; gap: minor: no 0.1 radian arm tilt or sleeve toggle in hand_geometry
91 AvatarRenderer.renderHand port crates/horizon-client/src/game.rs::Game::hand_geometry first-person arm; gap: minor: no 0.1 radian arm tilt or sleeve toggle in hand_geometry
92 AvatarRenderer.isEntityUpsideDown port crates/horizon-client/src/mobs/render.rs::base_transform_at Dinnerbone and Grumm flip; gap: minor: the cape-shown check is missing and the flip applies to every mob
93 ArmedEntityRenderState.getArmPose port crates/horizon-client/src/mobs/anim.rs::setup arm poses are chosen per species and hand inside setup
94 ArmedEntityRenderState.extractArmedEntityRenderState port crates/horizon-client/src/mobs/anim.rs::state swing and main arm; the held items are read in Game::held_item_geometry
95 AvatarRenderState.fallFlyingScale port crates/horizon-client/src/mobs/render.rs::base_transform_at glide scale: ticks squared over 100, clamped to 1
96 EnderDragonRenderState.getHeadPartYOffset port crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry sitting, landing and the part 6 cases
97 EntityRenderState.fillCrashReportCategory skip:debug crash report detail only
98 HumanoidRenderState.ticksUsingItem port crates/horizon-client/src/game/mob_blocks.rs::Game::held_item_geometry use time for the hand that is using an item
99 ItemClusterRenderState.extractItemGroupRenderState port crates/horizon-client/src/item_render.rs::rendered_amount rendered count of the stack; the seed is taken in cluster_poses
100 SheepRenderState.getWoolColor port crates/horizon-client/src/mobs/render.rs::sheep_wool_rgb gap: player: a jeb_ sheep does not cycle through the rainbow (ColorLerper)
101 BabyModelTransform.apply skip:data baby meshes are baked into entity-models.json
102 HumanoidModel.createMesh skip:data humanoid mesh is baked into entity-models.json
103 HumanoidModel.createArmorMeshSet skip:data armour meshes are baked into entity-models.json
104 HumanoidModel.createBaseArmorMesh skip:data armour mesh is baked into entity-models.json
105 HumanoidModel.createBabyArmorMesh skip:data baby armour mesh is baked into entity-models.json
106 HumanoidModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid body sway and the swinging arm
107 Model.resetPose port crates/horizon-client/src/mobs/anim.rs::Poses::reset resets every part to its rest pose
108 QuadrupedModel.createBodyMesh skip:data quadruped mesh is baked into entity-models.json
109 QuadrupedModel.createLegs skip:data leg meshes are baked into entity-models.json
110 BatModel.createBodyLayer skip:data bat model is baked into entity-models.json
111 AllayModel.createBodyLayer skip:data allay model is baked into entity-models.json
112 AllayModel.translateToHand port crates/horizon-client/src/mobs/render.rs::held_item_transform gap: player: the allay's own hand transform (0.7 scale, forearm offset) is not applied; the humanoid hand offset is used
113 AdultArmadilloModel.createBodyLayer skip:data armadillo model is baked into entity-models.json
114 BabyArmadilloModel.createBodyLayer skip:data baby armadillo model is baked into entity-models.json
115 AdultAxolotlModel.setupAnim port crates/horizon-client/src/mobs/body_anim.rs::axolotl the axolotl pose dispatch
116 AdultAxolotlModel.setupLayStillOnGroundAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_lay lay-still pose on the ground
117 AdultAxolotlModel.setupGroundCrawlingAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_crawl ground crawl pose
118 AdultAxolotlModel.setupWaterHoveringAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_hover hovering in water
119 AdultAxolotlModel.setupSwimmingAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_swim swimming pose
120 AdultAxolotlModel.setupPlayDeadAnimation port crates/horizon-client/src/mobs/body_anim.rs::axolotl_dead playing dead
121 AdultAxolotlModel.applyMirrorLegRotations port crates/horizon-client/src/mobs/body_anim.rs::axolotl mirrored leg rotations, inline in axolotl
122 AdultBeeModel.bobUpAndDown port crates/horizon-client/src/mobs/body_anim.rs::bee adult antennae wiggle (not for babies)
123 BeeModel.bobUpAndDown port crates/horizon-client/src/mobs/body_anim.rs::bee bone, bob and leg swing
124 BeeStingerModel.createBodyLayer skip:data stinger model is baked into entity-models.json
125 AdultCamelModel.createBodyMesh skip:data camel mesh is baked into entity-models.json
126 BabyCamelModel.createBodyLayer skip:data baby camel model is baked into entity-models.json
127 CamelModel.applyHeadRotation port crates/horizon-client/src/mobs/camel.rs::anim head clamp and the jump cooldown lift
128 CamelSaddleModel.createSaddleLayer skip:data saddle model is baked into entity-models.json
129 AdultChickenModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::head head pitch and yaw from the state
130 AdultChickenModel.createBaseChickenModel skip:data chicken mesh is baked into entity-models.json
131 BabyChickenModel.createBodyLayer skip:data baby chicken model is baked into entity-models.json
132 ChickenModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup leg swing and wing flap
133 ColdChickenModel.createBodyLayer skip:data cold chicken model is baked into entity-models.json
134 BabyCowModel.createBodyLayer skip:data baby cow model is baked into entity-models.json
135 ColdCowModel.createBodyLayer skip:data cold cow model is baked into entity-models.json
136 CowModel.createBaseCowModel skip:data cow mesh is baked into entity-models.json
137 WarmCowModel.createBodyLayer skip:data warm cow model is baked into entity-models.json
138 BabyDolphinModel.createBodyLayer skip:data baby dolphin model is baked into entity-models.json
139 DolphinModel.createBodyLayer skip:data dolphin model is baked into entity-models.json
140 DolphinModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim body turn and, while moving, the tail and fin swing; gap: minor: moving is read from horizontal velocity, not the isMoving flag
141 AbstractEquineModel.createBodyMesh skip:data equine mesh is baked into entity-models.json
142 AbstractEquineModel.animateHeadPartsPlacement port crates/horizon-client/src/mobs/equine.rs::anim head part placement while eating and standing
143 BabyDonkeyModel.setupAnim port crates/horizon-client/src/mobs/equine.rs::anim baby donkey head pitch of -30 degrees and head part pose
144 BabyDonkeyModel.offsetLegPositionWhenStanding port crates/horizon-client/src/mobs/equine.rs::anim hind leg heights when standing
145 BabyDonkeyModel.animateHeadPartsPlacement port crates/horizon-client/src/mobs/equine.rs::anim baby donkey head part placement
146 BabyHorseModel.createBabyMesh skip:data baby horse mesh is baked into entity-models.json
147 BabyHorseModel.animateHeadPartsPlacement port crates/horizon-client/src/mobs/equine.rs::anim baby horse head part placement
148 DonkeyModel.createBodyLayer skip:data donkey model is baked into entity-models.json
149 DonkeyModel.setupAnim port crates/horizon-client/src/mobs/equine.rs::anim donkey pose
+150
View File
@@ -0,0 +1,150 @@
EquineSaddleModel.createSaddleLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
EquineSaddleModel.setupAnim missing player: a saddled horse with nobody riding it shows its reins (left and right saddle lines); vanilla hides them until it is ridden (render.rs draws the whole #saddle layer)
AdultFelineModel.createBodyMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyFelineModel.createBabyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CodModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CodModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
PufferfishBigModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
PufferfishMidModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
PufferfishSmallModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PufferfishSmallModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
SalmonModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SalmonModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
TropicalFishLargeModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
TropicalFishLargeModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
TropicalFishSmallModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
TropicalFishSmallModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
AdultFoxModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
AdultFoxModel.setSittingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
AdultFoxModel.setSleepingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
AdultFoxModel.setWalkingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
AdultFoxModel.setCrouchingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
AdultFoxModel.setPouncingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
BabyFoxModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyFoxModel.setSittingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
BabyFoxModel.setSleepingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
BabyFoxModel.setWalkingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
BabyFoxModel.setCrouchingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
FoxModel.setSleepingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
FoxModel.setWalkingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
FoxModel.setCrouchingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
FrogModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
TadpoleModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
TadpoleModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
HappyGhastHarnessModel.createHarnessLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
HappyGhastModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyGoatModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
GoatModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
GoatModel.setupAnim port crates/horizon-client/src/mobs/body_anim.rs::goat horn visibility and ramming head pitch
CopperGolemModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CopperGolemModel.createRunningPoseBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CopperGolemModel.createSittingPoseBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CopperGolemModel.createStarPoseBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CopperGolemModel.translateToHand missing player: an item a copper golem holds sits at the humanoid hand offset; vanilla turns it (IDLE) or scales it to 0.55 with its own grip (mobs/render.rs hand_base has only the vex case)
CopperGolemModel.translateToHead skip:other only CustomHeadLayer calls it, and a copper golem has no head slot (its only extra slot is the antenna)
CopperGolemModel.applyBlockOnAntennaTransform missing player: a block or flower on the copper golem antenna is not drawn; vanilla draws it with BlockDecorationLayer (nothing in mobs/render.rs draws the antenna item)
IronGolemModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SnowGolemModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
LlamaSpitModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
NautilusArmorModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
NautilusModel.createBodyMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
NautilusModel.createBabyBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
NautilusModel.applyBodyRotation inline crates/horizon-client/src/mobs/nautilus.rs::anim body yaw/pitch clamped to 10 degrees, inside the nautilus setupAnim
NautilusSaddleModel.createSaddleLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyPandaModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PandaModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
ParrotModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
ParrotModel.prepare port crates/horizon-client/src/mobs/body_anim.rs::parrot sitting, flying and party leg/body offsets
ParrotModel.getPose inline crates/horizon-client/src/mobs/body_anim.rs::anim pose chosen where the parrot is animated: party, sitting, flying (not on ground), standing
BabyPigModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
ColdPigModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PigModel.createBasePigModel skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyPolarBearModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PolarBearModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
AdultRabbitModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyRabbitModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabySheepModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SheepFurModel.createFurLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SheepFurModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head lowered while eating grass
SheepModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SheepModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head lowered while eating grass
SnifferModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SniffletModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabySquidModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SquidModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
SquidModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
AdultTurtleModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyTurtleModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
TurtleModel.setupAnim port crates/horizon-client/src/mobs/body_anim.rs::turtle walk swing on land, paddling in water, egg belly
AdultWolfModel.setSittingPose port crates/horizon-client/src/mobs/tame.rs::anim adult upper body raised when sitting
AdultWolfModel.shakeOffWater port crates/horizon-client/src/mobs/tame.rs::anim shake roll of head, body and tail (body_roll)
BabyWolfModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyWolfModel.shakeOffWater port crates/horizon-client/src/mobs/tame.rs::anim shake roll of head, body and tail (body_roll)
BabyWolfModel.setSittingPose port crates/horizon-client/src/mobs/tame.rs::anim baby sitting pose: body xRot minus pi/2
WolfModel.setSittingPose port crates/horizon-client/src/mobs/tame.rs::anim sitting pose, adult and baby
EvokerFangsModel.setupAnim port crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry jaws, base sink and pre-scale
SpearAnimations.thirdPersonAttackHand missing player: a spear stab shows the whack swing on other players and mobs; the arm does not thrust (STAB arm pose absent, only WHACK in mobs/anim.rs)
SpearAnimations.firstPersonAttack missing player: when you stab with a spear your own hand does not thrust forward; the default swing plays instead (first_person.rs has no STAB pose)
SpearAnimations.UseParams.fromKineticWeapon port crates/horizon-client/src/spear.rs::UseParams::of the charge timeline and sway values
SpinAttackEffectModel.createLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
EntityModelSet.bakeLayer skip:data baking a layer; Horizon loads each layer from entity-models.json via load_model
LayerDefinitions.createRoots skip:data layer registry; Horizon names layers by string key (minecraft:x#main)
ModelLayers.register skip:data layer id registry; Horizon uses string keys
ModelLayers.registerArmorSet skip:data layer id registry; Horizon uses string keys
ModelPart.storePose skip:other no callers in vanilla; a snapshot of the current pose that nothing reads
ModelPart.loadPose port crates/horizon-client/src/mobs.rs::Part::parse reads the pose from the model data; the reset per frame is Poses::reset
ModelPart.getChild port crates/horizon-client/src/block_entity_render.rs::ModelPart::child named child lookup (Option instead of a throw)
ModelPart.compile port crates/horizon-client/src/mobs/render.rs::draw_normals emits each polygon with the posed transform; skipDraw gating
ModelPart.offsetRotation port crates/horizon-client/src/mobs/keyframes.rs::Animation::apply Target::Rotation channel adds to xRot/yRot/zRot
ModelPart.offsetScale port crates/horizon-client/src/mobs/keyframes.rs::Animation::apply Target::Scale channel adds to the scale
ModelPart.getAllParts inline crates/horizon-client/src/mobs/anim.rs::Poses::reset the part list Model.resetPose walks; Poses::reset refills the whole name map instead
ModelPart.createPartLookup inline crates/horizon-client/src/mobs/anim.rs::Poses::reset gap: minor: duplicate part names keep the last part here, the first in vanilla (the name map is built by the same walk)
ModelPart.addAllChildren inline crates/horizon-client/src/mobs/anim.rs::Poses::reset gap: minor: duplicate part names keep the last part here, the first in vanilla (the name map is built by the same walk)
ModelPart.Cube.<init> skip:data geometry baked into entity-models.json, which Horizon loads as a resource (cube faces are precomputed polygons)
ModelPart.Cube.compile port crates/horizon-client/src/mobs/render.rs::draw_normals six faces emitted from the posed part (polygons in Horizon)
ModelPart.Polygon.<init> skip:data geometry baked into entity-models.json, which Horizon loads as a resource (polygons are precomputed)
ModelPart.Vertex.remap skip:data UV normalisation done when entity-models.json is generated
PartPose.offsetAndRotation skip:data pose builder; baked poses come from entity-models.json
PartPose.translated skip:data pose builder; baked poses come from entity-models.json
PartPose.withScale skip:data pose builder; baked poses come from entity-models.json
PartPose.scaled skip:data pose builder; baked poses come from entity-models.json
CubeDefinition.bake skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CubeDeformation.extend skip:java builder value for cube inflation, folded into the baked geometry
CubeListBuilder.addBox skip:data geometry baked into entity-models.json, which Horizon loads as a resource
LayerDefinition.bakeRoot skip:data geometry baked into entity-models.json, which Horizon loads as a resource
MeshTransformer.scaling skip:data baby scaling applied when entity-models.json is generated
PartDefinition.addOrReplaceChild skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PartDefinition.clearRecursively skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PartDefinition.clearChild skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PartDefinition.retainPartsAndChildren skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PartDefinition.retainExactParts skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PartDefinition.bake skip:data geometry baked into entity-models.json, which Horizon loads as a resource
PartDefinition.transformed skip:data geometry baked into entity-models.json, which Horizon loads as a resource
UVPair.pack skip:java packs two texture coordinates for the builder; Horizon stores normalised UVs
BlazeModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BreezeModel.createBaseMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BreezeModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BreezeModel.createWindLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BreezeModel.createEyesLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CreakingModel.createMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CreakingModel.createEyesLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CreeperModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
CreeperModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Anim::Creeper arm: head and legs
EnderDragonModel.<init> skip:data geometry baked into entity-models.json, which Horizon loads as a resource
EnderDragonModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
EnderDragonModel.poseLimbs inline crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry leg and foot pitches inside the dragon pose
EndermanModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
EndermiteModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
GhastModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
GuardianModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
GuardianModel.setupSpikes inline crates/horizon-client/src/mobs/guardian.rs::anim spike offsets and positions, inside the guardian setupAnim
GuardianModel.getSpikeOffset inline crates/horizon-client/src/mobs/guardian.rs::anim spike offsets and positions, inside the guardian setupAnim
GuardianModel.getSpikeY inline crates/horizon-client/src/mobs/guardian.rs::anim spike offsets and positions, inside the guardian setupAnim
BabyHoglinModel.animateHeadbutt inline crates/horizon-client/src/mobs/piglin.rs::hoglin_anim baby head lift in the headbutt; adult head lerp is in the same fn
BabyHoglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
HoglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
IllagerModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
AbstractPiglinModel.removeEars skip:data geometry baked into entity-models.json, which Horizon loads as a resource (ears are part of the baked piglin head)
AbstractPiglinModel.addHead skip:data geometry baked into entity-models.json, which Horizon loads as a resource
AdultPiglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
BabyPiglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
1 EquineSaddleModel.createSaddleLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
2 EquineSaddleModel.setupAnim missing player: a saddled horse with nobody riding it shows its reins (left and right saddle lines); vanilla hides them until it is ridden (render.rs draws the whole #saddle layer)
3 AdultFelineModel.createBodyMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
4 BabyFelineModel.createBabyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
5 CodModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
6 CodModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
7 PufferfishBigModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
8 PufferfishMidModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
9 PufferfishSmallModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
10 PufferfishSmallModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
11 SalmonModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
12 SalmonModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
13 TropicalFishLargeModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
14 TropicalFishLargeModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
15 TropicalFishSmallModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
16 TropicalFishSmallModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
17 AdultFoxModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
18 AdultFoxModel.setSittingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
19 AdultFoxModel.setSleepingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
20 AdultFoxModel.setWalkingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
21 AdultFoxModel.setCrouchingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
22 AdultFoxModel.setPouncingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
23 BabyFoxModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
24 BabyFoxModel.setSittingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
25 BabyFoxModel.setSleepingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
26 BabyFoxModel.setWalkingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
27 BabyFoxModel.setCrouchingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
28 FoxModel.setSleepingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
29 FoxModel.setWalkingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
30 FoxModel.setCrouchingPose port crates/horizon-client/src/mobs/body_anim.rs::fox fox pose branch (adult and baby) in the one fox pose function
31 FrogModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
32 TadpoleModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
33 TadpoleModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
34 HappyGhastHarnessModel.createHarnessLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
35 HappyGhastModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
36 BabyGoatModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
37 GoatModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
38 GoatModel.setupAnim port crates/horizon-client/src/mobs/body_anim.rs::goat horn visibility and ramming head pitch
39 CopperGolemModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
40 CopperGolemModel.createRunningPoseBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
41 CopperGolemModel.createSittingPoseBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
42 CopperGolemModel.createStarPoseBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
43 CopperGolemModel.translateToHand missing player: an item a copper golem holds sits at the humanoid hand offset; vanilla turns it (IDLE) or scales it to 0.55 with its own grip (mobs/render.rs hand_base has only the vex case)
44 CopperGolemModel.translateToHead skip:other only CustomHeadLayer calls it, and a copper golem has no head slot (its only extra slot is the antenna)
45 CopperGolemModel.applyBlockOnAntennaTransform missing player: a block or flower on the copper golem antenna is not drawn; vanilla draws it with BlockDecorationLayer (nothing in mobs/render.rs draws the antenna item)
46 IronGolemModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
47 SnowGolemModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
48 LlamaSpitModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
49 NautilusArmorModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
50 NautilusModel.createBodyMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
51 NautilusModel.createBabyBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
52 NautilusModel.applyBodyRotation inline crates/horizon-client/src/mobs/nautilus.rs::anim body yaw/pitch clamped to 10 degrees, inside the nautilus setupAnim
53 NautilusSaddleModel.createSaddleLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
54 BabyPandaModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
55 PandaModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
56 ParrotModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
57 ParrotModel.prepare port crates/horizon-client/src/mobs/body_anim.rs::parrot sitting, flying and party leg/body offsets
58 ParrotModel.getPose inline crates/horizon-client/src/mobs/body_anim.rs::anim pose chosen where the parrot is animated: party, sitting, flying (not on ground), standing
59 BabyPigModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
60 ColdPigModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
61 PigModel.createBasePigModel skip:data geometry baked into entity-models.json, which Horizon loads as a resource
62 BabyPolarBearModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
63 PolarBearModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
64 AdultRabbitModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
65 BabyRabbitModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
66 BabySheepModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
67 SheepFurModel.createFurLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
68 SheepFurModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head lowered while eating grass
69 SheepModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
70 SheepModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head lowered while eating grass
71 SnifferModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
72 SniffletModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
73 BabySquidModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
74 SquidModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
75 SquidModel.setupAnim port crates/horizon-client/src/mobs/aquatic.rs::anim aquatic setup arm for this species (fin/tail swing by age)
76 AdultTurtleModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
77 BabyTurtleModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
78 TurtleModel.setupAnim port crates/horizon-client/src/mobs/body_anim.rs::turtle walk swing on land, paddling in water, egg belly
79 AdultWolfModel.setSittingPose port crates/horizon-client/src/mobs/tame.rs::anim adult upper body raised when sitting
80 AdultWolfModel.shakeOffWater port crates/horizon-client/src/mobs/tame.rs::anim shake roll of head, body and tail (body_roll)
81 BabyWolfModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
82 BabyWolfModel.shakeOffWater port crates/horizon-client/src/mobs/tame.rs::anim shake roll of head, body and tail (body_roll)
83 BabyWolfModel.setSittingPose port crates/horizon-client/src/mobs/tame.rs::anim baby sitting pose: body xRot minus pi/2
84 WolfModel.setSittingPose port crates/horizon-client/src/mobs/tame.rs::anim sitting pose, adult and baby
85 EvokerFangsModel.setupAnim port crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry jaws, base sink and pre-scale
86 SpearAnimations.thirdPersonAttackHand missing player: a spear stab shows the whack swing on other players and mobs; the arm does not thrust (STAB arm pose absent, only WHACK in mobs/anim.rs)
87 SpearAnimations.firstPersonAttack missing player: when you stab with a spear your own hand does not thrust forward; the default swing plays instead (first_person.rs has no STAB pose)
88 SpearAnimations.UseParams.fromKineticWeapon port crates/horizon-client/src/spear.rs::UseParams::of the charge timeline and sway values
89 SpinAttackEffectModel.createLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
90 EntityModelSet.bakeLayer skip:data baking a layer; Horizon loads each layer from entity-models.json via load_model
91 LayerDefinitions.createRoots skip:data layer registry; Horizon names layers by string key (minecraft:x#main)
92 ModelLayers.register skip:data layer id registry; Horizon uses string keys
93 ModelLayers.registerArmorSet skip:data layer id registry; Horizon uses string keys
94 ModelPart.storePose skip:other no callers in vanilla; a snapshot of the current pose that nothing reads
95 ModelPart.loadPose port crates/horizon-client/src/mobs.rs::Part::parse reads the pose from the model data; the reset per frame is Poses::reset
96 ModelPart.getChild port crates/horizon-client/src/block_entity_render.rs::ModelPart::child named child lookup (Option instead of a throw)
97 ModelPart.compile port crates/horizon-client/src/mobs/render.rs::draw_normals emits each polygon with the posed transform; skipDraw gating
98 ModelPart.offsetRotation port crates/horizon-client/src/mobs/keyframes.rs::Animation::apply Target::Rotation channel adds to xRot/yRot/zRot
99 ModelPart.offsetScale port crates/horizon-client/src/mobs/keyframes.rs::Animation::apply Target::Scale channel adds to the scale
100 ModelPart.getAllParts inline crates/horizon-client/src/mobs/anim.rs::Poses::reset the part list Model.resetPose walks; Poses::reset refills the whole name map instead
101 ModelPart.createPartLookup inline crates/horizon-client/src/mobs/anim.rs::Poses::reset gap: minor: duplicate part names keep the last part here, the first in vanilla (the name map is built by the same walk)
102 ModelPart.addAllChildren inline crates/horizon-client/src/mobs/anim.rs::Poses::reset gap: minor: duplicate part names keep the last part here, the first in vanilla (the name map is built by the same walk)
103 ModelPart.Cube.<init> skip:data geometry baked into entity-models.json, which Horizon loads as a resource (cube faces are precomputed polygons)
104 ModelPart.Cube.compile port crates/horizon-client/src/mobs/render.rs::draw_normals six faces emitted from the posed part (polygons in Horizon)
105 ModelPart.Polygon.<init> skip:data geometry baked into entity-models.json, which Horizon loads as a resource (polygons are precomputed)
106 ModelPart.Vertex.remap skip:data UV normalisation done when entity-models.json is generated
107 PartPose.offsetAndRotation skip:data pose builder; baked poses come from entity-models.json
108 PartPose.translated skip:data pose builder; baked poses come from entity-models.json
109 PartPose.withScale skip:data pose builder; baked poses come from entity-models.json
110 PartPose.scaled skip:data pose builder; baked poses come from entity-models.json
111 CubeDefinition.bake skip:data geometry baked into entity-models.json, which Horizon loads as a resource
112 CubeDeformation.extend skip:java builder value for cube inflation, folded into the baked geometry
113 CubeListBuilder.addBox skip:data geometry baked into entity-models.json, which Horizon loads as a resource
114 LayerDefinition.bakeRoot skip:data geometry baked into entity-models.json, which Horizon loads as a resource
115 MeshTransformer.scaling skip:data baby scaling applied when entity-models.json is generated
116 PartDefinition.addOrReplaceChild skip:data geometry baked into entity-models.json, which Horizon loads as a resource
117 PartDefinition.clearRecursively skip:data geometry baked into entity-models.json, which Horizon loads as a resource
118 PartDefinition.clearChild skip:data geometry baked into entity-models.json, which Horizon loads as a resource
119 PartDefinition.retainPartsAndChildren skip:data geometry baked into entity-models.json, which Horizon loads as a resource
120 PartDefinition.retainExactParts skip:data geometry baked into entity-models.json, which Horizon loads as a resource
121 PartDefinition.bake skip:data geometry baked into entity-models.json, which Horizon loads as a resource
122 PartDefinition.transformed skip:data geometry baked into entity-models.json, which Horizon loads as a resource
123 UVPair.pack skip:java packs two texture coordinates for the builder; Horizon stores normalised UVs
124 BlazeModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
125 BreezeModel.createBaseMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
126 BreezeModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
127 BreezeModel.createWindLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
128 BreezeModel.createEyesLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
129 CreakingModel.createMesh skip:data geometry baked into entity-models.json, which Horizon loads as a resource
130 CreakingModel.createEyesLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
131 CreeperModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
132 CreeperModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Anim::Creeper arm: head and legs
133 EnderDragonModel.<init> skip:data geometry baked into entity-models.json, which Horizon loads as a resource
134 EnderDragonModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
135 EnderDragonModel.poseLimbs inline crates/horizon-client/src/game/dragon.rs::Game::dragon_geometry leg and foot pitches inside the dragon pose
136 EndermanModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
137 EndermiteModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
138 GhastModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
139 GuardianModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
140 GuardianModel.setupSpikes inline crates/horizon-client/src/mobs/guardian.rs::anim spike offsets and positions, inside the guardian setupAnim
141 GuardianModel.getSpikeOffset inline crates/horizon-client/src/mobs/guardian.rs::anim spike offsets and positions, inside the guardian setupAnim
142 GuardianModel.getSpikeY inline crates/horizon-client/src/mobs/guardian.rs::anim spike offsets and positions, inside the guardian setupAnim
143 BabyHoglinModel.animateHeadbutt inline crates/horizon-client/src/mobs/piglin.rs::hoglin_anim baby head lift in the headbutt; adult head lerp is in the same fn
144 BabyHoglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
145 HoglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
146 IllagerModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
147 AbstractPiglinModel.removeEars skip:data geometry baked into entity-models.json, which Horizon loads as a resource (ears are part of the baked piglin head)
148 AbstractPiglinModel.addHead skip:data geometry baked into entity-models.json, which Horizon loads as a resource
149 AdultPiglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
150 BabyPiglinModel.createBodyLayer skip:data geometry baked into entity-models.json, which Horizon loads as a resource
+149
View File
@@ -0,0 +1,149 @@
PiglinModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid melee swing branch via weapon_swing, which piglin_pose sets
PiglinModel.holdWeaponHigh port crates/horizon-client/src/mobs/piglin.rs::piglin_pose holdWeaponHigh arm pose when the swing is at rest
ZombifiedPiglinModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid zombie arm raise via the zombie flag (Anim::ZombifiedPiglin)
RavagerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
ShulkerModel.createShellMesh skip:data layer baked into entity-models.json, loaded by key
ShulkerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
SilverfishModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
BoggedModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
BoggedModel.setupAnim missing player: a sheared bogged keeps its mushrooms on its head; Bogged shearing sets sheared but nothing hides the mushrooms part
SkeletonModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
SkeletonModel.createDefaultSkeletonMesh skip:data layer baked into entity-models.json, loaded by key
SkeletonModel.createSingleModelDualBodyLayer skip:data layer baked into entity-models.json, loaded by key
SkeletonModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup skeleton melee pose in the Skeleton branch of setup
SkeletonModel.translateToHand port crates/horizon-client/src/mobs/render.rs::hand_base held item hand offset for skeletons (plus or minus one pixel)
MagmaCubeModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
SlimeModel.createOuterBodyLayer skip:data layer baked into entity-models.json, loaded by key
SlimeModel.createInnerBodyLayer skip:data layer baked into entity-models.json, loaded by key
SmallSulfurCubeModel.createOuterBodyLayer skip:data layer baked into entity-models.json, loaded by key
SmallSulfurCubeModel.createInnerBodyLayer skip:data layer baked into entity-models.json, loaded by key
SulfurCubeModel.createOuterBodyLayer skip:data layer baked into entity-models.json, loaded by key
SulfurCubeModel.createInnerBodyLayer skip:data layer baked into entity-models.json, loaded by key
SpiderModel.createSpiderBodyLayer skip:data layer baked into entity-models.json, loaded by key
SpiderModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Spider branch of setup: four leg pairs swing and step
AdultStriderModel.customAnimations port crates/horizon-client/src/mobs/body_anim.rs::strider adult bristles on z, body and leg bob, shared with the baby
BabyStriderModel.customAnimations port crates/horizon-client/src/mobs/body_anim.rs::strider baby bristles on x, body and leg bob, ridden flag not used
VexModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
VexModel.setArmsCharging inline crates/horizon-client/src/mobs/vex.rs::anim charging arm pose inside the flag branch of vex anim
WardenModel.createBioluminescentLayer skip:data layer baked into entity-models.json, loaded by key
WardenModel.createPulsatingSpotsLayer skip:data layer baked into entity-models.json, loaded by key
WardenModel.animateHeadLookTarget inline crates/horizon-client/src/mobs/warden.rs::anim head yaw and pitch set first in warden anim
WardenModel.animateIdlePose inline crates/horizon-client/src/mobs/warden.rs::anim head and body wobble in warden anim
WardenModel.animateWalk inline crates/horizon-client/src/mobs/warden.rs::anim walk swing, arm and body tilt in warden anim
WardenModel.resetArmPoses inline crates/horizon-client/src/mobs/warden.rs::anim arm rest positions reset in warden anim
WardenModel.animateTendrils inline crates/horizon-client/src/mobs/warden.rs::anim tendril sway from the tendril animation value
WitchModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
WitherBossModel.setupHeadRotation inline crates/horizon-client/src/mobs/wither.rs::anim side head yaw minus body yaw in wither anim
BabyZombieModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
BabyZombieVillagerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
BabyZombieVillagerModel.createNoHatLayer skip:data layer baked into entity-models.json, loaded by key
DrownedModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
DrownedModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid zombie arm raise via the zombie flag (Anim::Drowned)
GiantZombieModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid giant is Humanoid with zombie_arms, same zombie arm raise
ZombieVillagerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
ZombieVillagerModel.createNoHatLayer skip:data layer baked into entity-models.json, loaded by key
ZombieVillagerModel.createArmorLayerSet skip:data layer baked into entity-models.json, loaded by key
ZombieVillagerModel.createBaseArmorMesh skip:data layer baked into entity-models.json, loaded by key
ZombieVillagerModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid zombie arm raise via the zombie flag (Anim::ZombieVillager)
BabyVillagerModel.createBodyModel skip:data layer baked into entity-models.json, loaded by key
VillagerModel.createBodyModel skip:data layer baked into entity-models.json, loaded by key
ArmorStandArmorModel.createArmorLayerSet skip:data layer baked into entity-models.json, loaded by key
ArmorStandArmorModel.createBaseMesh skip:data layer baked into entity-models.json, loaded by key
ArmorStandModel.translateToHand port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_items held items drawn from the posed arms even when ShowArms hides them
BannerFlagModel.createFlagLayer skip:data layer baked into entity-models.json, loaded by key
BannerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
BellModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
AbstractBoatModel.setupAnim port crates/horizon-client/src/game/boats.rs::Game::boat_geometry paddle pose from rowing time, in the boat draw
BoatModel.createBoatModel skip:data layer baked into entity-models.json, loaded by key
BoatModel.createChestBoatModel skip:data layer baked into entity-models.json, loaded by key
BoatModel.createWaterPatch skip:data layer baked into entity-models.json, loaded by key
RaftModel.createRaftModel skip:data bamboo raft is boat/bamboo#main in entity-models.json
RaftModel.createChestRaftModel skip:data bamboo chest raft is chest_boat/bamboo#main in entity-models.json
BookModel.State.forAnimation port crates/horizon-client/src/block_entity_anim.rs::EnchantingBook::render openness and page flips computed in EnchantingBook::render
MinecartModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
ChestModel.createSingleBodyLayer skip:data layer baked into entity-models.json, loaded by key
ChestModel.createDoubleBodyRightLayer skip:data layer baked into entity-models.json, loaded by key
ChestModel.createDoubleBodyLeftLayer skip:data layer baked into entity-models.json, loaded by key
CushionModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
ElytraModel.createLayer skip:data layer baked into entity-models.json, loaded by key
ElytraModel.setupAnim port crates/horizon-client/src/game/perspective.rs::Game::player_elytra_geometry wing angles, crouch drop and mirrored right wing
ShieldModel.createLayer skip:data layer baked into entity-models.json, loaded by key
LeashKnotModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
ArrowModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
ArrowModel.setupAnim missing player: an arrow that lands in a block does not wobble for 7 ticks; arrows.rs sets shake but the arrow draw has no roll
ShulkerBulletModel.createBodyLayer missing player: shulker bullets draw as a flat spark sprite, not the tumbling 3D orb; the baked shulker_bullet model is never loaded
ShulkerBulletModel.setupAnim missing player: the bullet's spin and facing toward its flight are absent, since no model is drawn
TridentModel.createLayer skip:data layer baked into entity-models.json, loaded by key
WindChargeModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
WindChargeModel.setupAnim port crates/horizon-client/src/game/wind.rs::Game::wind_charge_geometry wind and wind_charge parts spin in opposite directions
DragonHeadModel.createHeadLayer skip:data layer baked into entity-models.json, loaded by key
DragonHeadModel.setupAnim inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one jaw animation in the skull branch of render_one
PiglinHeadModel.setupAnim inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one ear flap in the skull branch of render_one
SkullModel.createHeadModel skip:data layer baked into entity-models.json, loaded by key
SkullModel.createHumanoidHeadLayer skip:data layer baked into entity-models.json, loaded by key
SkullModel.setupAnim inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one head yaw and pitch in the skull branch of render_one
PlayerCapeModel.createCapeLayer missing player: capes never draw; skins.rs downloads the cape texture but nothing draws the cape layer
PlayerCapeModel.setupAnim missing player: the cape does not lean or flap with movement, since no cape is drawn
PlayerEarsModel.createEarsLayer missing minor: extra ears (showExtraEars accounts) are not drawn
PlayerModel.createMesh skip:data layer baked into entity-models.json, loaded by key
PlayerModel.createArmorMeshSet skip:data layer baked into entity-models.json, loaded by key
PlayerModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup gap: player: hat, jacket, sleeve and pant toggles (modelPart options) are not read, so a hidden layer still draws; humanoid pose is in the Humanoid branch
PlayerModel.translateToHand port crates/horizon-client/src/mobs/render.rs::hand_base gap: minor: slim-arm 0.5 pixel hand offset not applied
BlockModelLighter.prepareQuadAmbientOcclusion port crates/horizon-client/src/mesher/lighting.rs::ambient_occlusion per-vertex AO brightness and smooth light from the corner samples
BlockModelLighter.prepareQuadFlat port crates/horizon-client/src/mesher/lighting.rs::flat light only; the directional colour is applied in Mesher::face
BlockModelLighter.prepareQuadShape port crates/horizon-client/src/mesher/lighting.rs::shape face bounds, partial and cubic flags
BlockModelLighter.getDirectionalBrightness port crates/horizon-client/src/mesher/lighting.rs::cardinal face shade; the shade direction override is read in Mesher::face
BlockModelLighter.Cache.getLightCoords port crates/horizon-client/src/mesher/lighting.rs::coords packed light for a position
BlockModelLighter.Cache.getShadeBrightness port crates/horizon-client/src/mesher.rs::MeshTables::new shade per block state (Info.shade), not cached per position
BlockModelRenderState.clear skip:java reuse of a pooled render state object
BlockModelRenderState.tintLayers port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices gap: minor: the caller tints every face with one sprite tint, not per tint index
BlockModelRenderState.setupModel port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices model parts with the transform matrix
BlockModelRenderState.submit port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices faces written to the vertex list
BlockModelRenderState.submitModel port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices faces written to the vertex list
BlockModelRenderState.scratchRandomSource port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices seeded variant choice through collect_seeded
BlockModelResolver.update port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices resolves the seeded model for a block state; light is passed in by the caller
BlockModelSet.createFallbackModel port crates/horizon-client/src/mesher.rs::MeshTables::new per-state tint sources (Info.tints) and the plain model
BuiltInBlockModels.special port crates/horizon-client/src/block_entity_render.rs::classify special model name to Kind
BuiltInBlockModels.createMobHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for mob heads
BuiltInBlockModels.createMobWallHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for wall mob heads
BuiltInBlockModels.createMobHeads port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for the head set
BuiltInBlockModels.createPlayerHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for player heads
BuiltInBlockModels.createPlayerWallHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for wall player heads
BuiltInBlockModels.createBanner port crates/horizon-client/src/block_entity_render.rs::classify Banner kind
BuiltInBlockModels.createWallBanner port crates/horizon-client/src/block_entity_render.rs::classify Banner kind for wall banners
BuiltInBlockModels.createDyedShulkerBox port crates/horizon-client/src/block_entity_render.rs::classify Shulker kind for dyed boxes
BuiltInBlockModels.createChest port crates/horizon-client/src/block_entity_render.rs::classify Chest kind
BuiltInBlockModels.createSingletonChest port crates/horizon-client/src/block_entity_render.rs::classify Chest kind, single chest
BuiltInBlockModels.createXmasChest port crates/horizon-client/src/block_entity_render.rs::classify Chest kind with the Christmas texture
BuiltInBlockModels.createCopperGolem port crates/horizon-client/src/block_entity_render.rs::classify CopperGolem kind
BuiltInBlockModels.createFlowerBedModel missing minor: the 0.25 block shift for a flower bed shown by a copper golem is not applied
BuiltInBlockModels.createEnchantingTable port crates/horizon-client/src/block_entity_render.rs::classify EnchantingTable kind
BuiltInBlockModels.specialModelWithPropertyDispatch port crates/horizon-client/src/block_entity_render.rs::classify property dispatch by block state values
BuiltInBlockModels.Builder.put skip:java builder map of special models
FluidModel.Unbaked.bake port crates/horizon-client/src/mesher.rs::MeshTables::new gap: minor: water and lava layers hard-wired; translucency picked in fluid tesselate
FluidModel.Unbaked.getAndValidateMaterial port crates/horizon-client/src/mesher.rs::MeshTables::new sprite lookup through layer(); no separate atlas check
FluidRenderer.isFaceOccludedByState port crates/horizon-client/src/mesher/fluid.rs::occluded_by fluid face occlusion by the neighbour's face shape
FluidRenderer.shouldRenderFace port crates/horizon-client/src/mesher/fluid.rs::tesselate render_up, render_down and side checks, neighbour-same-fluid and self occlusion
FluidRenderer.addFace inline crates/horizon-client/src/mesher/fluid.rs::tesselate quad closure in tesselate
FluidRenderer.calculateAverageHeight inline crates/horizon-client/src/mesher/fluid.rs::tesselate average closure in tesselate
FluidRenderer.addWeightedHeight inline crates/horizon-client/src/mesher/fluid.rs::tesselate weighted sum inside the average closure
FluidRenderer.vertex inline crates/horizon-client/src/mesher/fluid.rs::tesselate vertex built in the quad closure
FluidStateModelSet.bake port crates/horizon-client/src/mesher.rs::MeshTables::new fluid layers and tints baked per fluid
LoadedBlockModels.bake port crates/horizon-assets/src/bake.rs::bake_block_model bakes each block model; the loop over the set is the caller's
ModelBlockRenderer.tesselateBlock port crates/horizon-client/src/mesher.rs::Mesher::mesh per block: fluids, models, smooth-light choice
ModelBlockRenderer.configureTintCache port crates/horizon-client/src/mesher.rs::Tints::new per section tint tables
ModelBlockRenderer.resetTintCache inline crates/horizon-client/src/mesher.rs::Tints::new tables are built fresh per section, no reset
ModelBlockRenderer.tesselateAmbientOcclusion port crates/horizon-client/src/mesher.rs::Mesher::face AO branch of face
ModelBlockRenderer.tesselateFlat port crates/horizon-client/src/mesher.rs::Mesher::face flat branch of face
ModelBlockRenderer.shouldRenderFace port crates/horizon-world/src/block_render.rs::FaceVisibility::should_render_face per face visibility, called from Mesher::mesh
ModelBlockRenderer.putQuadWithTint port crates/horizon-client/src/mesher.rs::Mesher::face tinted vertex write
ModelBlockRenderer.getTintColor port crates/horizon-client/src/mesher.rs::Mesher::tint tint source index to colour
ModelBlockRenderer.computeTintColor port crates/horizon-client/src/mesher.rs::Tints::get biome colour average over the blend radius
MovingBlockRenderState.getBlockTint port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_block_vertices gap: minor: tint is the particle colour at the source position, not the biome tint at the moved spot
MovingBlockRenderState.getBlockState port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_blocks moved block and piston base
SelectBlockModel.update missing minor: display-context switch (copper golem hand, flower bed) is not applied; block items use the normal transform
SelectBlockModel.Unbaked.bake missing minor: same display-context switch, not baked
SelectBlockModel.UnbakedSwitch.bake missing minor: same display-context switch, not baked
BlockStateModelDispatcher.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind variant selection per block state
BlockStateModelDispatcher.MultiPartDefinition.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind multipart selectors bound per state
BlockStateModelDispatcher.SimpleModelSelectors.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind variant predicates bound per state
1 PiglinModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid melee swing branch via weapon_swing, which piglin_pose sets
2 PiglinModel.holdWeaponHigh port crates/horizon-client/src/mobs/piglin.rs::piglin_pose holdWeaponHigh arm pose when the swing is at rest
3 ZombifiedPiglinModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid zombie arm raise via the zombie flag (Anim::ZombifiedPiglin)
4 RavagerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
5 ShulkerModel.createShellMesh skip:data layer baked into entity-models.json, loaded by key
6 ShulkerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
7 SilverfishModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
8 BoggedModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
9 BoggedModel.setupAnim missing player: a sheared bogged keeps its mushrooms on its head; Bogged shearing sets sheared but nothing hides the mushrooms part
10 SkeletonModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
11 SkeletonModel.createDefaultSkeletonMesh skip:data layer baked into entity-models.json, loaded by key
12 SkeletonModel.createSingleModelDualBodyLayer skip:data layer baked into entity-models.json, loaded by key
13 SkeletonModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup skeleton melee pose in the Skeleton branch of setup
14 SkeletonModel.translateToHand port crates/horizon-client/src/mobs/render.rs::hand_base held item hand offset for skeletons (plus or minus one pixel)
15 MagmaCubeModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
16 SlimeModel.createOuterBodyLayer skip:data layer baked into entity-models.json, loaded by key
17 SlimeModel.createInnerBodyLayer skip:data layer baked into entity-models.json, loaded by key
18 SmallSulfurCubeModel.createOuterBodyLayer skip:data layer baked into entity-models.json, loaded by key
19 SmallSulfurCubeModel.createInnerBodyLayer skip:data layer baked into entity-models.json, loaded by key
20 SulfurCubeModel.createOuterBodyLayer skip:data layer baked into entity-models.json, loaded by key
21 SulfurCubeModel.createInnerBodyLayer skip:data layer baked into entity-models.json, loaded by key
22 SpiderModel.createSpiderBodyLayer skip:data layer baked into entity-models.json, loaded by key
23 SpiderModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup Spider branch of setup: four leg pairs swing and step
24 AdultStriderModel.customAnimations port crates/horizon-client/src/mobs/body_anim.rs::strider adult bristles on z, body and leg bob, shared with the baby
25 BabyStriderModel.customAnimations port crates/horizon-client/src/mobs/body_anim.rs::strider baby bristles on x, body and leg bob, ridden flag not used
26 VexModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
27 VexModel.setArmsCharging inline crates/horizon-client/src/mobs/vex.rs::anim charging arm pose inside the flag branch of vex anim
28 WardenModel.createBioluminescentLayer skip:data layer baked into entity-models.json, loaded by key
29 WardenModel.createPulsatingSpotsLayer skip:data layer baked into entity-models.json, loaded by key
30 WardenModel.animateHeadLookTarget inline crates/horizon-client/src/mobs/warden.rs::anim head yaw and pitch set first in warden anim
31 WardenModel.animateIdlePose inline crates/horizon-client/src/mobs/warden.rs::anim head and body wobble in warden anim
32 WardenModel.animateWalk inline crates/horizon-client/src/mobs/warden.rs::anim walk swing, arm and body tilt in warden anim
33 WardenModel.resetArmPoses inline crates/horizon-client/src/mobs/warden.rs::anim arm rest positions reset in warden anim
34 WardenModel.animateTendrils inline crates/horizon-client/src/mobs/warden.rs::anim tendril sway from the tendril animation value
35 WitchModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
36 WitherBossModel.setupHeadRotation inline crates/horizon-client/src/mobs/wither.rs::anim side head yaw minus body yaw in wither anim
37 BabyZombieModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
38 BabyZombieVillagerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
39 BabyZombieVillagerModel.createNoHatLayer skip:data layer baked into entity-models.json, loaded by key
40 DrownedModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
41 DrownedModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid zombie arm raise via the zombie flag (Anim::Drowned)
42 GiantZombieModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid giant is Humanoid with zombie_arms, same zombie arm raise
43 ZombieVillagerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
44 ZombieVillagerModel.createNoHatLayer skip:data layer baked into entity-models.json, loaded by key
45 ZombieVillagerModel.createArmorLayerSet skip:data layer baked into entity-models.json, loaded by key
46 ZombieVillagerModel.createBaseArmorMesh skip:data layer baked into entity-models.json, loaded by key
47 ZombieVillagerModel.setupAttackAnimation port crates/horizon-client/src/mobs/anim.rs::humanoid zombie arm raise via the zombie flag (Anim::ZombieVillager)
48 BabyVillagerModel.createBodyModel skip:data layer baked into entity-models.json, loaded by key
49 VillagerModel.createBodyModel skip:data layer baked into entity-models.json, loaded by key
50 ArmorStandArmorModel.createArmorLayerSet skip:data layer baked into entity-models.json, loaded by key
51 ArmorStandArmorModel.createBaseMesh skip:data layer baked into entity-models.json, loaded by key
52 ArmorStandModel.translateToHand port crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_items held items drawn from the posed arms even when ShowArms hides them
53 BannerFlagModel.createFlagLayer skip:data layer baked into entity-models.json, loaded by key
54 BannerModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
55 BellModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
56 AbstractBoatModel.setupAnim port crates/horizon-client/src/game/boats.rs::Game::boat_geometry paddle pose from rowing time, in the boat draw
57 BoatModel.createBoatModel skip:data layer baked into entity-models.json, loaded by key
58 BoatModel.createChestBoatModel skip:data layer baked into entity-models.json, loaded by key
59 BoatModel.createWaterPatch skip:data layer baked into entity-models.json, loaded by key
60 RaftModel.createRaftModel skip:data bamboo raft is boat/bamboo#main in entity-models.json
61 RaftModel.createChestRaftModel skip:data bamboo chest raft is chest_boat/bamboo#main in entity-models.json
62 BookModel.State.forAnimation port crates/horizon-client/src/block_entity_anim.rs::EnchantingBook::render openness and page flips computed in EnchantingBook::render
63 MinecartModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
64 ChestModel.createSingleBodyLayer skip:data layer baked into entity-models.json, loaded by key
65 ChestModel.createDoubleBodyRightLayer skip:data layer baked into entity-models.json, loaded by key
66 ChestModel.createDoubleBodyLeftLayer skip:data layer baked into entity-models.json, loaded by key
67 CushionModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
68 ElytraModel.createLayer skip:data layer baked into entity-models.json, loaded by key
69 ElytraModel.setupAnim port crates/horizon-client/src/game/perspective.rs::Game::player_elytra_geometry wing angles, crouch drop and mirrored right wing
70 ShieldModel.createLayer skip:data layer baked into entity-models.json, loaded by key
71 LeashKnotModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
72 ArrowModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
73 ArrowModel.setupAnim missing player: an arrow that lands in a block does not wobble for 7 ticks; arrows.rs sets shake but the arrow draw has no roll
74 ShulkerBulletModel.createBodyLayer missing player: shulker bullets draw as a flat spark sprite, not the tumbling 3D orb; the baked shulker_bullet model is never loaded
75 ShulkerBulletModel.setupAnim missing player: the bullet's spin and facing toward its flight are absent, since no model is drawn
76 TridentModel.createLayer skip:data layer baked into entity-models.json, loaded by key
77 WindChargeModel.createBodyLayer skip:data layer baked into entity-models.json, loaded by key
78 WindChargeModel.setupAnim port crates/horizon-client/src/game/wind.rs::Game::wind_charge_geometry wind and wind_charge parts spin in opposite directions
79 DragonHeadModel.createHeadLayer skip:data layer baked into entity-models.json, loaded by key
80 DragonHeadModel.setupAnim inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one jaw animation in the skull branch of render_one
81 PiglinHeadModel.setupAnim inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one ear flap in the skull branch of render_one
82 SkullModel.createHeadModel skip:data layer baked into entity-models.json, loaded by key
83 SkullModel.createHumanoidHeadLayer skip:data layer baked into entity-models.json, loaded by key
84 SkullModel.setupAnim inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one head yaw and pitch in the skull branch of render_one
85 PlayerCapeModel.createCapeLayer missing player: capes never draw; skins.rs downloads the cape texture but nothing draws the cape layer
86 PlayerCapeModel.setupAnim missing player: the cape does not lean or flap with movement, since no cape is drawn
87 PlayerEarsModel.createEarsLayer missing minor: extra ears (showExtraEars accounts) are not drawn
88 PlayerModel.createMesh skip:data layer baked into entity-models.json, loaded by key
89 PlayerModel.createArmorMeshSet skip:data layer baked into entity-models.json, loaded by key
90 PlayerModel.setupAnim port crates/horizon-client/src/mobs/anim.rs::setup gap: player: hat, jacket, sleeve and pant toggles (modelPart options) are not read, so a hidden layer still draws; humanoid pose is in the Humanoid branch
91 PlayerModel.translateToHand port crates/horizon-client/src/mobs/render.rs::hand_base gap: minor: slim-arm 0.5 pixel hand offset not applied
92 BlockModelLighter.prepareQuadAmbientOcclusion port crates/horizon-client/src/mesher/lighting.rs::ambient_occlusion per-vertex AO brightness and smooth light from the corner samples
93 BlockModelLighter.prepareQuadFlat port crates/horizon-client/src/mesher/lighting.rs::flat light only; the directional colour is applied in Mesher::face
94 BlockModelLighter.prepareQuadShape port crates/horizon-client/src/mesher/lighting.rs::shape face bounds, partial and cubic flags
95 BlockModelLighter.getDirectionalBrightness port crates/horizon-client/src/mesher/lighting.rs::cardinal face shade; the shade direction override is read in Mesher::face
96 BlockModelLighter.Cache.getLightCoords port crates/horizon-client/src/mesher/lighting.rs::coords packed light for a position
97 BlockModelLighter.Cache.getShadeBrightness port crates/horizon-client/src/mesher.rs::MeshTables::new shade per block state (Info.shade), not cached per position
98 BlockModelRenderState.clear skip:java reuse of a pooled render state object
99 BlockModelRenderState.tintLayers port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices gap: minor: the caller tints every face with one sprite tint, not per tint index
100 BlockModelRenderState.setupModel port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices model parts with the transform matrix
101 BlockModelRenderState.submit port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices faces written to the vertex list
102 BlockModelRenderState.submitModel port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices faces written to the vertex list
103 BlockModelRenderState.scratchRandomSource port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices seeded variant choice through collect_seeded
104 BlockModelResolver.update port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices resolves the seeded model for a block state; light is passed in by the caller
105 BlockModelSet.createFallbackModel port crates/horizon-client/src/mesher.rs::MeshTables::new per-state tint sources (Info.tints) and the plain model
106 BuiltInBlockModels.special port crates/horizon-client/src/block_entity_render.rs::classify special model name to Kind
107 BuiltInBlockModels.createMobHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for mob heads
108 BuiltInBlockModels.createMobWallHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for wall mob heads
109 BuiltInBlockModels.createMobHeads port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for the head set
110 BuiltInBlockModels.createPlayerHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for player heads
111 BuiltInBlockModels.createPlayerWallHead port crates/horizon-client/src/block_entity_render.rs::classify Skull kind for wall player heads
112 BuiltInBlockModels.createBanner port crates/horizon-client/src/block_entity_render.rs::classify Banner kind
113 BuiltInBlockModels.createWallBanner port crates/horizon-client/src/block_entity_render.rs::classify Banner kind for wall banners
114 BuiltInBlockModels.createDyedShulkerBox port crates/horizon-client/src/block_entity_render.rs::classify Shulker kind for dyed boxes
115 BuiltInBlockModels.createChest port crates/horizon-client/src/block_entity_render.rs::classify Chest kind
116 BuiltInBlockModels.createSingletonChest port crates/horizon-client/src/block_entity_render.rs::classify Chest kind, single chest
117 BuiltInBlockModels.createXmasChest port crates/horizon-client/src/block_entity_render.rs::classify Chest kind with the Christmas texture
118 BuiltInBlockModels.createCopperGolem port crates/horizon-client/src/block_entity_render.rs::classify CopperGolem kind
119 BuiltInBlockModels.createFlowerBedModel missing minor: the 0.25 block shift for a flower bed shown by a copper golem is not applied
120 BuiltInBlockModels.createEnchantingTable port crates/horizon-client/src/block_entity_render.rs::classify EnchantingTable kind
121 BuiltInBlockModels.specialModelWithPropertyDispatch port crates/horizon-client/src/block_entity_render.rs::classify property dispatch by block state values
122 BuiltInBlockModels.Builder.put skip:java builder map of special models
123 FluidModel.Unbaked.bake port crates/horizon-client/src/mesher.rs::MeshTables::new gap: minor: water and lava layers hard-wired; translucency picked in fluid tesselate
124 FluidModel.Unbaked.getAndValidateMaterial port crates/horizon-client/src/mesher.rs::MeshTables::new sprite lookup through layer(); no separate atlas check
125 FluidRenderer.isFaceOccludedByState port crates/horizon-client/src/mesher/fluid.rs::occluded_by fluid face occlusion by the neighbour's face shape
126 FluidRenderer.shouldRenderFace port crates/horizon-client/src/mesher/fluid.rs::tesselate render_up, render_down and side checks, neighbour-same-fluid and self occlusion
127 FluidRenderer.addFace inline crates/horizon-client/src/mesher/fluid.rs::tesselate quad closure in tesselate
128 FluidRenderer.calculateAverageHeight inline crates/horizon-client/src/mesher/fluid.rs::tesselate average closure in tesselate
129 FluidRenderer.addWeightedHeight inline crates/horizon-client/src/mesher/fluid.rs::tesselate weighted sum inside the average closure
130 FluidRenderer.vertex inline crates/horizon-client/src/mesher/fluid.rs::tesselate vertex built in the quad closure
131 FluidStateModelSet.bake port crates/horizon-client/src/mesher.rs::MeshTables::new fluid layers and tints baked per fluid
132 LoadedBlockModels.bake port crates/horizon-assets/src/bake.rs::bake_block_model bakes each block model; the loop over the set is the caller's
133 ModelBlockRenderer.tesselateBlock port crates/horizon-client/src/mesher.rs::Mesher::mesh per block: fluids, models, smooth-light choice
134 ModelBlockRenderer.configureTintCache port crates/horizon-client/src/mesher.rs::Tints::new per section tint tables
135 ModelBlockRenderer.resetTintCache inline crates/horizon-client/src/mesher.rs::Tints::new tables are built fresh per section, no reset
136 ModelBlockRenderer.tesselateAmbientOcclusion port crates/horizon-client/src/mesher.rs::Mesher::face AO branch of face
137 ModelBlockRenderer.tesselateFlat port crates/horizon-client/src/mesher.rs::Mesher::face flat branch of face
138 ModelBlockRenderer.shouldRenderFace port crates/horizon-world/src/block_render.rs::FaceVisibility::should_render_face per face visibility, called from Mesher::mesh
139 ModelBlockRenderer.putQuadWithTint port crates/horizon-client/src/mesher.rs::Mesher::face tinted vertex write
140 ModelBlockRenderer.getTintColor port crates/horizon-client/src/mesher.rs::Mesher::tint tint source index to colour
141 ModelBlockRenderer.computeTintColor port crates/horizon-client/src/mesher.rs::Tints::get biome colour average over the blend radius
142 MovingBlockRenderState.getBlockTint port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_block_vertices gap: minor: tint is the particle colour at the source position, not the biome tint at the moved spot
143 MovingBlockRenderState.getBlockState port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_blocks moved block and piston base
144 SelectBlockModel.update missing minor: display-context switch (copper golem hand, flower bed) is not applied; block items use the normal transform
145 SelectBlockModel.Unbaked.bake missing minor: same display-context switch, not baked
146 SelectBlockModel.UnbakedSwitch.bake missing minor: same display-context switch, not baked
147 BlockStateModelDispatcher.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind variant selection per block state
148 BlockStateModelDispatcher.MultiPartDefinition.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind multipart selectors bound per state
149 BlockStateModelDispatcher.SimpleModelSelectors.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind variant predicates bound per state
+115
View File
@@ -0,0 +1,115 @@
Variant.SimpleModelState.asModelState port crates/horizon-assets/src/bake/transform.rs::BlockModelTransform::new quarter turns from x, y, z plus the uvlock flag, prepared once per rotation
Variant.SimpleModelState.withX skip:java copy-with setter of an immutable record; Variant::decode reads x, y, z directly
Variant.SimpleModelState.withY skip:java copy-with setter of an immutable record; Variant::decode reads x, y, z directly
Variant.SimpleModelState.withZ skip:java copy-with setter of an immutable record; Variant::decode reads x, y, z directly
Variant.SimpleModelState.withUvLock skip:java copy-with setter of an immutable record; Variant::decode reads uvlock directly
VariantMutator.then skip:java composes JSON field setters; Variant::decode reads all fields in one pass
VariantSelector.predicate port crates/horizon-assets/src/blockstate/bind.rs::variant_predicate parses the property clauses; matching against states is in BlockStateDefinition::bind
WeightedVariants.computeMaterialFlags skip:java OR of per-model render flags; Horizon keeps translucency per face (BakedFace in models/catalog.rs)
WeightedVariants.Unbaked.bake inline crates/horizon-client/src/models/catalog.rs::StateModels::load each weighted variant baked once with its transform; the choice is kept in CompiledChoices
WeightedVariants.Unbaked.resolveDependencies inline crates/horizon-client/src/models/catalog.rs::StateModels::load model names gathered from all definitions before the block library loads
CombinedCondition.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BoundCondition::bind AND and OR branches; the test itself is BoundCondition::matches
KeyValueCondition.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BoundCondition::bind property lookup per key and the properties branch
KeyValueCondition.Term.parse port crates/horizon-assets/src/blockstate.rs::Condition::decode reads the leading "!" as negation
KeyValueCondition.Terms.parse port crates/horizon-assets/src/blockstate.rs::Condition::decode splits on "|"; empty terms are rejected
KeyValueCondition.Terms.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BoundCondition::bind each term is checked against the states directly, not via allowed-value lists; same result
KeyValueCondition.Terms.getValueOrThrow port crates/horizon-assets/src/blockstate/bind.rs::PropertyValues::parse an unknown value is an error in both
MultiPartModel.collectParts port crates/horizon-assets/src/blockstate/choice.rs::CompiledChoices::for_each one nextLong seed for the root, reset before each selected part
MultiPartModel.SharedBakedState.getFirstModel port crates/horizon-assets/src/blockstate/choice.rs::CompiledChoices::particle_variant first selector's variant, whether or not it applies
MultiPartModel.SharedBakedState.computeMaterialFlags skip:java same OR of render flags as WeightedVariants; translucency is kept per face
MultiPartModel.SharedBakedState.selectModels port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind selected selector indices per state, computed once at load
MultiPartModel.Unbaked.visualEqualityGroup skip:java key for sharing identical visual states; Horizon keys block states by id
MultiPartModel.Unbaked.resolveDependencies inline crates/horizon-client/src/models/catalog.rs::StateModels::load model names gathered from every multipart selector
MultiPartModel.Unbaked.bake inline crates/horizon-client/src/models/catalog.rs::StateModels::load shared bake per definition; per-state selection stored in states
Selector.instantiate port crates/horizon-assets/src/blockstate/bind.rs::BlockStateDefinition::bind a selector without a condition applies to every state
BlockStateModelWrapper.update port crates/horizon-client/src/game/minecarts.rs::Game::block_model_vertices gap: player: no tint layers, so carried or cart blocks with tint sources (grass, leaves) are drawn untinted
BlockStateModelWrapper.updateTints missing player: carried and cart blocks with tint sources (grass, leaves, water) show untinted; Horizon's block_model_vertices has no tint step
BlockStateModelWrapper.Unbaked.bake skip:java builds the wrapper object; Horizon passes the transform straight to block_model_vertices
CompositeBlockModel.update missing player: only block display entities reach this and Horizon draws none, so a special block (chest and similar) shown that way never appears
CompositeBlockModel.Unbaked.bake skip:java builds the composite object; no separate step in Horizon
ConditionalBlockModel.update inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one Christmas chest texture chosen in the chest branch by extended_christmas()
ConditionalBlockModel.Unbaked.bake skip:java builds the conditional object; the chest branch picks the texture when drawing
SpecialBlockModelWrapper.Unbaked.bake skip:data special models come from exported model data in BlockEntityRenderer::load; no baking step
AbstractEndPortalRenderer.submitSpecial port crates/horizon-client/src/block_entity_render.rs::portal_cube gap: minor: no outline pass (outlineColor) for the portal faces
AbstractSignRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one front and back text drawn in the sign branch via sign_text_calls
AbstractSignRenderer.isOutlineVisible port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: minor: only the 16-block distance is tested; spyglass scoping in first person does not turn the outline on
AbstractSignRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: minor: the text filtering option is not read; filtered sign lines are not shown
BannerRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one flutter phase from position, game time and partial tick; standing or wall placement
BannerRenderer.bannerModel inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one wall or standing banner model chosen in the banner branch
BannerRenderer.flagModel inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one wall or standing flag model chosen in the banner branch
BannerRenderer.submitSpecial port crates/horizon-client/src/item_render/special.rs::submit banner as a special item model: base, flag and pattern layers
BannerRenderer.submitBanner port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one base model, flag and pattern layers; the crumbling overlay is drawn by render_breaking
BannerRenderer.submitPatternLayer inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one loop over up to 16 pattern layers in the banner branch
BannerRenderer.modelTransformation inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one translate, turn by angle, scale in the banner branch
BeaconRenderer.extractRenderState inline crates/horizon-client/src/game/beacon.rs::Game::beacon_geometry animation time and beam radius scale computed there
BeaconRenderer.extract inline crates/horizon-client/src/game/beacon.rs::Game::beacon_geometry same time and scale rules, from distance and scoping
BeaconRenderer.renderQuad port crates/horizon-client/src/block_entity_render.rs::beam solid beam and glow quads per section
BeaconRenderer.addVertex port crates/horizon-client/src/block_entity_render.rs::beam vertex with colour and full light, emitted by beam's inner emit
BellRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one bell ticks and shake direction read in the bell branch
BellRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: player: no crack overlay while a bell is broken (render_breaking draws only banners and chests)
BlockEntityRenderDispatcher.getRenderer port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::kind renderer chosen from the block state
BlockEntityRenderDispatcher.tryExtractRenderState port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render gap: minor: distance cull only (256 for gateways); no frustum, type-validity or off-screen test here
BlockEntityRenderDispatcher.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one draws each kind; no crash report wrapper
BlockEntityRenderDispatcher.onResourceManagerReload missing minor: block entity models load once in BlockEntityRenderer::load; no reload path found
BlockEntityRenderers.createEntityRenderers skip:data renderer registration table; Horizon's classify table replaces it
BlockEntityWithBoundingBoxRenderer.extractRenderState missing player: game-master players (creative or op) see no structure box, invisible-block or structure-void markers
BlockEntityWithBoundingBoxRenderer.extract missing player: game-master players (creative or op) see no structure box, invisible-block or structure-void markers
BlockEntityWithBoundingBoxRenderer.submit missing player: game-master players (creative or op) see no structure box, invisible-block or structure-void markers
BlockEntityWithBoundingBoxRenderer.renderInvisibleBlocks missing player: game-master players (creative or op) see no barrier, light or air block markers
BlockEntityWithBoundingBoxRenderer.renderStructureVoids missing player: game-master players (creative or op) see no structure void markers
BrightnessCombiner.acceptDouble inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one brighter of the two chest halves per channel, in the chest branch
BrushableBlockRenderer.extractRenderState missing player: brushing a suspicious block shows no item on its face; the hit side and dust stage are not read
BrushableBlockRenderer.submit missing player: the brushed item never slides out of the block while it is brushed
BrushableBlockRenderer.translations missing player: the per-side slide offset for each dust stage is not computed
CampfireRenderer.extractRenderState inline crates/horizon-client/src/game/campfire.rs::Game::campfire_geometry facing and per-slot item seed read there
CampfireRenderer.submit port crates/horizon-client/src/game/campfire.rs::Game::campfire_geometry items on the four sides, drawn within 64 blocks
ChestRenderer.createModelTransformation inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one chest turn about its centre in the chest branch
ConduitRenderer.createEyeLayer skip:data model layer; Horizon loads the conduit parts from exported model data in BlockEntityRenderer::load
ConduitRenderer.createWindLayer skip:data model layer; Horizon loads the conduit parts from exported model data in BlockEntityRenderer::load
ConduitRenderer.createShellLayer skip:data model layer; Horizon loads the conduit parts from exported model data in BlockEntityRenderer::load
ConduitRenderer.createCageLayer skip:data model layer; Horizon loads the conduit parts from exported model data in BlockEntityRenderer::load
ConduitRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: player: no crack overlay on the conduit (render_breaking draws only banners and chests)
CopperGolemStatueBlockRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one facing, pose and oxidation texture read in the golem branch
CopperGolemStatueBlockRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: player: no crack overlay on the statue (render_breaking draws only banners and chests)
CopperGolemStatueBlockRenderer.createModelTransformation inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one rotation from the opposite facing in the golem branch
DecoratedPotRenderer.createBaseLayer skip:data pot base model; Horizon loads it from exported model data in BlockEntityRenderer::load
DecoratedPotRenderer.createSidesLayer skip:data pot side models; Horizon loads them from exported model data in BlockEntityRenderer::load
DecoratedPotRenderer.getSideSprite inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one sherd pattern texture per side from pot_patterns, blank side otherwise
DecoratedPotRenderer.createModelTransformation inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one pot turn about its centre in the decorated pot branch
DecoratedPotRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents decorated pot part extents for the item model bounds
HangingSignRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: minor: the text filtering option is not read
LecternRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one book drawn only when has_book is set, turned by facing
LecternRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: player: no crack overlay on the lectern book (render_breaking draws only banners and chests)
PistonHeadRenderer.submit port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_geometry head and base blocks drawn at their offsets
PistonHeadRenderer.createMovingBlock port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_block_vertices gap: minor: the tint is the particle sprite colour, not the block's tint sources
ShelfRenderer.extractRenderState missing player: items placed on shelf blocks are not kept for drawing; only the comparator signal is handled (game/machines.rs::shelf_signal)
ShelfRenderer.submit missing player: items on shelves are invisible
ShelfRenderer.submitItem missing player: shelf item slots, offsets and scale are not drawn
ShulkerBoxRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one facing, colour texture and lid progress read in the shulker branch
ShulkerBoxRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: player: no crack overlay on shulker boxes (render_breaking draws only banners and chests)
ShulkerBoxRenderer.createModelTransform inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one facing transform in the shulker branch
ShulkerBoxRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents shulker lid pose extents for the item model bounds
SkullBlockRenderer.createModel skip:data skull models; Horizon loads them from exported model data in BlockEntityRenderer::load
SkullBlockRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one type, wall facing and turn read from the skull kind; player skin via scene.skull
SkullBlockRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: player: no crack overlay on skulls and heads (render_breaking draws only banners and chests)
SkullBlockRenderer.submitSkull port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: player: no crack overlay on skulls and heads (render_breaking draws only banners and chests)
SkullBlockRenderer.resolveSkullRenderType inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one player head skin via scene.skull, otherwise the type's texture
SkullBlockRenderer.createWallTransformation inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one wall skull offset and turn in the skull branch
SkullBlockRenderer.createGroundTransformation inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one ground skull turn by segment in the skull branch
SpawnerRenderer.extractRenderState port crates/horizon-client/src/mobs/spawner.rs::display_pose spin and scale of the display mob
SpawnerRenderer.submit port crates/horizon-client/src/game/spawner.rs::Game::spawner_geometry display mob at the spawner's centre with spin, tilt and scale
StandingSignRenderer.extractRenderState inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one gap: minor: the text filtering option is not read
StandingSignRenderer.createTransformations inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one front and back text transforms per attachment
TestInstanceRenderer.extractRenderState missing player: creative players placing a test instance block see no beacon beam, box or error markers
TestInstanceRenderer.submit missing player: creative players placing a test instance block see no beacon beam or box
TestInstanceRenderer.submitErrorMarker missing player: red error markers and their text are not drawn
TestInstanceRenderer.shouldRenderOffScreen missing minor: culling policy of a renderer Horizon lacks
TestInstanceRenderer.shouldRender missing minor: culling policy of a renderer Horizon lacks
TheEndGatewayRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one beam and visible cube faces in the end gateway branch
TheEndPortalRenderer.submit port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one portal slab in the end portal branch
TrialSpawnerRenderer.extractRenderState port crates/horizon-client/src/mobs/spawner.rs::display_pose same spin and scale rule as spawners
TrialSpawnerRenderer.submit port crates/horizon-client/src/game/spawner.rs::Game::spawner_geometry trial spawner display mob drawn in the same pass
VaultRenderer.extractRenderState inline crates/horizon-client/src/game/vault.rs::Game::vault_geometry display item and spin read there
VaultRenderer.submit port crates/horizon-client/src/game/vault.rs::Game::vault_geometry item cluster at the vault centre with spin
BlockEntityRenderState.extractBase skip:java copies position, state, light and crack progress; Horizon passes these as arguments
BlockEntityRenderState.fillCrashReportCategory skip:debug crash report detail
Can't render this file because it contains an unexpected character in line 13 and column 112.
+150
View File
@@ -0,0 +1,150 @@
CloudRenderer.getSizeForCloudDistance skip:java GPU ring-buffer capacity for the cloud face buffer; Horizon sizes its vertex buffer from the built mesh
CloudRenderer.packCellData inline crates/horizon-client/src/clouds.rs::Mesh::prepare cell presence is a bool test on the texture grid; no packed long
CloudRenderer.isNorthEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
CloudRenderer.isEastEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
CloudRenderer.isSouthEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
CloudRenderer.isWestEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
CloudRenderer.render port crates/horizon-client/src/gfx.rs::Renderer::draw_frame gap: minor: one cloud pipeline; fancy vs flat is chosen by the mesh fast flag, not by pipeline
CloudRenderer.renderOit missing player: with Improved transparency on, clouds keep the classic blend; no OIT pass exists and the option is only saved
CloudRenderer.buildMesh port crates/horizon-client/src/clouds.rs::Mesh::prepare cell ring walk via cells(radius), nearest first
CloudRenderer.tryBuildCell inline crates/horizon-client/src/clouds.rs::Mesh::prepare skip empty cells, then build the cell's faces
CloudRenderer.encodeFace inline crates/horizon-client/src/clouds.rs::Mesh::prepare 3-byte face records replaced by vertex quads
CloudRenderer.buildExtrudedCell port crates/horizon-client/src/clouds.rs::face_mask top, bottom and side visibility; quads emitted in Mesh::prepare via faces()
CubeMap.initializeVertices port crates/horizon-client/src/gfx/panorama.rs::Panorama::new 24-corner cube; Horizon draws 36 vertices from the shader in the pipeline built here
DebugCrosshairRenderer.<init> skip:debug F3 3D axis gizmo at the view; Horizon has no debug crosshair
DynamicGpuData.reset skip:other GPU per-frame ring reset; wgpu staging in Horizon's Uploads belt
DynamicGpuData.close skip:other GPU buffer release; Rust drops the wgpu buffers
DynamicGpuData.writeTransform skip:other per-draw uniform staging; Horizon writes its uniforms directly with queue writes
DynamicGpuData.writeChunkSections port crates/horizon-client/src/gfx.rs::section_instance gap: player: section fade-in (vanilla default 0.75 s) is not sent; Horizon writes a fixed fourth value
DynamicGpuData.writeChunkSectionsInstanced port crates/horizon-client/src/gfx.rs::section_instance gap: player: section fade-in (vanilla default 0.75 s) is not sent; same instance record as writeChunkSections
DynamicGpuData.writeChunkSectionCommands port crates/horizon-client/src/gfx.rs::Renderer::draw_frame IndexedDraw records built and uploaded into the indirect buffer
DynamicGpuData.ChunkSectionInfo.write port crates/horizon-client/src/gfx.rs::section_instance gap: player: packs origin only; the fade-in visibility float (default 0.75 s) is not in the record
DynamicGpuData.IndexedDraw.write skip:other indirect draw args; Horizon keeps them as [u32;5] words uploaded in one copy
DynamicGpuData.TerrainTransform.write skip:other terrain UBO layout; Horizon's terrain pass uses its own uniforms
DynamicGpuData.Transform.write skip:other std140 layout of the transform UBO; wgpu bindings in Horizon
DynamicGpuDataStorageMapped.endFrame skip:other GPU ring buffer frame bookkeeping
DynamicGpuDataStorageMapped.resizeBuffers skip:other GPU buffer growth; Horizon grows its wgpu buffers when a draw needs more space
DynamicGpuDataStorageMapped.writeData skip:other GPU staging ring for mapped buffers
DynamicGpuDataStorageMapped.writeDataBatched skip:other GPU staging ring for mapped buffers
DynamicGpuDataStorageMapped.writeDataBatchedMultiple skip:other GPU staging ring for mapped buffers
DynamicGpuDataStorageMapped.close skip:other GPU buffer release
DynamicGpuDataStorageNonMapped.endFrame skip:other GPU staging bookkeeping; Horizon uses queue writes for uploads
DynamicGpuDataStorageNonMapped.writeData skip:other GPU staging for non-mapped buffers
DynamicGpuDataStorageNonMapped.resizeBuffers skip:other GPU buffer growth
DynamicGpuDataStorageNonMapped.writeDataBatched skip:other GPU staging for non-mapped buffers
DynamicGpuDataStorageNonMapped.writeDataBatchedMultiple skip:other GPU staging for non-mapped buffers
DynamicGpuDataStorageNonMapped.close skip:other GPU buffer release
EndFlashState.calculateIntensity port crates/horizon-client/src/game/end.rs::EndFlash::tick intensity sine over offset..offset+duration, computed on each tick
EndFlashState.flashStartedThisTick inline crates/horizon-client/src/game/end.rs::EndFlash::tick sound_in is armed on the same rising edge (intensity above 0, previous at or below 0)
FaceInfo.Extent.select skip:data corner selection; Horizon's unit-cube corner table PORTAL_FACES in block_entity_render.rs has the same order
FaceInfo.VertexInfo.select skip:data corner selection; Horizon's unit-cube corner table PORTAL_FACES in block_entity_render.rs has the same order
FirstPersonHandsAndItemsRenderer.calculateMapTilt inline crates/horizon-client/src/game/maps.rs::Game::two_handed_map_geometry tilt computed inline with the calculateMapTilt comment
FirstPersonHandsAndItemsRenderer.renderPlayerHand port crates/horizon-client/src/game.rs::Game::hand_geometry empty main hand's arm model with the player skin
FirstPersonHandsAndItemsRenderer.renderMapHand missing player: holding a map in both hands, neither arm is drawn behind it (vanilla draws both arms)
FirstPersonHandsAndItemsRenderer.renderOneHandedMap port crates/horizon-client/src/first_person.rs::one_handed_map_pose gap: player: the arm holding a map is not drawn; the map hand branch skips the arm
FirstPersonHandsAndItemsRenderer.renderTwoHandedMap port crates/horizon-client/src/game/maps.rs::Game::two_handed_map_geometry gap: player: the arms that hold a two-handed map are not drawn
FirstPersonHandsAndItemsRenderer.renderMap port crates/horizon-client/src/game/maps.rs::Game::held_map map background with its 7-pixel border, then the map contents
FirstPersonHandsAndItemsRenderer.applyEatTransform port crates/horizon-client/src/first_person.rs::item_pose ItemPose::Eat: bob and jiggle while eating or drinking
FirstPersonHandsAndItemsRenderer.applyBrushTransform missing player: a brush in use is held still; it does not sweep back and forth while brushing
FirstPersonHandsAndItemsRenderer.applyItemArmAttackTransform port crates/horizon-client/src/first_person.rs::item_pose attack swing rotation in the Swing pose
FirstPersonHandsAndItemsRenderer.applyItemArmTransform port crates/horizon-client/src/first_person.rs::item_pose base item-in-arm translation
FirstPersonHandsAndItemsRenderer.submitHandsWithItems port crates/horizon-client/src/game.rs::Game::hand_geometry sway, both hands, empty-hand arm and item pose
FirstPersonHandsAndItemsRenderer.swingArm port crates/horizon-client/src/first_person.rs::item_pose attack swing translation and arm rotation
GameRenderer.<init> port crates/horizon-client/src/gfx.rs::Renderer::new lightmap, hand target, debug crosshair and screen effects are built here
GameRenderer.close skip:other GPU resource teardown; wgpu drops the renderer's objects
GameRenderer.checkEntityPostEffect missing player: spectating a creeper, spider or enderman does not put their overlay shader on the screen
GameRenderer.processBlurEffect port crates/horizon-client/src/menu_blur.rs::MenuBlur::apply menu background blur pass
GameRenderer.preloadUiShader skip:other GPU pipeline precompile at load; Horizon builds its pipelines in Renderer::new
GameRenderer.update port crates/horizon-client/src/camera.rs::AvatarBob::update_bob gap: minor: the requested post-effect list (from /postEffect) is not built
GameRenderer.extract skip:other render-state copy for the vanilla render thread; Horizon renders from game state
GameRenderer.preparePostEffects missing minor: vanilla post chains from requested effects are not applied; shader packs use pack_post
GameRenderer.applyPostEffects missing minor: vanilla post chains are not run; shader packs use pack_post
GameRenderer.tryTakeScreenshotIfNeeded missing player: a new singleplayer world gets no icon.png, so the world list shows no preview picture
GameRenderer.takeAutoScreenshot missing player: no icon.png is written from the first rendered frame; the world list keeps a blank picture
GameRenderer.integrate3DHudDepth missing minor: only runs when a post effect is applied (consistentDepthRequired); Horizon applies none
GameRenderer.extractWindow skip:other render-state copy of the window size; Horizon reads the window directly
GameRenderer.extractOptions skip:other render-state copy of options; Horizon reads settings directly
GameRenderer.extractCamera skip:other render-state copy of camera and fog; Horizon computes them in camera.rs and fog.rs
GameRenderer.resetData inline crates/horizon-client/src/game.rs::Game::finish_close_world boss overlay reset on world close; camera and map-texture resets not verified here
GameRenderer.projectPointToScreen skip:other no callers in vanilla 26.3
GameRenderer.useImprovedTransparency missing player: the Improved transparency option is saved and listed but nothing it gates exists in the renderer
GlobalSettingsUniform.update skip:other global uniform (window size, time, gamma, glint) written per pass; Horizon sets its own uniforms
GpuWarnlistManager.getAllWarnings missing minor: no GPU driver warnlist; Horizon does not check the driver against known-bad lists
GpuWarnlistManager.compilePatterns missing minor: no GPU driver warnlist patterns
GpuWarnlistManager.parseJson missing minor: no GPU driver warnlist JSON
GpuWarnlistManager.Preparations.matchAny missing minor: no GPU driver warnlist matching
LevelEventHandler.playJukeboxSong port crates/horizon-client/src/game/jukebox.rs::Game::start_song song starts and the now-playing overlay is shown
LevelEventHandler.stopJukeboxSong port crates/horizon-client/src/game/jukebox.rs::Game::stop_song song sound stops for that jukebox
LevelRenderer.<init> port crates/horizon-client/src/gfx.rs::Renderer::new targets, pipelines and buffers built once
LevelRenderer.submitFeatures port crates/horizon-client/src/gfx.rs::Renderer::draw_frame entities, block entities, crumbling, particles, outline and gizmos are submitted and drawn in the frame
LevelRenderer.repositionCamera port crates/horizon-client/src/gfx/resident.rs::camera_column camera section column that the section grid is centred on; gap: minor: world border invalidation is not part of it
LevelRenderer.addMainPass port crates/horizon-client/src/gfx.rs::Renderer::draw_frame gap: minor: the Improved transparency targets (depth bounds, transmittance, accumulate) are not created
LevelRenderer.executeAlwaysOnTop port crates/horizon-client/src/game.rs::Game::render always-on-top debug lines and crosshair drawn over the world
LevelRenderer.executeSolid port crates/horizon-client/src/gfx.rs::Renderer::draw_sections solid section draws in arena page order
LevelRenderer.prepareTranslucents port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort translucent quads sorted from the camera each frame
LevelRenderer.executeOit missing player: with Improved transparency on, translucent blocks and water blend order-independently; Horizon has no OIT pass and the option does nothing
LevelRenderer.executeDepthBoundsCull missing player: part of Improved transparency's pass; no depth-bounds cull exists in Horizon
LevelRenderer.executeOitWaterMask missing player: part of Improved transparency; no water mask pass exists in Horizon
LevelRenderer.extractSectionDrawGroups port crates/horizon-client/src/gfx.rs::Renderer::draw_frame section draws grouped per layer and arena page from the visible sections
LevelRenderer.prepareChunkRenders port crates/horizon-client/src/gfx.rs::Renderer::draw_frame per-layer draw list built for the frame, reversed for translucent layers
LevelRenderer.performTransientBlockRemovals missing minor: removes transient blocks when their section recompiles; Horizon has no transient blocks
LevelRenderer.prepareChunkRendersIndirect port crates/horizon-client/src/gfx.rs::Renderer::draw_frame indirect draw arguments written and multi-draw issued
LevelRenderer.compileSections port crates/horizon-client/src/streaming.rs::Streaming::update section meshing jobs queued for dirty sections nearest the camera
LevelRenderer.submitEntities port crates/horizon-client/src/gfx.rs::Renderer::draw_frame entity models drawn with their batches
LevelRenderer.submitBlockEntities port crates/horizon-client/src/gfx.rs::Renderer::block_entities block entity list submitted for drawing
LevelRenderer.submitBlockDestroyAnimation port crates/horizon-client/src/gfx.rs::Renderer::draw_frame crumbling overlay drawn on the block being broken
LevelRenderer.submitTransientBlocks missing player: a block the server sends as temporary (ClientboundAddTransientBlockPacket) does not appear; the packet is not handled
LevelRenderer.submitHitOutline port crates/horizon-client/src/game.rs::Game::outline_boxes outline of the block under the crosshair
LevelRenderer.close skip:other GPU resource teardown
LevelRenderer.invalidateCompiledGeometry port crates/horizon-client/src/gfx.rs::Renderer::clear_sections all section meshes dropped and rebuilt when settings are applied
LevelRenderer.scheduleTranslucentSectionResort port crates/horizon-client/src/gfx/translucency.rs::SortState::update resort scheduled when the camera point of view changes
LevelRenderer.scheduleResort port crates/horizon-client/src/gfx/translucency.rs::SortState::update per-section resort gated by point-of-view change and translucent geometry
LevelRenderer.resetLevelRenderData port crates/horizon-client/src/gfx.rs::Renderer::clear_sections section data released when a level is left
LevelRenderer.hasRenderedAllSections missing minor: only the world icon screenshot asks this, and that screenshot is missing
LevelRenderer.isSectionCompiledAndVisible port crates/horizon-client/src/gfx/resident.rs::Resident::contains gap: minor: no section fade-in, so the 0.3 visibility threshold is not checked
LevelRenderer.finalizeGizmoCollection port crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos debug gizmos collected for the frame
LevelTargetBundle.replace skip:other render-target bundle for post chains; Horizon has no frame graph
LevelTargetBundle.get skip:other render-target bundle for post chains; Horizon has no frame graph
Lightmap.render port crates/horizon-client/src/gfx.rs::Renderer::update_lightmap lightmap pass from sky, block, darkness, gamma, night vision, flicker and boss darkening
LightmapRenderStateExtractor.calculateDarknessScale port crates/horizon-client/src/game/sculk.rs::Game::darkness_lighting pulsing darkness scale from the darkness blend and the option
LightmapRenderStateExtractor.extract port crates/horizon-client/src/game.rs::Game::render lightmap inputs gathered into the frame; the end flash is added to sky_light_factor in end.rs::end_flash_sky
MapRenderer.extractRenderState port crates/horizon-client/src/game/maps.rs::Game::map_vertices map texture and decorations gathered for drawing
MapRenderer.extractDecorationRenderState port crates/horizon-client/src/game/maps.rs::Game::map_vertices decoration sprite, position and rotation drawn per map
MappableRingBuffer.currentBuffer skip:other GPU ring buffer bookkeeping
MappableRingBuffer.rotate skip:other GPU ring buffer bookkeeping
MappableRingBuffer.close skip:other GPU buffer release
MultiblockChestResources.select inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one single, left and right chest sprite chosen by ChestPart
MultiblockChestResources.map skip:java record mapping of the three sprites
Octree.isClose missing unsure: vanilla flags sections next to the camera so the occlusion walk keeps them; not traced in Horizon's occlusion path
Octree.AxisSorting.getAxisSorting skip:java traversal-order helper; Resident::visible sorts visible sections by distance
Octree.Branch.<init> skip:other octree node; Horizon keeps sections in a resident grid instead
Octree.Branch.add skip:other octree insert; Horizon keeps sections in a resident grid instead
Octree.Branch.getNodeIndex skip:other octree child index; Horizon keeps sections in a resident grid instead
Octree.Branch.createChildBoundingBox skip:other octree child bounds; Horizon keeps sections in a resident grid instead
Octree.Branch.visitNodes port crates/horizon-client/src/gfx/resident.rs::Resident::visible frustum and distance visit of sections, nearest first
Octree.Branch.getAABB skip:java no callers in vanilla 26.3
Octree.Leaf.visitNodes port crates/horizon-client/src/gfx/resident.rs::Resident::visible leaf sections visited in the same frustum and distance walk
OrderedSubmitNodeCollector.submitModel skip:other submit queue of vanilla's render thread; Horizon draws each model in place
OrderedSubmitNodeCollector.submitCrumblingOverlay port crates/horizon-client/src/gfx.rs::Renderer::draw_frame crumbling overlay drawn on the block being broken
OrderedSubmitNodeCollector.submitModelPart skip:other submit queue of vanilla's render thread; Horizon draws each model part in place
Panorama.extractRenderState port crates/horizon-client/src/gfx/panorama.rs::Rotation::update spin accumulated from the panorama speed option; overlay blit is drawn by the title screen
PlayerSkinRenderCache.createLookup port crates/horizon-client/src/skins.rs::lookup skin texture chosen from the profile, falling back to the default skin
PlayerSkinRenderCache.RenderInfo.renderType port crates/horizon-client/src/game/item_draw.rs::Host::player_skin skin texture path a head is drawn with; no separate render type in Horizon
PlayerSkinRenderCache.RenderInfo.textureView skip:other GPU texture view cache; Horizon binds skin textures by atlas name
PlayerSkinRenderCache.RenderInfo.glyphRenderTypes skip:other font render types for name tags; Horizon's text uses its own glyph pipeline
PlayerSkinRenderCache.RenderInfo.equals skip:java value equality for a cache key
PlayerSkinRenderCache.RenderInfo.hashCode skip:java hash for a cache key
PostChain.load missing minor: no data-driven post chain loader; only the blur and entity outline chains exist, hard-coded
PostChain.getReferencedExternalTargets skip:other config validation for data-driven post chains
PostChain.createPass missing minor: no data-driven post pass creation; the outline and blur passes are fixed
PostChain.addToFrame port crates/horizon-client/src/gfx/entity_outline.rs::EntityOutline::draw gap: minor: runs the entity outline chain only; other chains are not built
PostChain.process port crates/horizon-client/src/menu_blur.rs::MenuBlur::apply gap: minor: runs the menu blur only; other chains are not run
PostChain.getOrCreatePersistentTarget skip:other GPU persistent target cache
PostChain.close skip:other GPU resource teardown
PostChain.TargetBundle.getOrThrow skip:other frame-graph target lookup; Horizon has no frame graph
PostChainConfig.Pass.referencedTargets skip:data config accessor for post chain JSON
PostPass.<init> skip:other GPU pipeline creation for a post pass
PostPass.addToFrame port crates/horizon-client/src/gfx/entity_outline.rs::EntityOutline::draw gap: minor: the pass runs inside the entity outline draw only
PostPass.close skip:other GPU resource teardown
PostPass.TargetInput.getHandle skip:other frame-graph input handle
PostPass.TargetInput.texture skip:other frame-graph input texture view
1 CloudRenderer.getSizeForCloudDistance skip:java GPU ring-buffer capacity for the cloud face buffer; Horizon sizes its vertex buffer from the built mesh
2 CloudRenderer.packCellData inline crates/horizon-client/src/clouds.rs::Mesh::prepare cell presence is a bool test on the texture grid; no packed long
3 CloudRenderer.isNorthEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
4 CloudRenderer.isEastEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
5 CloudRenderer.isSouthEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
6 CloudRenderer.isWestEmpty inline crates/horizon-client/src/clouds.rs::Mesh::prepare neighbour-empty flags passed to face_mask in N,E,S,W order
7 CloudRenderer.render port crates/horizon-client/src/gfx.rs::Renderer::draw_frame gap: minor: one cloud pipeline; fancy vs flat is chosen by the mesh fast flag, not by pipeline
8 CloudRenderer.renderOit missing player: with Improved transparency on, clouds keep the classic blend; no OIT pass exists and the option is only saved
9 CloudRenderer.buildMesh port crates/horizon-client/src/clouds.rs::Mesh::prepare cell ring walk via cells(radius), nearest first
10 CloudRenderer.tryBuildCell inline crates/horizon-client/src/clouds.rs::Mesh::prepare skip empty cells, then build the cell's faces
11 CloudRenderer.encodeFace inline crates/horizon-client/src/clouds.rs::Mesh::prepare 3-byte face records replaced by vertex quads
12 CloudRenderer.buildExtrudedCell port crates/horizon-client/src/clouds.rs::face_mask top, bottom and side visibility; quads emitted in Mesh::prepare via faces()
13 CubeMap.initializeVertices port crates/horizon-client/src/gfx/panorama.rs::Panorama::new 24-corner cube; Horizon draws 36 vertices from the shader in the pipeline built here
14 DebugCrosshairRenderer.<init> skip:debug F3 3D axis gizmo at the view; Horizon has no debug crosshair
15 DynamicGpuData.reset skip:other GPU per-frame ring reset; wgpu staging in Horizon's Uploads belt
16 DynamicGpuData.close skip:other GPU buffer release; Rust drops the wgpu buffers
17 DynamicGpuData.writeTransform skip:other per-draw uniform staging; Horizon writes its uniforms directly with queue writes
18 DynamicGpuData.writeChunkSections port crates/horizon-client/src/gfx.rs::section_instance gap: player: section fade-in (vanilla default 0.75 s) is not sent; Horizon writes a fixed fourth value
19 DynamicGpuData.writeChunkSectionsInstanced port crates/horizon-client/src/gfx.rs::section_instance gap: player: section fade-in (vanilla default 0.75 s) is not sent; same instance record as writeChunkSections
20 DynamicGpuData.writeChunkSectionCommands port crates/horizon-client/src/gfx.rs::Renderer::draw_frame IndexedDraw records built and uploaded into the indirect buffer
21 DynamicGpuData.ChunkSectionInfo.write port crates/horizon-client/src/gfx.rs::section_instance gap: player: packs origin only; the fade-in visibility float (default 0.75 s) is not in the record
22 DynamicGpuData.IndexedDraw.write skip:other indirect draw args; Horizon keeps them as [u32;5] words uploaded in one copy
23 DynamicGpuData.TerrainTransform.write skip:other terrain UBO layout; Horizon's terrain pass uses its own uniforms
24 DynamicGpuData.Transform.write skip:other std140 layout of the transform UBO; wgpu bindings in Horizon
25 DynamicGpuDataStorageMapped.endFrame skip:other GPU ring buffer frame bookkeeping
26 DynamicGpuDataStorageMapped.resizeBuffers skip:other GPU buffer growth; Horizon grows its wgpu buffers when a draw needs more space
27 DynamicGpuDataStorageMapped.writeData skip:other GPU staging ring for mapped buffers
28 DynamicGpuDataStorageMapped.writeDataBatched skip:other GPU staging ring for mapped buffers
29 DynamicGpuDataStorageMapped.writeDataBatchedMultiple skip:other GPU staging ring for mapped buffers
30 DynamicGpuDataStorageMapped.close skip:other GPU buffer release
31 DynamicGpuDataStorageNonMapped.endFrame skip:other GPU staging bookkeeping; Horizon uses queue writes for uploads
32 DynamicGpuDataStorageNonMapped.writeData skip:other GPU staging for non-mapped buffers
33 DynamicGpuDataStorageNonMapped.resizeBuffers skip:other GPU buffer growth
34 DynamicGpuDataStorageNonMapped.writeDataBatched skip:other GPU staging for non-mapped buffers
35 DynamicGpuDataStorageNonMapped.writeDataBatchedMultiple skip:other GPU staging for non-mapped buffers
36 DynamicGpuDataStorageNonMapped.close skip:other GPU buffer release
37 EndFlashState.calculateIntensity port crates/horizon-client/src/game/end.rs::EndFlash::tick intensity sine over offset..offset+duration, computed on each tick
38 EndFlashState.flashStartedThisTick inline crates/horizon-client/src/game/end.rs::EndFlash::tick sound_in is armed on the same rising edge (intensity above 0, previous at or below 0)
39 FaceInfo.Extent.select skip:data corner selection; Horizon's unit-cube corner table PORTAL_FACES in block_entity_render.rs has the same order
40 FaceInfo.VertexInfo.select skip:data corner selection; Horizon's unit-cube corner table PORTAL_FACES in block_entity_render.rs has the same order
41 FirstPersonHandsAndItemsRenderer.calculateMapTilt inline crates/horizon-client/src/game/maps.rs::Game::two_handed_map_geometry tilt computed inline with the calculateMapTilt comment
42 FirstPersonHandsAndItemsRenderer.renderPlayerHand port crates/horizon-client/src/game.rs::Game::hand_geometry empty main hand's arm model with the player skin
43 FirstPersonHandsAndItemsRenderer.renderMapHand missing player: holding a map in both hands, neither arm is drawn behind it (vanilla draws both arms)
44 FirstPersonHandsAndItemsRenderer.renderOneHandedMap port crates/horizon-client/src/first_person.rs::one_handed_map_pose gap: player: the arm holding a map is not drawn; the map hand branch skips the arm
45 FirstPersonHandsAndItemsRenderer.renderTwoHandedMap port crates/horizon-client/src/game/maps.rs::Game::two_handed_map_geometry gap: player: the arms that hold a two-handed map are not drawn
46 FirstPersonHandsAndItemsRenderer.renderMap port crates/horizon-client/src/game/maps.rs::Game::held_map map background with its 7-pixel border, then the map contents
47 FirstPersonHandsAndItemsRenderer.applyEatTransform port crates/horizon-client/src/first_person.rs::item_pose ItemPose::Eat: bob and jiggle while eating or drinking
48 FirstPersonHandsAndItemsRenderer.applyBrushTransform missing player: a brush in use is held still; it does not sweep back and forth while brushing
49 FirstPersonHandsAndItemsRenderer.applyItemArmAttackTransform port crates/horizon-client/src/first_person.rs::item_pose attack swing rotation in the Swing pose
50 FirstPersonHandsAndItemsRenderer.applyItemArmTransform port crates/horizon-client/src/first_person.rs::item_pose base item-in-arm translation
51 FirstPersonHandsAndItemsRenderer.submitHandsWithItems port crates/horizon-client/src/game.rs::Game::hand_geometry sway, both hands, empty-hand arm and item pose
52 FirstPersonHandsAndItemsRenderer.swingArm port crates/horizon-client/src/first_person.rs::item_pose attack swing translation and arm rotation
53 GameRenderer.<init> port crates/horizon-client/src/gfx.rs::Renderer::new lightmap, hand target, debug crosshair and screen effects are built here
54 GameRenderer.close skip:other GPU resource teardown; wgpu drops the renderer's objects
55 GameRenderer.checkEntityPostEffect missing player: spectating a creeper, spider or enderman does not put their overlay shader on the screen
56 GameRenderer.processBlurEffect port crates/horizon-client/src/menu_blur.rs::MenuBlur::apply menu background blur pass
57 GameRenderer.preloadUiShader skip:other GPU pipeline precompile at load; Horizon builds its pipelines in Renderer::new
58 GameRenderer.update port crates/horizon-client/src/camera.rs::AvatarBob::update_bob gap: minor: the requested post-effect list (from /postEffect) is not built
59 GameRenderer.extract skip:other render-state copy for the vanilla render thread; Horizon renders from game state
60 GameRenderer.preparePostEffects missing minor: vanilla post chains from requested effects are not applied; shader packs use pack_post
61 GameRenderer.applyPostEffects missing minor: vanilla post chains are not run; shader packs use pack_post
62 GameRenderer.tryTakeScreenshotIfNeeded missing player: a new singleplayer world gets no icon.png, so the world list shows no preview picture
63 GameRenderer.takeAutoScreenshot missing player: no icon.png is written from the first rendered frame; the world list keeps a blank picture
64 GameRenderer.integrate3DHudDepth missing minor: only runs when a post effect is applied (consistentDepthRequired); Horizon applies none
65 GameRenderer.extractWindow skip:other render-state copy of the window size; Horizon reads the window directly
66 GameRenderer.extractOptions skip:other render-state copy of options; Horizon reads settings directly
67 GameRenderer.extractCamera skip:other render-state copy of camera and fog; Horizon computes them in camera.rs and fog.rs
68 GameRenderer.resetData inline crates/horizon-client/src/game.rs::Game::finish_close_world boss overlay reset on world close; camera and map-texture resets not verified here
69 GameRenderer.projectPointToScreen skip:other no callers in vanilla 26.3
70 GameRenderer.useImprovedTransparency missing player: the Improved transparency option is saved and listed but nothing it gates exists in the renderer
71 GlobalSettingsUniform.update skip:other global uniform (window size, time, gamma, glint) written per pass; Horizon sets its own uniforms
72 GpuWarnlistManager.getAllWarnings missing minor: no GPU driver warnlist; Horizon does not check the driver against known-bad lists
73 GpuWarnlistManager.compilePatterns missing minor: no GPU driver warnlist patterns
74 GpuWarnlistManager.parseJson missing minor: no GPU driver warnlist JSON
75 GpuWarnlistManager.Preparations.matchAny missing minor: no GPU driver warnlist matching
76 LevelEventHandler.playJukeboxSong port crates/horizon-client/src/game/jukebox.rs::Game::start_song song starts and the now-playing overlay is shown
77 LevelEventHandler.stopJukeboxSong port crates/horizon-client/src/game/jukebox.rs::Game::stop_song song sound stops for that jukebox
78 LevelRenderer.<init> port crates/horizon-client/src/gfx.rs::Renderer::new targets, pipelines and buffers built once
79 LevelRenderer.submitFeatures port crates/horizon-client/src/gfx.rs::Renderer::draw_frame entities, block entities, crumbling, particles, outline and gizmos are submitted and drawn in the frame
80 LevelRenderer.repositionCamera port crates/horizon-client/src/gfx/resident.rs::camera_column camera section column that the section grid is centred on; gap: minor: world border invalidation is not part of it
81 LevelRenderer.addMainPass port crates/horizon-client/src/gfx.rs::Renderer::draw_frame gap: minor: the Improved transparency targets (depth bounds, transmittance, accumulate) are not created
82 LevelRenderer.executeAlwaysOnTop port crates/horizon-client/src/game.rs::Game::render always-on-top debug lines and crosshair drawn over the world
83 LevelRenderer.executeSolid port crates/horizon-client/src/gfx.rs::Renderer::draw_sections solid section draws in arena page order
84 LevelRenderer.prepareTranslucents port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort translucent quads sorted from the camera each frame
85 LevelRenderer.executeOit missing player: with Improved transparency on, translucent blocks and water blend order-independently; Horizon has no OIT pass and the option does nothing
86 LevelRenderer.executeDepthBoundsCull missing player: part of Improved transparency's pass; no depth-bounds cull exists in Horizon
87 LevelRenderer.executeOitWaterMask missing player: part of Improved transparency; no water mask pass exists in Horizon
88 LevelRenderer.extractSectionDrawGroups port crates/horizon-client/src/gfx.rs::Renderer::draw_frame section draws grouped per layer and arena page from the visible sections
89 LevelRenderer.prepareChunkRenders port crates/horizon-client/src/gfx.rs::Renderer::draw_frame per-layer draw list built for the frame, reversed for translucent layers
90 LevelRenderer.performTransientBlockRemovals missing minor: removes transient blocks when their section recompiles; Horizon has no transient blocks
91 LevelRenderer.prepareChunkRendersIndirect port crates/horizon-client/src/gfx.rs::Renderer::draw_frame indirect draw arguments written and multi-draw issued
92 LevelRenderer.compileSections port crates/horizon-client/src/streaming.rs::Streaming::update section meshing jobs queued for dirty sections nearest the camera
93 LevelRenderer.submitEntities port crates/horizon-client/src/gfx.rs::Renderer::draw_frame entity models drawn with their batches
94 LevelRenderer.submitBlockEntities port crates/horizon-client/src/gfx.rs::Renderer::block_entities block entity list submitted for drawing
95 LevelRenderer.submitBlockDestroyAnimation port crates/horizon-client/src/gfx.rs::Renderer::draw_frame crumbling overlay drawn on the block being broken
96 LevelRenderer.submitTransientBlocks missing player: a block the server sends as temporary (ClientboundAddTransientBlockPacket) does not appear; the packet is not handled
97 LevelRenderer.submitHitOutline port crates/horizon-client/src/game.rs::Game::outline_boxes outline of the block under the crosshair
98 LevelRenderer.close skip:other GPU resource teardown
99 LevelRenderer.invalidateCompiledGeometry port crates/horizon-client/src/gfx.rs::Renderer::clear_sections all section meshes dropped and rebuilt when settings are applied
100 LevelRenderer.scheduleTranslucentSectionResort port crates/horizon-client/src/gfx/translucency.rs::SortState::update resort scheduled when the camera point of view changes
101 LevelRenderer.scheduleResort port crates/horizon-client/src/gfx/translucency.rs::SortState::update per-section resort gated by point-of-view change and translucent geometry
102 LevelRenderer.resetLevelRenderData port crates/horizon-client/src/gfx.rs::Renderer::clear_sections section data released when a level is left
103 LevelRenderer.hasRenderedAllSections missing minor: only the world icon screenshot asks this, and that screenshot is missing
104 LevelRenderer.isSectionCompiledAndVisible port crates/horizon-client/src/gfx/resident.rs::Resident::contains gap: minor: no section fade-in, so the 0.3 visibility threshold is not checked
105 LevelRenderer.finalizeGizmoCollection port crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos debug gizmos collected for the frame
106 LevelTargetBundle.replace skip:other render-target bundle for post chains; Horizon has no frame graph
107 LevelTargetBundle.get skip:other render-target bundle for post chains; Horizon has no frame graph
108 Lightmap.render port crates/horizon-client/src/gfx.rs::Renderer::update_lightmap lightmap pass from sky, block, darkness, gamma, night vision, flicker and boss darkening
109 LightmapRenderStateExtractor.calculateDarknessScale port crates/horizon-client/src/game/sculk.rs::Game::darkness_lighting pulsing darkness scale from the darkness blend and the option
110 LightmapRenderStateExtractor.extract port crates/horizon-client/src/game.rs::Game::render lightmap inputs gathered into the frame; the end flash is added to sky_light_factor in end.rs::end_flash_sky
111 MapRenderer.extractRenderState port crates/horizon-client/src/game/maps.rs::Game::map_vertices map texture and decorations gathered for drawing
112 MapRenderer.extractDecorationRenderState port crates/horizon-client/src/game/maps.rs::Game::map_vertices decoration sprite, position and rotation drawn per map
113 MappableRingBuffer.currentBuffer skip:other GPU ring buffer bookkeeping
114 MappableRingBuffer.rotate skip:other GPU ring buffer bookkeeping
115 MappableRingBuffer.close skip:other GPU buffer release
116 MultiblockChestResources.select inline crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_one single, left and right chest sprite chosen by ChestPart
117 MultiblockChestResources.map skip:java record mapping of the three sprites
118 Octree.isClose missing unsure: vanilla flags sections next to the camera so the occlusion walk keeps them; not traced in Horizon's occlusion path
119 Octree.AxisSorting.getAxisSorting skip:java traversal-order helper; Resident::visible sorts visible sections by distance
120 Octree.Branch.<init> skip:other octree node; Horizon keeps sections in a resident grid instead
121 Octree.Branch.add skip:other octree insert; Horizon keeps sections in a resident grid instead
122 Octree.Branch.getNodeIndex skip:other octree child index; Horizon keeps sections in a resident grid instead
123 Octree.Branch.createChildBoundingBox skip:other octree child bounds; Horizon keeps sections in a resident grid instead
124 Octree.Branch.visitNodes port crates/horizon-client/src/gfx/resident.rs::Resident::visible frustum and distance visit of sections, nearest first
125 Octree.Branch.getAABB skip:java no callers in vanilla 26.3
126 Octree.Leaf.visitNodes port crates/horizon-client/src/gfx/resident.rs::Resident::visible leaf sections visited in the same frustum and distance walk
127 OrderedSubmitNodeCollector.submitModel skip:other submit queue of vanilla's render thread; Horizon draws each model in place
128 OrderedSubmitNodeCollector.submitCrumblingOverlay port crates/horizon-client/src/gfx.rs::Renderer::draw_frame crumbling overlay drawn on the block being broken
129 OrderedSubmitNodeCollector.submitModelPart skip:other submit queue of vanilla's render thread; Horizon draws each model part in place
130 Panorama.extractRenderState port crates/horizon-client/src/gfx/panorama.rs::Rotation::update spin accumulated from the panorama speed option; overlay blit is drawn by the title screen
131 PlayerSkinRenderCache.createLookup port crates/horizon-client/src/skins.rs::lookup skin texture chosen from the profile, falling back to the default skin
132 PlayerSkinRenderCache.RenderInfo.renderType port crates/horizon-client/src/game/item_draw.rs::Host::player_skin skin texture path a head is drawn with; no separate render type in Horizon
133 PlayerSkinRenderCache.RenderInfo.textureView skip:other GPU texture view cache; Horizon binds skin textures by atlas name
134 PlayerSkinRenderCache.RenderInfo.glyphRenderTypes skip:other font render types for name tags; Horizon's text uses its own glyph pipeline
135 PlayerSkinRenderCache.RenderInfo.equals skip:java value equality for a cache key
136 PlayerSkinRenderCache.RenderInfo.hashCode skip:java hash for a cache key
137 PostChain.load missing minor: no data-driven post chain loader; only the blur and entity outline chains exist, hard-coded
138 PostChain.getReferencedExternalTargets skip:other config validation for data-driven post chains
139 PostChain.createPass missing minor: no data-driven post pass creation; the outline and blur passes are fixed
140 PostChain.addToFrame port crates/horizon-client/src/gfx/entity_outline.rs::EntityOutline::draw gap: minor: runs the entity outline chain only; other chains are not built
141 PostChain.process port crates/horizon-client/src/menu_blur.rs::MenuBlur::apply gap: minor: runs the menu blur only; other chains are not run
142 PostChain.getOrCreatePersistentTarget skip:other GPU persistent target cache
143 PostChain.close skip:other GPU resource teardown
144 PostChain.TargetBundle.getOrThrow skip:other frame-graph target lookup; Horizon has no frame graph
145 PostChainConfig.Pass.referencedTargets skip:data config accessor for post chain JSON
146 PostPass.<init> skip:other GPU pipeline creation for a post pass
147 PostPass.addToFrame port crates/horizon-client/src/gfx/entity_outline.rs::EntityOutline::draw gap: minor: the pass runs inside the entity outline draw only
148 PostPass.close skip:other GPU resource teardown
149 PostPass.TargetInput.getHandle skip:other frame-graph input handle
150 PostPass.TargetInput.texture skip:other frame-graph input texture view
+150
View File
@@ -0,0 +1,150 @@
Projection.setupPerspective inline crates/horizon-client/src/camera.rs::perspective gap: minor: the dirty-flag cache and the stored fov/near/far are not kept; the matrix is built from the arguments per call
Projection.setupOrtho skip:ui GUI draws in pixels through Horizon's own HUD pipeline; no ortho projection state of its own
Projection.getMatrixVersion skip:java matrix version counter for the dirty-check cache
ProjectionMatrixBuffer.getBuffer skip:other GPU buffer handle getter; Horizon owns its uniform buffers in gfx.rs
ProjectionMatrixBuffer.writeBuffer port crates/horizon-client/src/gfx/upload.rs::Uploads::buffer gap: minor: the caller decides which uniform receives the projection
Rect2i.intersect skip:ui GUI clip rectangle math; Horizon clips each draw in hud.rs (clip_since), no rectangle type
Rect2i.contains skip:ui GUI hit test on a rectangle; Horizon's widgets hit-test in their own UI code
RenderPipelines.register skip:data pipeline registry; Horizon creates its pipelines in gfx.rs
RunningTrimmedMean.registerValueAndGetMean skip:debug frame-time smoothing helper; no vanilla caller in this source tree
ScreenEffectRenderer.submit port crates/horizon-client/src/screen_effects.rs::ScreenEffects::build gap: minor: the item activation is not built here (see renderItemActivationAnimation)
ScreenEffectRenderer.renderItemActivationAnimation missing player: when a totem of undying saves the player, the totem does not pop up in front of the screen; Horizon only plays the totem particles and sound (game/totem.rs totem_event)
ScreenEffectRenderer.submitWater inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build underwater overlay branch (misc/underwater)
ScreenEffectRenderer.submitFire inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build first-person fire overlay branch (block/fire_1, two quads)
ScreenEffectRenderer.buildFireQuad inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build the two fire quads' corners and offsets
ScreenEffectRenderer.buildSpriteQuad inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build hand_quad closure: sprite rect and uv for overlay quads
ScreenEffectRenderer.buildQuad inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build hand_quad closure: corners, uv and colour of one overlay quad
SectionBufferBuilderPool.allocate skip:java heap-sized pool of section builders; Horizon's mesher uses its own worker threads
SectionOcclusionGraph.waitAndReset port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::clear gap: minor: clear discards a running search instead of waiting for it
SectionOcclusionGraph.expectedChunks missing unsure: Horizon's occlusion graph keeps no list of sections waiting on chunk loads (streaming.rs has its own waiting set)
SectionOcclusionGraph.invalidateIfNeeded port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::update gap: minor: the search is keyed on camera section and radius only; fov and smart-cull changes do not restart it
SectionOcclusionGraph.addSectionsInFrustum port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::contains gap: minor: the frustum test is not here; the caller builds the visible list
SectionOcclusionGraph.schedulePropagationFrom port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::changed queues the changed section; propagation runs in propagate_changes
SectionOcclusionGraph.scheduleFullUpdate port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::start gap: minor: the full search goes to a worker and is collected later (collect), not to a background executor
SectionOcclusionGraph.runPartialUpdate port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::propagate_changes gap: minor: chunk-load waiting is not handled here (see expectedChunks)
SectionOcclusionGraph.initializeQueueForFullUpdate port crates/horizon-client/src/gfx/occlusion.rs::Graph::seed_outside gap: minor: seeds the sections around a camera outside the world; the camera-inside seed is in Graph::search
SectionOcclusionGraph.runUpdates port crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate gap: minor: BFS over face directions; vanilla's distant-section ray check for smart cull is not checked here
SectionOcclusionGraph.getRelativeFrom inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate neighbour lookup inside the BFS
SectionOcclusionGraph.updateEmptySections port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::set gap: minor: empty sections are not kept in a separate set; their visibility arrives through set
SectionOcclusionGraph.updateLoadedChunks missing unsure: no loaded-chunk set for the occlusion graph found in gfx/occlusion.rs
SectionOcclusionGraph.Node.setDirections inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate face direction bits kept per section in directions[]
SectionOcclusionGraph.Node.hasDirection inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate face direction bit test inside the BFS
SectionOcclusionGraph.Node.addSourceDirection inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate entered-face bits kept per section in entered[]
SectionOcclusionGraph.Node.hasSourceDirection inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate entered-face bit test inside the BFS
SectionOcclusionGraph.Node.equals skip:java node equality for vanilla's hash sets; Horizon indexes sections by position
SectionOcclusionGraph.SectionToNodeMap.get port crates/horizon-client/src/gfx/occlusion.rs::Graph::index gap: minor: a per-section array index instead of a map
ShaderDefines.withOverrides skip:other merges GLSL #define sets; Horizon's WGSL uses override constants
ShaderDefines.asSourceDirectives skip:other emits GLSL #define text; Horizon has no GLSL source
ShaderDefines.isEmpty skip:other helper for the define set; see ShaderDefines
ShaderDefines.Builder.define skip:other builder for the define set; see ShaderDefines
ShaderManager.reload skip:other shader resource reload; Horizon builds its pipelines in gfx.rs
ShaderManager.compilePipelines skip:other pipeline compile plumbing; Horizon compiles wgpu pipelines in gfx.rs
ShaderManager.loadConfigs skip:other reads GLSL shader resources; Horizon's shader packs are read by horizon-shaders
ShaderManager.loadShader skip:other reads one GLSL shader resource; see loadConfigs
ShaderManager.loadInclude skip:other reads one GLSL include; WGSL has no include files
ShaderManager.loadPostChain missing minor: JSON post chains (shaders/post) are not loaded; vanilla's spectator entity effects (creeper, spider, enderman) do not show in Horizon
ShaderManager.listAllIncludes skip:other lists GLSL include files; WGSL has none
ShaderManager.apply skip:other swaps in compiled pipelines; Horizon compiles at startup and on reload
ShaderManager.tryTriggerRecovery skip:other error hook for broken post chains; Horizon has none
ShaderManager.isPostEffectValid missing minor: checks spectator entity post effects, which Horizon does not have (see loadPostChain)
ShaderManager.getPostChain missing minor: spectator entity post effects (creeper, spider, enderman) are not drawn; spectator mode only
ShaderManager.PostChainCache.getOrLoadPostChain missing minor: cache for the spectator entity post effects Horizon lacks
ShaderManager.PostChainCache.loadPostChain missing minor: loads the spectator entity post effects Horizon lacks
ShaderManager.PostChainCache.close skip:other releases post chains; Horizon has none
Sheets.chooseSprite port crates/horizon-client/src/block_entity_render.rs::classify gap: minor: the Christmas chest texture is picked outside this fn (block_entity_render.rs extended_christmas)
SkyRenderer.<init> inline crates/horizon-client/src/gfx/pack_sky.rs::PackSky::new gap: minor: builds the disc, sunset fan, stars and void up front; sun and moon quads are built per frame in game.rs celestial_geometry
SkyRenderer.extractRenderState port crates/horizon-client/src/environment.rs::Environment::sample gap: minor: the End flash state is read in game/end.rs (end_flash_sky)
SkyRenderer.render port crates/horizon-client/src/gfx.rs::Renderer::draw_frame sky pass; the frame's sky and dark-disc flags come from Game::render
SkyRenderer.renderSkyDisc port crates/horizon-client/src/gfx/pack_sky.rs::disc top sky disc fan, sky colour from PackSky::prepare
SkyRenderer.renderDarkDisc inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame dark disc pipeline (fs_dark_disc) drawn when frame.dark_disc is set
SkyRenderer.renderSun port crates/horizon-client/src/game.rs::Game::celestial_geometry sun quad 100 blocks out, half-size 30, faded by rain
SkyRenderer.renderMoon port crates/horizon-client/src/game.rs::Game::celestial_geometry moon quad 100 blocks out, half-size 20, faded by rain
SkyRenderer.applyCelestialBodyTransform inline crates/horizon-client/src/game.rs::Game::celestial_geometry the body frame: rotate Y -90, then X by the body's angle
SkyRenderer.drawCelestialBody inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame draws the body quads with the celestial pipeline
SkyRenderer.renderSunriseAndSunset port crates/horizon-client/src/gfx/pack_sky.rs::PackSky::prepare sunset fan turned to the sun's horizon and its alpha uploaded as sunrise
SkyRenderer.renderEndSky port crates/horizon-client/src/gfx/end_sky.rs::EndSky::draw End sky cube
SkyRenderer.buildSunriseFan port crates/horizon-client/src/gfx/pack_sky.rs::PackSky::new gap: minor: a unit 16-segment fan; the 120 and -40 block shape is not built here
SkyRenderer.buildCelestialQuad port crates/horizon-client/src/game.rs::Game::celestial_geometry sprite quad for the sun and moon (body closure)
SkyRenderer.buildMoonPhases port crates/horizon-client/src/game.rs::Game::celestial_geometry gap: minor: picks the phase from day time (day_time / 24000), not from the environment's moon phase value
SkyRenderer.buildSkyDisc port crates/horizon-client/src/gfx/pack_sky.rs::disc 16-block disc fan (top and bottom)
SkyRenderer.close skip:other releases sky buffers; Rust drops the wgpu buffers
SpriteCoordinateExpander.addVertex skip:other no callers in this vanilla tree; UV wrapper for sprite quads
SpriteCoordinateExpander.setColor skip:other no callers in this vanilla tree; see addVertex
SpriteCoordinateExpander.setUv skip:other no callers in this vanilla tree; see addVertex
SpriteMapper.apply skip:other atlas id plumbing; Horizon looks sprites up by name in its atlas
StagedVertexBuffer.appendDraw skip:other staging draw object; Horizon's arena allocates vertex ranges directly
StagedVertexBuffer.getVertexBuilder skip:other builder for the next mesh; Horizon's mesher writes straight into the section mesh
StagedVertexBuffer.finishLastVertexBuilder skip:other closes the last mesh builder; see getVertexBuilder
StagedVertexBuffer.upload port crates/horizon-client/src/gfx/arena.rs::Arena::alloc gap: minor: vertex ranges come from the arena; the copy is Uploads::buffer
StagedVertexBuffer.uploadDrawsToBuffers inline crates/horizon-client/src/gfx/upload.rs::Uploads::buffer copies the staged vertex data into the buffers
StagedVertexBuffer.decodeSortingPoints port crates/horizon-client/src/gfx/translucency.rs::quad_center gap: minor: the centre of one quad from two corners; reading the vertex buffer itself is not here
StagedVertexBuffer.getExecuteInfo skip:other describes a draw for execution; Horizon issues draws in gfx.rs::Renderer::draw_sections
StagedVertexBuffer.requestIndexCount port crates/horizon-client/src/gfx/arena.rs::Arena::indices gap: minor: the index buffer is sized when created, not requested per draw
StagedVertexBuffer.endFrame port crates/horizon-client/src/gfx/arena.rs::Arena::trim gap: minor: releases unused pages; no fence-based recycling
StagedVertexBuffer.close skip:other releases buffers; Rust drops them
StagedVertexBuffer.Draw.append skip:other accumulates mesh counts for one draw; Horizon counts vertices in the arena
StagedVertexBuffer.ExecuteInfo.indexBuffer skip:other picks the index buffer for a draw; Horizon keeps its own index buffers
StagedVertexBuffer.GpuBufferPool.tryRecycleBuffers port crates/horizon-client/src/gfx/arena.rs::FreeList::give_all gap: minor: freed ranges return to the free list at once; no fence wait
StagedVertexBuffer.GpuBufferPool.acquire port crates/horizon-client/src/gfx/arena.rs::Arena::alloc gap: minor: allocates a range in an existing page instead of a new buffer per size
StagedVertexBuffer.GpuBufferPool.takeBestAvailable port crates/horizon-client/src/gfx/arena.rs::FreeList::take gap: minor: first fit, where vanilla takes the smallest buffer that fits
StagedVertexBuffer.GpuBufferPool.endFrame skip:other fence bookkeeping for GPU reuse; Horizon's arena releases ranges directly
StagedVertexBuffer.GpuBufferPool.close skip:other releases buffers; Rust drops them
StagedVertexBuffer.GpuBufferPool.PendingRecycle.tryRecycle skip:other fence wait for GPU reuse; Horizon has no fence here
SubmitNodeCollection.<init> skip:other builds the phase lists (improved transparency or not); Horizon has fixed passes in gfx.rs
SubmitNodeCollection.submitShadow port crates/horizon-client/src/game.rs::Game::entity_geometry entity shadow quads (misc/shadow) when the entity_shadows option is on
SubmitNodeCollection.nameTag port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry name tags
SubmitNodeCollection.submitNameTagPart port crates/horizon-client/src/game/names.rs::Game::name_tag_quads adds the text quads of one name tag part
SubmitNodeCollection.canRenderAsSolid inline crates/horizon-client/src/game/names.rs::Game::name_tag_geometry the choice between the opaque and see-through pass
SubmitNodeCollection.submitText port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry world text (text displays)
SubmitNodeCollection.submitTextBackground inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry background quad of a text display
SubmitNodeCollection.submitTextPart inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry the see-through or opaque choice for a text part
SubmitNodeCollection.submitFlame port crates/horizon-client/src/fire_render.rs::flames entity fire flames
SubmitNodeCollection.submitLeash port crates/horizon-client/src/game/leads.rs::Game::leash_geometry lead rope from a leashed mob to its holder
SubmitNodeCollection.submitModel port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry mob models
SubmitNodeCollection.submitCrumblingOverlay port crates/horizon-client/src/game.rs::Game::cracks block break cracks (destroy_stage sprites) over a block
SubmitNodeCollection.submitMovingBlock port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_geometry moving piston blocks
SubmitNodeCollection.submitBlockModel port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_block gap: minor: block models driven by block entities only
SubmitNodeCollection.getOutlineRenderType inline crates/horizon-client/src/gfx.rs::Renderer::draw_outline one outline pass; the render type choice is folded into it
SubmitNodeCollection.submitBreakingBlockModel port crates/horizon-client/src/game.rs::Game::cracks gap: minor: drawn as cracks; the block model itself is not redrawn
SubmitNodeCollection.submitShapeOutline port crates/horizon-client/src/gfx.rs::Renderer::draw_outline block shape outline (selection box)
SubmitNodeCollection.submitItem port crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry dropped item entities
SubmitNodeCollection.submitCustomGeometry port crates/horizon-client/src/mobs/guardian.rs::beam_geometry gap: minor: the guardian beam only; screen overlay quads are built in ScreenEffects::build
SubmitNodeCollection.submitGizmoPrimitives skip:debug debug gizmo overlay
SubmitNodeStorage.setUseImprovedTransparency skip:other storage toggle for the transparency path; Horizon fixes its path in Renderer::new
SubmitNodeStorage.order skip:other per-order submit collection; Horizon draws in fixed passes
SubmitNodeStorage.submitNameTag skip:other submit wrapper; the drawing is in SubmitNodeCollection.nameTag
SubmitNodeStorage.submitText skip:other submit wrapper; see SubmitNodeCollection.submitText
SubmitNodeStorage.submitTextBackground skip:other submit wrapper; see SubmitNodeCollection.submitTextBackground
SubmitNodeStorage.submitModel skip:other submit wrapper; see SubmitNodeCollection.submitModel
SubmitNodeStorage.submitCrumblingOverlay skip:other submit wrapper; see SubmitNodeCollection.submitCrumblingOverlay
SubmitNodeStorage.submitBlockModel skip:other submit wrapper; see SubmitNodeCollection.submitBlockModel
SubmitNodeStorage.submitShapeOutline skip:other submit wrapper; see SubmitNodeCollection.submitShapeOutline
SubmitNodeStorage.submitItem skip:other submit wrapper; see SubmitNodeCollection.submitItem
SubmitNodeStorage.drainPhases inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame the pass order that draws each phase
ViewArea.releaseAllBuffers port crates/horizon-client/src/gfx.rs::Renderer::clear_sections drops every section's buffers
ViewArea.repositionCamera inline crates/horizon-client/src/gfx/occlusion.rs::Occlusion::update gap: minor: the occlusion graph restarts on a camera section change; sections are keyed by absolute position, nothing is re-centred
WeatherEffectRenderer.renderWeather inline crates/horizon-client/src/gfx/weather.rs::Weather::draw draws the rain and snow column ranges
WeatherEffectRenderer.uploadVertexBuffer port crates/horizon-client/src/gfx/weather.rs::Weather::prepare gap: minor: the buffer grows to the next power of two
WeatherEffectRenderer.prepare port crates/horizon-client/src/weather.rs::column_quad gap: minor: the column list comes from rain_column and snow_column; this fn builds the quads
WeatherEffectRenderer.render port crates/horizon-client/src/gfx/weather.rs::Weather::draw draws the rain and snow columns
WeatherEffectRenderer.createSnowColumnInstance port crates/horizon-client/src/weather.rs::snow_column snow drift and brightened light
WeatherEffectRenderer.prepareInstances port crates/horizon-client/src/weather.rs::column_quad gap: minor: one column per call; the loop over columns is in the caller
WorldBorderRenderer.renderOit inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame border wall draw when frame.border is set
WorldBorderRenderer.prepareRenderPass inline crates/horizon-client/src/border_render.rs::BorderRenderer::transforms the uniforms (colour, offset, texture scroll) for the wall
WorldBorderRenderer.shouldRebuildWorldBorderBuffer port crates/horizon-client/src/border_render.rs::BorderRenderer::prepare rebuilds when the border moved or was invalidated
FluidRenderer.getHeight inline crates/horizon-client/src/mesher/fluid.rs::tesselate corner heights from own_height and the neighbour average
ChunkSectionLayer.byTransparency inline crates/horizon-client/src/mesher.rs::Mesher::face a face goes to the translucent list when it is translucent
ChunkSectionsToRender.renderGroup port crates/horizon-client/src/gfx.rs::Renderer::draw_sections gap: minor: draws the given page runs; the terrain uniforms are bound by the caller
ChunkSectionsToRender.renderOit port crates/horizon-client/src/gfx.rs::Renderer::draw_sections gap: minor: the OIT pass set-up is not in this fn
ChunkSectionsToRender.renderLayers inline crates/horizon-client/src/gfx.rs::Renderer::draw_sections per-layer loop over the page runs
ChunkSectionsToRender.DrawIndirect.render port crates/horizon-client/src/gfx.rs::Renderer::draw_sections multi-draw indirect branch
ChunkSectionsToRender.DrawSeparate.render port crates/horizon-client/src/gfx.rs::Renderer::draw_sections per-draw branch without multi-draw
RenderRegionCache.createRegion inline crates/horizon-client/src/mesher.rs::borrow gap: minor: borrows the 3x3 chunk columns around the section; nothing is copied
RenderRegionCache.getSectionDataCopy skip:java per-thread copy cache; Horizon borrows the chunks
RenderSectionRegion.getBlockState inline crates/horizon-client/src/mesher.rs::Mesher::mesh block reads of the mesh loop
RenderSectionRegion.getFluidState port crates/horizon-client/src/mesher/fluid.rs::FlowView::fluid fluid read used by the fluid mesher
RenderSectionRegion.getBlockEntity skip:other block entities are drawn from the world's list, not from the section region
RenderSectionRegion.getSection skip:java section copy objects; Horizon borrows chunks
RenderSectionRegion.index inline crates/horizon-client/src/mesher.rs::Mesher::mesh gap: minor: Horizon indexes 3x3 chunk columns, the section is picked by sy
SectionCompiler.compile port crates/horizon-client/src/mesher.rs::Mesher::mesh gap: minor: block-entity tiles are not built here; they are drawn by block_entity_render
SectionCompiler.getOrBeginLayer inline crates/horizon-client/src/mesher.rs::Mesher::mesh per-layer builders created on first use
1 Projection.setupPerspective inline crates/horizon-client/src/camera.rs::perspective gap: minor: the dirty-flag cache and the stored fov/near/far are not kept; the matrix is built from the arguments per call
2 Projection.setupOrtho skip:ui GUI draws in pixels through Horizon's own HUD pipeline; no ortho projection state of its own
3 Projection.getMatrixVersion skip:java matrix version counter for the dirty-check cache
4 ProjectionMatrixBuffer.getBuffer skip:other GPU buffer handle getter; Horizon owns its uniform buffers in gfx.rs
5 ProjectionMatrixBuffer.writeBuffer port crates/horizon-client/src/gfx/upload.rs::Uploads::buffer gap: minor: the caller decides which uniform receives the projection
6 Rect2i.intersect skip:ui GUI clip rectangle math; Horizon clips each draw in hud.rs (clip_since), no rectangle type
7 Rect2i.contains skip:ui GUI hit test on a rectangle; Horizon's widgets hit-test in their own UI code
8 RenderPipelines.register skip:data pipeline registry; Horizon creates its pipelines in gfx.rs
9 RunningTrimmedMean.registerValueAndGetMean skip:debug frame-time smoothing helper; no vanilla caller in this source tree
10 ScreenEffectRenderer.submit port crates/horizon-client/src/screen_effects.rs::ScreenEffects::build gap: minor: the item activation is not built here (see renderItemActivationAnimation)
11 ScreenEffectRenderer.renderItemActivationAnimation missing player: when a totem of undying saves the player, the totem does not pop up in front of the screen; Horizon only plays the totem particles and sound (game/totem.rs totem_event)
12 ScreenEffectRenderer.submitWater inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build underwater overlay branch (misc/underwater)
13 ScreenEffectRenderer.submitFire inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build first-person fire overlay branch (block/fire_1, two quads)
14 ScreenEffectRenderer.buildFireQuad inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build the two fire quads' corners and offsets
15 ScreenEffectRenderer.buildSpriteQuad inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build hand_quad closure: sprite rect and uv for overlay quads
16 ScreenEffectRenderer.buildQuad inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::build hand_quad closure: corners, uv and colour of one overlay quad
17 SectionBufferBuilderPool.allocate skip:java heap-sized pool of section builders; Horizon's mesher uses its own worker threads
18 SectionOcclusionGraph.waitAndReset port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::clear gap: minor: clear discards a running search instead of waiting for it
19 SectionOcclusionGraph.expectedChunks missing unsure: Horizon's occlusion graph keeps no list of sections waiting on chunk loads (streaming.rs has its own waiting set)
20 SectionOcclusionGraph.invalidateIfNeeded port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::update gap: minor: the search is keyed on camera section and radius only; fov and smart-cull changes do not restart it
21 SectionOcclusionGraph.addSectionsInFrustum port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::contains gap: minor: the frustum test is not here; the caller builds the visible list
22 SectionOcclusionGraph.schedulePropagationFrom port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::changed queues the changed section; propagation runs in propagate_changes
23 SectionOcclusionGraph.scheduleFullUpdate port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::start gap: minor: the full search goes to a worker and is collected later (collect), not to a background executor
24 SectionOcclusionGraph.runPartialUpdate port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::propagate_changes gap: minor: chunk-load waiting is not handled here (see expectedChunks)
25 SectionOcclusionGraph.initializeQueueForFullUpdate port crates/horizon-client/src/gfx/occlusion.rs::Graph::seed_outside gap: minor: seeds the sections around a camera outside the world; the camera-inside seed is in Graph::search
26 SectionOcclusionGraph.runUpdates port crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate gap: minor: BFS over face directions; vanilla's distant-section ray check for smart cull is not checked here
27 SectionOcclusionGraph.getRelativeFrom inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate neighbour lookup inside the BFS
28 SectionOcclusionGraph.updateEmptySections port crates/horizon-client/src/gfx/occlusion.rs::Occlusion::set gap: minor: empty sections are not kept in a separate set; their visibility arrives through set
29 SectionOcclusionGraph.updateLoadedChunks missing unsure: no loaded-chunk set for the occlusion graph found in gfx/occlusion.rs
30 SectionOcclusionGraph.Node.setDirections inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate face direction bits kept per section in directions[]
31 SectionOcclusionGraph.Node.hasDirection inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate face direction bit test inside the BFS
32 SectionOcclusionGraph.Node.addSourceDirection inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate entered-face bits kept per section in entered[]
33 SectionOcclusionGraph.Node.hasSourceDirection inline crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate entered-face bit test inside the BFS
34 SectionOcclusionGraph.Node.equals skip:java node equality for vanilla's hash sets; Horizon indexes sections by position
35 SectionOcclusionGraph.SectionToNodeMap.get port crates/horizon-client/src/gfx/occlusion.rs::Graph::index gap: minor: a per-section array index instead of a map
36 ShaderDefines.withOverrides skip:other merges GLSL #define sets; Horizon's WGSL uses override constants
37 ShaderDefines.asSourceDirectives skip:other emits GLSL #define text; Horizon has no GLSL source
38 ShaderDefines.isEmpty skip:other helper for the define set; see ShaderDefines
39 ShaderDefines.Builder.define skip:other builder for the define set; see ShaderDefines
40 ShaderManager.reload skip:other shader resource reload; Horizon builds its pipelines in gfx.rs
41 ShaderManager.compilePipelines skip:other pipeline compile plumbing; Horizon compiles wgpu pipelines in gfx.rs
42 ShaderManager.loadConfigs skip:other reads GLSL shader resources; Horizon's shader packs are read by horizon-shaders
43 ShaderManager.loadShader skip:other reads one GLSL shader resource; see loadConfigs
44 ShaderManager.loadInclude skip:other reads one GLSL include; WGSL has no include files
45 ShaderManager.loadPostChain missing minor: JSON post chains (shaders/post) are not loaded; vanilla's spectator entity effects (creeper, spider, enderman) do not show in Horizon
46 ShaderManager.listAllIncludes skip:other lists GLSL include files; WGSL has none
47 ShaderManager.apply skip:other swaps in compiled pipelines; Horizon compiles at startup and on reload
48 ShaderManager.tryTriggerRecovery skip:other error hook for broken post chains; Horizon has none
49 ShaderManager.isPostEffectValid missing minor: checks spectator entity post effects, which Horizon does not have (see loadPostChain)
50 ShaderManager.getPostChain missing minor: spectator entity post effects (creeper, spider, enderman) are not drawn; spectator mode only
51 ShaderManager.PostChainCache.getOrLoadPostChain missing minor: cache for the spectator entity post effects Horizon lacks
52 ShaderManager.PostChainCache.loadPostChain missing minor: loads the spectator entity post effects Horizon lacks
53 ShaderManager.PostChainCache.close skip:other releases post chains; Horizon has none
54 Sheets.chooseSprite port crates/horizon-client/src/block_entity_render.rs::classify gap: minor: the Christmas chest texture is picked outside this fn (block_entity_render.rs extended_christmas)
55 SkyRenderer.<init> inline crates/horizon-client/src/gfx/pack_sky.rs::PackSky::new gap: minor: builds the disc, sunset fan, stars and void up front; sun and moon quads are built per frame in game.rs celestial_geometry
56 SkyRenderer.extractRenderState port crates/horizon-client/src/environment.rs::Environment::sample gap: minor: the End flash state is read in game/end.rs (end_flash_sky)
57 SkyRenderer.render port crates/horizon-client/src/gfx.rs::Renderer::draw_frame sky pass; the frame's sky and dark-disc flags come from Game::render
58 SkyRenderer.renderSkyDisc port crates/horizon-client/src/gfx/pack_sky.rs::disc top sky disc fan, sky colour from PackSky::prepare
59 SkyRenderer.renderDarkDisc inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame dark disc pipeline (fs_dark_disc) drawn when frame.dark_disc is set
60 SkyRenderer.renderSun port crates/horizon-client/src/game.rs::Game::celestial_geometry sun quad 100 blocks out, half-size 30, faded by rain
61 SkyRenderer.renderMoon port crates/horizon-client/src/game.rs::Game::celestial_geometry moon quad 100 blocks out, half-size 20, faded by rain
62 SkyRenderer.applyCelestialBodyTransform inline crates/horizon-client/src/game.rs::Game::celestial_geometry the body frame: rotate Y -90, then X by the body's angle
63 SkyRenderer.drawCelestialBody inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame draws the body quads with the celestial pipeline
64 SkyRenderer.renderSunriseAndSunset port crates/horizon-client/src/gfx/pack_sky.rs::PackSky::prepare sunset fan turned to the sun's horizon and its alpha uploaded as sunrise
65 SkyRenderer.renderEndSky port crates/horizon-client/src/gfx/end_sky.rs::EndSky::draw End sky cube
66 SkyRenderer.buildSunriseFan port crates/horizon-client/src/gfx/pack_sky.rs::PackSky::new gap: minor: a unit 16-segment fan; the 120 and -40 block shape is not built here
67 SkyRenderer.buildCelestialQuad port crates/horizon-client/src/game.rs::Game::celestial_geometry sprite quad for the sun and moon (body closure)
68 SkyRenderer.buildMoonPhases port crates/horizon-client/src/game.rs::Game::celestial_geometry gap: minor: picks the phase from day time (day_time / 24000), not from the environment's moon phase value
69 SkyRenderer.buildSkyDisc port crates/horizon-client/src/gfx/pack_sky.rs::disc 16-block disc fan (top and bottom)
70 SkyRenderer.close skip:other releases sky buffers; Rust drops the wgpu buffers
71 SpriteCoordinateExpander.addVertex skip:other no callers in this vanilla tree; UV wrapper for sprite quads
72 SpriteCoordinateExpander.setColor skip:other no callers in this vanilla tree; see addVertex
73 SpriteCoordinateExpander.setUv skip:other no callers in this vanilla tree; see addVertex
74 SpriteMapper.apply skip:other atlas id plumbing; Horizon looks sprites up by name in its atlas
75 StagedVertexBuffer.appendDraw skip:other staging draw object; Horizon's arena allocates vertex ranges directly
76 StagedVertexBuffer.getVertexBuilder skip:other builder for the next mesh; Horizon's mesher writes straight into the section mesh
77 StagedVertexBuffer.finishLastVertexBuilder skip:other closes the last mesh builder; see getVertexBuilder
78 StagedVertexBuffer.upload port crates/horizon-client/src/gfx/arena.rs::Arena::alloc gap: minor: vertex ranges come from the arena; the copy is Uploads::buffer
79 StagedVertexBuffer.uploadDrawsToBuffers inline crates/horizon-client/src/gfx/upload.rs::Uploads::buffer copies the staged vertex data into the buffers
80 StagedVertexBuffer.decodeSortingPoints port crates/horizon-client/src/gfx/translucency.rs::quad_center gap: minor: the centre of one quad from two corners; reading the vertex buffer itself is not here
81 StagedVertexBuffer.getExecuteInfo skip:other describes a draw for execution; Horizon issues draws in gfx.rs::Renderer::draw_sections
82 StagedVertexBuffer.requestIndexCount port crates/horizon-client/src/gfx/arena.rs::Arena::indices gap: minor: the index buffer is sized when created, not requested per draw
83 StagedVertexBuffer.endFrame port crates/horizon-client/src/gfx/arena.rs::Arena::trim gap: minor: releases unused pages; no fence-based recycling
84 StagedVertexBuffer.close skip:other releases buffers; Rust drops them
85 StagedVertexBuffer.Draw.append skip:other accumulates mesh counts for one draw; Horizon counts vertices in the arena
86 StagedVertexBuffer.ExecuteInfo.indexBuffer skip:other picks the index buffer for a draw; Horizon keeps its own index buffers
87 StagedVertexBuffer.GpuBufferPool.tryRecycleBuffers port crates/horizon-client/src/gfx/arena.rs::FreeList::give_all gap: minor: freed ranges return to the free list at once; no fence wait
88 StagedVertexBuffer.GpuBufferPool.acquire port crates/horizon-client/src/gfx/arena.rs::Arena::alloc gap: minor: allocates a range in an existing page instead of a new buffer per size
89 StagedVertexBuffer.GpuBufferPool.takeBestAvailable port crates/horizon-client/src/gfx/arena.rs::FreeList::take gap: minor: first fit, where vanilla takes the smallest buffer that fits
90 StagedVertexBuffer.GpuBufferPool.endFrame skip:other fence bookkeeping for GPU reuse; Horizon's arena releases ranges directly
91 StagedVertexBuffer.GpuBufferPool.close skip:other releases buffers; Rust drops them
92 StagedVertexBuffer.GpuBufferPool.PendingRecycle.tryRecycle skip:other fence wait for GPU reuse; Horizon has no fence here
93 SubmitNodeCollection.<init> skip:other builds the phase lists (improved transparency or not); Horizon has fixed passes in gfx.rs
94 SubmitNodeCollection.submitShadow port crates/horizon-client/src/game.rs::Game::entity_geometry entity shadow quads (misc/shadow) when the entity_shadows option is on
95 SubmitNodeCollection.nameTag port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry name tags
96 SubmitNodeCollection.submitNameTagPart port crates/horizon-client/src/game/names.rs::Game::name_tag_quads adds the text quads of one name tag part
97 SubmitNodeCollection.canRenderAsSolid inline crates/horizon-client/src/game/names.rs::Game::name_tag_geometry the choice between the opaque and see-through pass
98 SubmitNodeCollection.submitText port crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry world text (text displays)
99 SubmitNodeCollection.submitTextBackground inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry background quad of a text display
100 SubmitNodeCollection.submitTextPart inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry the see-through or opaque choice for a text part
101 SubmitNodeCollection.submitFlame port crates/horizon-client/src/fire_render.rs::flames entity fire flames
102 SubmitNodeCollection.submitLeash port crates/horizon-client/src/game/leads.rs::Game::leash_geometry lead rope from a leashed mob to its holder
103 SubmitNodeCollection.submitModel port crates/horizon-client/src/game/creatures.rs::Game::mob_geometry mob models
104 SubmitNodeCollection.submitCrumblingOverlay port crates/horizon-client/src/game.rs::Game::cracks block break cracks (destroy_stage sprites) over a block
105 SubmitNodeCollection.submitMovingBlock port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_geometry moving piston blocks
106 SubmitNodeCollection.submitBlockModel port crates/horizon-client/src/block_entity_render.rs::BlockEntityRenderer::render_block gap: minor: block models driven by block entities only
107 SubmitNodeCollection.getOutlineRenderType inline crates/horizon-client/src/gfx.rs::Renderer::draw_outline one outline pass; the render type choice is folded into it
108 SubmitNodeCollection.submitBreakingBlockModel port crates/horizon-client/src/game.rs::Game::cracks gap: minor: drawn as cracks; the block model itself is not redrawn
109 SubmitNodeCollection.submitShapeOutline port crates/horizon-client/src/gfx.rs::Renderer::draw_outline block shape outline (selection box)
110 SubmitNodeCollection.submitItem port crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry dropped item entities
111 SubmitNodeCollection.submitCustomGeometry port crates/horizon-client/src/mobs/guardian.rs::beam_geometry gap: minor: the guardian beam only; screen overlay quads are built in ScreenEffects::build
112 SubmitNodeCollection.submitGizmoPrimitives skip:debug debug gizmo overlay
113 SubmitNodeStorage.setUseImprovedTransparency skip:other storage toggle for the transparency path; Horizon fixes its path in Renderer::new
114 SubmitNodeStorage.order skip:other per-order submit collection; Horizon draws in fixed passes
115 SubmitNodeStorage.submitNameTag skip:other submit wrapper; the drawing is in SubmitNodeCollection.nameTag
116 SubmitNodeStorage.submitText skip:other submit wrapper; see SubmitNodeCollection.submitText
117 SubmitNodeStorage.submitTextBackground skip:other submit wrapper; see SubmitNodeCollection.submitTextBackground
118 SubmitNodeStorage.submitModel skip:other submit wrapper; see SubmitNodeCollection.submitModel
119 SubmitNodeStorage.submitCrumblingOverlay skip:other submit wrapper; see SubmitNodeCollection.submitCrumblingOverlay
120 SubmitNodeStorage.submitBlockModel skip:other submit wrapper; see SubmitNodeCollection.submitBlockModel
121 SubmitNodeStorage.submitShapeOutline skip:other submit wrapper; see SubmitNodeCollection.submitShapeOutline
122 SubmitNodeStorage.submitItem skip:other submit wrapper; see SubmitNodeCollection.submitItem
123 SubmitNodeStorage.drainPhases inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame the pass order that draws each phase
124 ViewArea.releaseAllBuffers port crates/horizon-client/src/gfx.rs::Renderer::clear_sections drops every section's buffers
125 ViewArea.repositionCamera inline crates/horizon-client/src/gfx/occlusion.rs::Occlusion::update gap: minor: the occlusion graph restarts on a camera section change; sections are keyed by absolute position, nothing is re-centred
126 WeatherEffectRenderer.renderWeather inline crates/horizon-client/src/gfx/weather.rs::Weather::draw draws the rain and snow column ranges
127 WeatherEffectRenderer.uploadVertexBuffer port crates/horizon-client/src/gfx/weather.rs::Weather::prepare gap: minor: the buffer grows to the next power of two
128 WeatherEffectRenderer.prepare port crates/horizon-client/src/weather.rs::column_quad gap: minor: the column list comes from rain_column and snow_column; this fn builds the quads
129 WeatherEffectRenderer.render port crates/horizon-client/src/gfx/weather.rs::Weather::draw draws the rain and snow columns
130 WeatherEffectRenderer.createSnowColumnInstance port crates/horizon-client/src/weather.rs::snow_column snow drift and brightened light
131 WeatherEffectRenderer.prepareInstances port crates/horizon-client/src/weather.rs::column_quad gap: minor: one column per call; the loop over columns is in the caller
132 WorldBorderRenderer.renderOit inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame border wall draw when frame.border is set
133 WorldBorderRenderer.prepareRenderPass inline crates/horizon-client/src/border_render.rs::BorderRenderer::transforms the uniforms (colour, offset, texture scroll) for the wall
134 WorldBorderRenderer.shouldRebuildWorldBorderBuffer port crates/horizon-client/src/border_render.rs::BorderRenderer::prepare rebuilds when the border moved or was invalidated
135 FluidRenderer.getHeight inline crates/horizon-client/src/mesher/fluid.rs::tesselate corner heights from own_height and the neighbour average
136 ChunkSectionLayer.byTransparency inline crates/horizon-client/src/mesher.rs::Mesher::face a face goes to the translucent list when it is translucent
137 ChunkSectionsToRender.renderGroup port crates/horizon-client/src/gfx.rs::Renderer::draw_sections gap: minor: draws the given page runs; the terrain uniforms are bound by the caller
138 ChunkSectionsToRender.renderOit port crates/horizon-client/src/gfx.rs::Renderer::draw_sections gap: minor: the OIT pass set-up is not in this fn
139 ChunkSectionsToRender.renderLayers inline crates/horizon-client/src/gfx.rs::Renderer::draw_sections per-layer loop over the page runs
140 ChunkSectionsToRender.DrawIndirect.render port crates/horizon-client/src/gfx.rs::Renderer::draw_sections multi-draw indirect branch
141 ChunkSectionsToRender.DrawSeparate.render port crates/horizon-client/src/gfx.rs::Renderer::draw_sections per-draw branch without multi-draw
142 RenderRegionCache.createRegion inline crates/horizon-client/src/mesher.rs::borrow gap: minor: borrows the 3x3 chunk columns around the section; nothing is copied
143 RenderRegionCache.getSectionDataCopy skip:java per-thread copy cache; Horizon borrows the chunks
144 RenderSectionRegion.getBlockState inline crates/horizon-client/src/mesher.rs::Mesher::mesh block reads of the mesh loop
145 RenderSectionRegion.getFluidState port crates/horizon-client/src/mesher/fluid.rs::FlowView::fluid fluid read used by the fluid mesher
146 RenderSectionRegion.getBlockEntity skip:other block entities are drawn from the world's list, not from the section region
147 RenderSectionRegion.getSection skip:java section copy objects; Horizon borrows chunks
148 RenderSectionRegion.index inline crates/horizon-client/src/mesher.rs::Mesher::mesh gap: minor: Horizon indexes 3x3 chunk columns, the section is picked by sy
149 SectionCompiler.compile port crates/horizon-client/src/mesher.rs::Mesher::mesh gap: minor: block-entity tiles are not built here; they are drawn by block_entity_render
150 SectionCompiler.getOrBeginLayer inline crates/horizon-client/src/mesher.rs::Mesher::mesh per-layer builders created on first use
+104
View File
@@ -0,0 +1,104 @@
SectionCopy.getBlockState inline crates/horizon-client/src/mesher.rs::Padded::new the copy is Padded's block array; no debug-world barrier or DebugLevelSource blocks
SectionRenderDispatcher.<init> skip:other builds the GPU arena and staging for chunk upload; Horizon creates its arena and uploads in gfx.rs with the renderer
SectionRenderDispatcher.runTask port crates/horizon-client/src/streaming.rs::Streaming::new the worker loop pops the nearest queued job and runs it
SectionRenderDispatcher.getRenderSectionSlice port crates/horizon-client/src/gfx.rs::Renderer::draw_sections the per-layer vertex and index slices of a section are read when drawing
SectionRenderDispatcher.uploadTerrainBuffersToGpu port crates/horizon-client/src/gfx/upload.rs::Uploads::finish closes the frame's staging belt after the terrain copies
SectionRenderDispatcher.schedule port crates/horizon-client/src/streaming.rs::Streaming::submit the mesh job goes into the priority queue by distance
SectionRenderDispatcher.dispose port crates/horizon-client/src/gfx.rs::Renderer::clear_sections frees every section's GPU buffers
SectionRenderDispatcher.getStats skip:debug F3 text: compile queue size and free buffers
SectionRenderDispatcher.RenderSection.getVisibility missing player: newly meshed terrain appears at full strength; vanilla fades each section in over the chunkSectionFadeInTime option, and block entities wait for 0.3
SectionRenderDispatcher.RenderSection.setSectionNode port crates/horizon-client/src/gfx.rs::section_instance the section's render origin; its 16-block bounds are derived from the origin
SectionRenderDispatcher.RenderSection.reset port crates/horizon-client/src/gfx.rs::Renderer::release_section drops the section's mesh and GPU slices
SectionRenderDispatcher.RenderSection.resortTransparency port crates/horizon-client/src/gfx/translucency.rs::SortState::update translucent quads re-sorted for the camera; gap: minor: the new order goes to the next draw, not a newly uploaded index buffer
SectionRenderDispatcher.RenderSection.transparencyResortingScheduled skip:other Horizon sorts during the frame, so there is no pending resort task to report
SectionRenderDispatcher.RenderSection.cancelTasks inline crates/horizon-client/src/streaming.rs::Streaming::update a finished job whose seq no longer matches is dropped on arrival; queued jobs are not removed
SectionRenderDispatcher.RenderSection.createCompileTask port crates/horizon-client/src/streaming.rs::Streaming::submit the mesh job is queued; the recompile flag is not kept
SectionRenderDispatcher.RenderSection.compileSync port crates/horizon-client/src/mesher.rs::Mesher::mesh meshes on the calling thread with no queue
SectionRenderDispatcher.RenderSection.setSectionMesh port crates/horizon-client/src/gfx.rs::Renderer::upload stores the new mesh for the section and hands back the old one
SectionRenderDispatcher.RenderSection.releaseSectionMesh port crates/horizon-client/src/gfx.rs::Renderer::release_mesh frees the old mesh's GPU slices
SectionRenderDispatcher.RenderSection.createVertexSorting port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort sort by squared distance from the camera to each quad centre
SectionRenderDispatcher.RenderSection.checkSectionMesh inline crates/horizon-client/src/gfx.rs::Renderer::upload uploads are synchronous, so there is no wait for every layer to land before publishing
SectionRenderDispatcher.RenderSection.addSectionBuffersToUberBuffer port crates/horizon-client/src/gfx.rs::Renderer::upload_mesh copies a layer's vertex and index bytes into arena pages
SectionRenderDispatcher.RenderSection.CompileTask.doTask port crates/horizon-client/src/mesher.rs::Mesher::mesh meshes the section; the empty result and upload are handled in streaming and Renderer::upload
SectionRenderDispatcher.RenderSection.ResortTransparencyTask.doTask port crates/horizon-client/src/gfx/translucency.rs::SortState::update re-sorts translucent quads when the camera's point of view changes
SectionTaskDynamicQueue.poll port crates/horizon-client/src/streaming.rs::Queued::cmp nearest job first; gap: minor: no recompile quota, new and remesh jobs share one priority
SectionTaskDynamicQueue.clear skip:other Horizon has no queue clear; stale results are dropped by seq in Streaming::update
TranslucencyPointOfView.set inline crates/horizon-client/src/gfx/translucency.rs::SortState::update the point of view: camera block minus section, clamped to -1..1 per axis
TranslucencyPointOfView.isAxisAligned inline crates/horizon-client/src/gfx/translucency.rs::SortState::update the axis-aligned test: a zero component in the point of view
TranslucencyPointOfView.equals inline crates/horizon-client/src/gfx/translucency.rs::SortState::update compares the last point of view with the new one
TranslucencyPointOfView.hashCode skip:java hash for a map key
VisGraph.setOpaque inline crates/horizon-client/src/mesher.rs::visibility opaque cells are marked in the seen map before the flood fill
VisGraph.getIndex inline crates/horizon-client/src/mesher.rs::visibility cell index y<<8 | z<<4 | x in the seen map
VisGraph.floodFill inline crates/horizon-client/src/mesher.rs::visibility flood fill from each open cell; gap: minor: no shortcut for sections with fewer than 256 opaque cells, which vanilla marks fully visible
VisGraph.addEdges inline crates/horizon-client/src/mesher.rs::visibility the faces of the section a cell touches
VisGraph.getNeighborIndexAtFace inline crates/horizon-client/src/mesher.rs::visibility the neighbour index inside the section, -1 at its border
VisibilitySet.add inline crates/horizon-client/src/mesher.rs::visibility sets the bit for each pair of faces an open region touches (bit a*6+b)
VisibilitySet.set inline crates/horizon-client/src/mesher.rs::visibility sets both bits of a face pair
VisibilitySet.visibilityBetween port crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate the faces a section connects are read from its visibility bits when the search moves on
VisibilitySet.toString skip:debug debug text
Frustum.set skip:java copies the frustum; Horizon passes the Frustum value
Frustum.offset missing minor: particles are not culled against a frustum pulled back 3 blocks (ParticleEngine.extract); Horizon has no particle frustum test
Frustum.offsetToFullyIncludeCameraCube port crates/horizon-client/src/gfx/occlusion.rs::Graph::search the occlusion search starts in the camera's own section, so its cube is always included; gap: minor: no frustum offset
Frustum.calculateFrustum port crates/horizon-client/src/gfx.rs::frustum the six planes from projection times view
Frustum.isVisible port crates/horizon-client/src/gfx.rs::Frustum::intersects box against the planes; gap: minor: infinite bounds are not special-cased
Frustum.cubeInFrustum port crates/horizon-client/src/gfx.rs::Frustum::intersects box test on camera-relative bounds
Frustum.pointInFrustum missing minor: only particle culling uses it (QuadParticleGroup), and Horizon has no particle frustum test
Frustum.getFrustumPoints skip:debug the eight frustum corners, for debug drawing only
Frustum.getNearPlaneBounds missing player: the block texture overlay drawn when your eye is inside a block (view-blocking block) is never shown; ScreenEffectRenderer's block_overlay is never set outside tests
BeeDebugRenderer missing minor: F3 bee and hive debug view (hive blacklist, flowers, ghost hives); not drawn
BrainDebugRenderer missing minor: F3 brain debug view (activities, memories, POIs); not drawn
BreezeDebugRenderer missing minor: F3 breeze jump target view; breeze_jump_target is kept in monster_brain.rs but never drawn
ChunkCullingDebugRenderer missing minor: F3 chunk culling frustum view; the occlusion graph has no draw
ChunkDebugRenderer missing minor: F3 chunk info view fed by the integrated server; not drawn
ChunkDebugRenderer.ChunkData missing minor: data for the F3 chunk info view; not built
CollisionBoxRenderer missing minor: F3 block collision box view; not drawn
DebugRenderer.refreshRendererList inline crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos the enabled views; Horizon has only chunk borders (show_chunk_borders) and hitboxes (show_hitboxes), the rest are missing
DebugRenderer.getTargetedEntity skip:debug entity under the crosshair for debug views only
DebugRenderer.mixColor skip:debug colour helper for debug paths
DebugRenderer.shiftHue skip:debug colour helper with no callers
EntityBlockIntersectionDebugRenderer missing minor: F3 entity and block intersection view; not drawn
EntityHitboxDebugRenderer.emitGizmos port crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos the F3+B hitbox loop for mobs, items, paintings, frames, boats, carts, projectiles, the dragon and the player
EntityHitboxDebugRenderer.getServerEntity skip:debug the integrated server's entity for a hitbox; Horizon draws its own client entities
GameEventListenerRenderer missing minor: F3 game event listener view; not drawn
GameTestBlockHighlightRenderer skip:debug game test block markers; Horizon does not run game tests
GoalSelectorDebugRenderer missing minor: F3 mob goal view; not drawn
HeightMapRenderer missing minor: F3 heightmap view; not drawn
LightDebugRenderer missing minor: F3 light level view; not drawn
LightSectionDebugRenderer missing minor: F3 light section view; not drawn
LightSectionDebugRenderer.SectionData missing minor: data for the F3 light section view; not built
NeighborsUpdateRenderer missing minor: F3 neighbour update view; not drawn
NeighborsUpdateRenderer.LastUpdate missing minor: data for the F3 neighbour update view; not kept
OctreeDebugRenderer missing minor: F3 chunk section octree view; not drawn
PathfindingRenderer missing minor: F3 mob path view; not drawn
PoiDebugRenderer missing minor: F3 point of interest view; not drawn
RaidDebugRenderer missing minor: F3 raid centre view; not drawn
RedstoneWireOrientationsRenderer missing minor: F3 redstone wire orientation view; not drawn
SolidFaceRenderer missing minor: F3 solid face view; not drawn
StructureRenderer missing minor: F3 structure bounding box view fed by debug subscriptions; Horizon sends none
SupportBlockRenderer missing minor: F3 support block view; not drawn
VillageSectionsDebugRenderer missing minor: F3 village section view; not drawn
WaterDebugRenderer missing minor: F3 water level view; not drawn
LevelExtractor.extract port crates/horizon-client/src/game.rs::Game::render the frame's extraction and draw; gap: minor: no separate render state, the frame is built and drawn in one fn
LevelExtractor.drainTransientBlockQueue missing player: temporary blocks the server shows (ClientboundAddTransientBlockPacket) never appear; the packet has an id in horizon-protocol but no handler
LevelExtractor.extractVisibleBlockEntities inline crates/horizon-client/src/game.rs::Game::render block entities of the visible sections; gap: minor: no 0.3 visibility gate, see RenderSection.getVisibility
LevelExtractor.extractBlockDestroyAnimation port crates/horizon-client/src/game.rs::Game::destroy_block_progress keeps the crumbling progress per breaker for 400 ticks; gap: minor: no 32-block distance cut here
LevelExtractor.extractGizmos port crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos the frame's debug gizmos
LevelExtractor.extractPlayerState inline crates/horizon-client/src/game.rs::Game::render player and hands read from the game state at draw time; gap: minor: the view-blocking block is missing, see Frustum.getNearPlaneBounds
LevelExtractor.applyFrustum port crates/horizon-client/src/gfx/resident.rs::Resident::visible the frustum decides which sections are visible
LevelExtractor.setLevel inline crates/horizon-client/src/game.rs::Game::all_sections_changed a new level rebuilds every loaded section (allChanged); the null-level branch is not separate
LevelExtractor.blockChanged port crates/horizon-client/src/world.rs::World::set a block edit marks its 3x3x3 neighbourhood; gap: minor: the player-changed flag (update bit 8) is not kept
LevelExtractor.setBlockDirty port crates/horizon-client/src/world.rs::World::set marks the 3x3x3 section neighbourhood of an edited block
LevelExtractor.setBlocksDirty inline crates/horizon-client/src/world.rs::World::set each block of the range goes through the same 3x3x3 marking
LevelExtractor.setSectionDirtyWithNeighbors port crates/horizon-client/src/streaming.rs::Streaming::light_updated the section and its neighbours remesh
LevelExtractor.setSectionRangeDirty inline crates/horizon-client/src/streaming.rs::Streaming::light_updated section range marked in world.dirty_sections
LevelExtractor.setSectionDirty port crates/horizon-client/src/world.rs::DirtySections::insert marks one section for remesh
LevelExtractor.countRenderedSections skip:debug F3 count of sections with renderable layers; Horizon reports Renderer::section_count
LevelExtractor.sectionStatistics skip:debug F3 text
LevelExtractor.entityStatistics skip:debug F3 text
BlockModelFeatureRenderer skip:other feature pass plumbing; Horizon draws block models in its own passes with no feature groups
CustomFeatureRenderer.buildGroup skip:other feature pass plumbing; Horizon has no feature groups
FeatureRenderDispatcher.<init> skip:other feature dispatcher set-up; Horizon has no feature dispatcher
FeatureRenderDispatcher.prepareFrame skip:other feature dispatcher; the frame's draw order is fixed in Renderer::draw_frame
FeatureRenderDispatcher.prepareFrameWithContext skip:other feature dispatcher; the frame's draw order is fixed in Renderer::draw_frame
FeatureRenderDispatcher.renderAllFeatures port crates/horizon-client/src/gfx.rs::Renderer::draw_frame draws the frame's passes; gap: minor: the order is fixed, not taken from a feature list
FeatureRenderDispatcher.PhaseSubmitGrouper skip:other groups feature submissions per phase for vanilla's dispatcher; Horizon submits in fixed passes
1 SectionCopy.getBlockState inline crates/horizon-client/src/mesher.rs::Padded::new the copy is Padded's block array; no debug-world barrier or DebugLevelSource blocks
2 SectionRenderDispatcher.<init> skip:other builds the GPU arena and staging for chunk upload; Horizon creates its arena and uploads in gfx.rs with the renderer
3 SectionRenderDispatcher.runTask port crates/horizon-client/src/streaming.rs::Streaming::new the worker loop pops the nearest queued job and runs it
4 SectionRenderDispatcher.getRenderSectionSlice port crates/horizon-client/src/gfx.rs::Renderer::draw_sections the per-layer vertex and index slices of a section are read when drawing
5 SectionRenderDispatcher.uploadTerrainBuffersToGpu port crates/horizon-client/src/gfx/upload.rs::Uploads::finish closes the frame's staging belt after the terrain copies
6 SectionRenderDispatcher.schedule port crates/horizon-client/src/streaming.rs::Streaming::submit the mesh job goes into the priority queue by distance
7 SectionRenderDispatcher.dispose port crates/horizon-client/src/gfx.rs::Renderer::clear_sections frees every section's GPU buffers
8 SectionRenderDispatcher.getStats skip:debug F3 text: compile queue size and free buffers
9 SectionRenderDispatcher.RenderSection.getVisibility missing player: newly meshed terrain appears at full strength; vanilla fades each section in over the chunkSectionFadeInTime option, and block entities wait for 0.3
10 SectionRenderDispatcher.RenderSection.setSectionNode port crates/horizon-client/src/gfx.rs::section_instance the section's render origin; its 16-block bounds are derived from the origin
11 SectionRenderDispatcher.RenderSection.reset port crates/horizon-client/src/gfx.rs::Renderer::release_section drops the section's mesh and GPU slices
12 SectionRenderDispatcher.RenderSection.resortTransparency port crates/horizon-client/src/gfx/translucency.rs::SortState::update translucent quads re-sorted for the camera; gap: minor: the new order goes to the next draw, not a newly uploaded index buffer
13 SectionRenderDispatcher.RenderSection.transparencyResortingScheduled skip:other Horizon sorts during the frame, so there is no pending resort task to report
14 SectionRenderDispatcher.RenderSection.cancelTasks inline crates/horizon-client/src/streaming.rs::Streaming::update a finished job whose seq no longer matches is dropped on arrival; queued jobs are not removed
15 SectionRenderDispatcher.RenderSection.createCompileTask port crates/horizon-client/src/streaming.rs::Streaming::submit the mesh job is queued; the recompile flag is not kept
16 SectionRenderDispatcher.RenderSection.compileSync port crates/horizon-client/src/mesher.rs::Mesher::mesh meshes on the calling thread with no queue
17 SectionRenderDispatcher.RenderSection.setSectionMesh port crates/horizon-client/src/gfx.rs::Renderer::upload stores the new mesh for the section and hands back the old one
18 SectionRenderDispatcher.RenderSection.releaseSectionMesh port crates/horizon-client/src/gfx.rs::Renderer::release_mesh frees the old mesh's GPU slices
19 SectionRenderDispatcher.RenderSection.createVertexSorting port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort sort by squared distance from the camera to each quad centre
20 SectionRenderDispatcher.RenderSection.checkSectionMesh inline crates/horizon-client/src/gfx.rs::Renderer::upload uploads are synchronous, so there is no wait for every layer to land before publishing
21 SectionRenderDispatcher.RenderSection.addSectionBuffersToUberBuffer port crates/horizon-client/src/gfx.rs::Renderer::upload_mesh copies a layer's vertex and index bytes into arena pages
22 SectionRenderDispatcher.RenderSection.CompileTask.doTask port crates/horizon-client/src/mesher.rs::Mesher::mesh meshes the section; the empty result and upload are handled in streaming and Renderer::upload
23 SectionRenderDispatcher.RenderSection.ResortTransparencyTask.doTask port crates/horizon-client/src/gfx/translucency.rs::SortState::update re-sorts translucent quads when the camera's point of view changes
24 SectionTaskDynamicQueue.poll port crates/horizon-client/src/streaming.rs::Queued::cmp nearest job first; gap: minor: no recompile quota, new and remesh jobs share one priority
25 SectionTaskDynamicQueue.clear skip:other Horizon has no queue clear; stale results are dropped by seq in Streaming::update
26 TranslucencyPointOfView.set inline crates/horizon-client/src/gfx/translucency.rs::SortState::update the point of view: camera block minus section, clamped to -1..1 per axis
27 TranslucencyPointOfView.isAxisAligned inline crates/horizon-client/src/gfx/translucency.rs::SortState::update the axis-aligned test: a zero component in the point of view
28 TranslucencyPointOfView.equals inline crates/horizon-client/src/gfx/translucency.rs::SortState::update compares the last point of view with the new one
29 TranslucencyPointOfView.hashCode skip:java hash for a map key
30 VisGraph.setOpaque inline crates/horizon-client/src/mesher.rs::visibility opaque cells are marked in the seen map before the flood fill
31 VisGraph.getIndex inline crates/horizon-client/src/mesher.rs::visibility cell index y<<8 | z<<4 | x in the seen map
32 VisGraph.floodFill inline crates/horizon-client/src/mesher.rs::visibility flood fill from each open cell; gap: minor: no shortcut for sections with fewer than 256 opaque cells, which vanilla marks fully visible
33 VisGraph.addEdges inline crates/horizon-client/src/mesher.rs::visibility the faces of the section a cell touches
34 VisGraph.getNeighborIndexAtFace inline crates/horizon-client/src/mesher.rs::visibility the neighbour index inside the section, -1 at its border
35 VisibilitySet.add inline crates/horizon-client/src/mesher.rs::visibility sets the bit for each pair of faces an open region touches (bit a*6+b)
36 VisibilitySet.set inline crates/horizon-client/src/mesher.rs::visibility sets both bits of a face pair
37 VisibilitySet.visibilityBetween port crates/horizon-client/src/gfx/occlusion.rs::Graph::propagate the faces a section connects are read from its visibility bits when the search moves on
38 VisibilitySet.toString skip:debug debug text
39 Frustum.set skip:java copies the frustum; Horizon passes the Frustum value
40 Frustum.offset missing minor: particles are not culled against a frustum pulled back 3 blocks (ParticleEngine.extract); Horizon has no particle frustum test
41 Frustum.offsetToFullyIncludeCameraCube port crates/horizon-client/src/gfx/occlusion.rs::Graph::search the occlusion search starts in the camera's own section, so its cube is always included; gap: minor: no frustum offset
42 Frustum.calculateFrustum port crates/horizon-client/src/gfx.rs::frustum the six planes from projection times view
43 Frustum.isVisible port crates/horizon-client/src/gfx.rs::Frustum::intersects box against the planes; gap: minor: infinite bounds are not special-cased
44 Frustum.cubeInFrustum port crates/horizon-client/src/gfx.rs::Frustum::intersects box test on camera-relative bounds
45 Frustum.pointInFrustum missing minor: only particle culling uses it (QuadParticleGroup), and Horizon has no particle frustum test
46 Frustum.getFrustumPoints skip:debug the eight frustum corners, for debug drawing only
47 Frustum.getNearPlaneBounds missing player: the block texture overlay drawn when your eye is inside a block (view-blocking block) is never shown; ScreenEffectRenderer's block_overlay is never set outside tests
48 BeeDebugRenderer missing minor: F3 bee and hive debug view (hive blacklist, flowers, ghost hives); not drawn
49 BrainDebugRenderer missing minor: F3 brain debug view (activities, memories, POIs); not drawn
50 BreezeDebugRenderer missing minor: F3 breeze jump target view; breeze_jump_target is kept in monster_brain.rs but never drawn
51 ChunkCullingDebugRenderer missing minor: F3 chunk culling frustum view; the occlusion graph has no draw
52 ChunkDebugRenderer missing minor: F3 chunk info view fed by the integrated server; not drawn
53 ChunkDebugRenderer.ChunkData missing minor: data for the F3 chunk info view; not built
54 CollisionBoxRenderer missing minor: F3 block collision box view; not drawn
55 DebugRenderer.refreshRendererList inline crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos the enabled views; Horizon has only chunk borders (show_chunk_borders) and hitboxes (show_hitboxes), the rest are missing
56 DebugRenderer.getTargetedEntity skip:debug entity under the crosshair for debug views only
57 DebugRenderer.mixColor skip:debug colour helper for debug paths
58 DebugRenderer.shiftHue skip:debug colour helper with no callers
59 EntityBlockIntersectionDebugRenderer missing minor: F3 entity and block intersection view; not drawn
60 EntityHitboxDebugRenderer.emitGizmos port crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos the F3+B hitbox loop for mobs, items, paintings, frames, boats, carts, projectiles, the dragon and the player
61 EntityHitboxDebugRenderer.getServerEntity skip:debug the integrated server's entity for a hitbox; Horizon draws its own client entities
62 GameEventListenerRenderer missing minor: F3 game event listener view; not drawn
63 GameTestBlockHighlightRenderer skip:debug game test block markers; Horizon does not run game tests
64 GoalSelectorDebugRenderer missing minor: F3 mob goal view; not drawn
65 HeightMapRenderer missing minor: F3 heightmap view; not drawn
66 LightDebugRenderer missing minor: F3 light level view; not drawn
67 LightSectionDebugRenderer missing minor: F3 light section view; not drawn
68 LightSectionDebugRenderer.SectionData missing minor: data for the F3 light section view; not built
69 NeighborsUpdateRenderer missing minor: F3 neighbour update view; not drawn
70 NeighborsUpdateRenderer.LastUpdate missing minor: data for the F3 neighbour update view; not kept
71 OctreeDebugRenderer missing minor: F3 chunk section octree view; not drawn
72 PathfindingRenderer missing minor: F3 mob path view; not drawn
73 PoiDebugRenderer missing minor: F3 point of interest view; not drawn
74 RaidDebugRenderer missing minor: F3 raid centre view; not drawn
75 RedstoneWireOrientationsRenderer missing minor: F3 redstone wire orientation view; not drawn
76 SolidFaceRenderer missing minor: F3 solid face view; not drawn
77 StructureRenderer missing minor: F3 structure bounding box view fed by debug subscriptions; Horizon sends none
78 SupportBlockRenderer missing minor: F3 support block view; not drawn
79 VillageSectionsDebugRenderer missing minor: F3 village section view; not drawn
80 WaterDebugRenderer missing minor: F3 water level view; not drawn
81 LevelExtractor.extract port crates/horizon-client/src/game.rs::Game::render the frame's extraction and draw; gap: minor: no separate render state, the frame is built and drawn in one fn
82 LevelExtractor.drainTransientBlockQueue missing player: temporary blocks the server shows (ClientboundAddTransientBlockPacket) never appear; the packet has an id in horizon-protocol but no handler
83 LevelExtractor.extractVisibleBlockEntities inline crates/horizon-client/src/game.rs::Game::render block entities of the visible sections; gap: minor: no 0.3 visibility gate, see RenderSection.getVisibility
84 LevelExtractor.extractBlockDestroyAnimation port crates/horizon-client/src/game.rs::Game::destroy_block_progress keeps the crumbling progress per breaker for 400 ticks; gap: minor: no 32-block distance cut here
85 LevelExtractor.extractGizmos port crates/horizon-client/src/game/debug_keys.rs::Game::debug_gizmos the frame's debug gizmos
86 LevelExtractor.extractPlayerState inline crates/horizon-client/src/game.rs::Game::render player and hands read from the game state at draw time; gap: minor: the view-blocking block is missing, see Frustum.getNearPlaneBounds
87 LevelExtractor.applyFrustum port crates/horizon-client/src/gfx/resident.rs::Resident::visible the frustum decides which sections are visible
88 LevelExtractor.setLevel inline crates/horizon-client/src/game.rs::Game::all_sections_changed a new level rebuilds every loaded section (allChanged); the null-level branch is not separate
89 LevelExtractor.blockChanged port crates/horizon-client/src/world.rs::World::set a block edit marks its 3x3x3 neighbourhood; gap: minor: the player-changed flag (update bit 8) is not kept
90 LevelExtractor.setBlockDirty port crates/horizon-client/src/world.rs::World::set marks the 3x3x3 section neighbourhood of an edited block
91 LevelExtractor.setBlocksDirty inline crates/horizon-client/src/world.rs::World::set each block of the range goes through the same 3x3x3 marking
92 LevelExtractor.setSectionDirtyWithNeighbors port crates/horizon-client/src/streaming.rs::Streaming::light_updated the section and its neighbours remesh
93 LevelExtractor.setSectionRangeDirty inline crates/horizon-client/src/streaming.rs::Streaming::light_updated section range marked in world.dirty_sections
94 LevelExtractor.setSectionDirty port crates/horizon-client/src/world.rs::DirtySections::insert marks one section for remesh
95 LevelExtractor.countRenderedSections skip:debug F3 count of sections with renderable layers; Horizon reports Renderer::section_count
96 LevelExtractor.sectionStatistics skip:debug F3 text
97 LevelExtractor.entityStatistics skip:debug F3 text
98 BlockModelFeatureRenderer skip:other feature pass plumbing; Horizon draws block models in its own passes with no feature groups
99 CustomFeatureRenderer.buildGroup skip:other feature pass plumbing; Horizon has no feature groups
100 FeatureRenderDispatcher.<init> skip:other feature dispatcher set-up; Horizon has no feature dispatcher
101 FeatureRenderDispatcher.prepareFrame skip:other feature dispatcher; the frame's draw order is fixed in Renderer::draw_frame
102 FeatureRenderDispatcher.prepareFrameWithContext skip:other feature dispatcher; the frame's draw order is fixed in Renderer::draw_frame
103 FeatureRenderDispatcher.renderAllFeatures port crates/horizon-client/src/gfx.rs::Renderer::draw_frame draws the frame's passes; gap: minor: the order is fixed, not taken from a feature list
104 FeatureRenderDispatcher.PhaseSubmitGrouper skip:other groups feature submissions per phase for vanilla's dispatcher; Horizon submits in fixed passes
+118
View File
@@ -0,0 +1,118 @@
FeatureRenderDispatcher.PreparedFrame skip:other render-pass order and draw-group plumbing of vanilla's feature renderer; Horizon orders its own passes
FeatureRenderDispatcher.PreparedGroup skip:other runs one feature group through its renderer; the per-feature draws are mapped by their own renderers
FeatureRendererMap skip:java type-indexed lookup table of feature renderers
FlameFeatureRenderer.buildGroup port crates/horizon-client/src/fire_render.rs::flames loop over burning entities
FlameFeatureRenderer.prepare port crates/horizon-client/src/fire_render.rs::flames two alternating fire sprites stacked up the entity
FlameFeatureRenderer.fireVertex inline crates/horizon-client/src/fire_render.rs::flames vertex push folded into flames
GizmoFeatureRenderer.buildGroup port crates/horizon-client/src/gizmos.rs::camera_relative gap: minor: only lines are drawn; quads, triangle fans, points and texts are not
GizmoFeatureRenderer.buildTexts missing minor: debug gizmo text labels are not drawn; Gizmos has no text kind
GizmoFeatureRenderer.buildTriangleFans missing minor: debug triangle fans are not drawn; Gizmos has no fan kind
GizmoFeatureRenderer.buildQuads missing minor: debug filled quads are not drawn; cuboid gizmos are edges only
GizmoFeatureRenderer.buildPoints missing minor: debug points are not drawn; Gizmos has no point kind
ItemFeatureRenderer.buildGroup port crates/horizon-client/src/item_render.rs::ItemRenderState::submit loop over item submits
ItemFeatureRenderer.prepareSubmit port crates/horizon-client/src/item_render.rs::ItemRenderState::submit layer loop, quads or special model
ItemFeatureRenderer.prepareOutlineSubmit port crates/horizon-client/src/game/glowing.rs::Game::mark_outline gap: minor: outline colour is only applied to dropped items (item_draw.rs dropped_item_geometry); held-item outlines not checked
ItemFeatureRenderer.computeFoilDecalPose missing minor: unsure: the 0.5 GUI and 0.75 first-person foil decal scale is not found; glint scale is per context in item_render.rs Glint
ItemFeatureRenderer.getLayerColorSafe port crates/horizon-client/src/item_render.rs::submit_quads tint index past the tints draws white, both overloads
LeashFeatureRenderer.buildGroup port crates/horizon-client/src/game/leads.rs::Game::leash_geometry loop over leash submits
LeashFeatureRenderer.prepare port crates/horizon-client/src/game/leads.rs::Game::leash_geometry gap: player: rope never sags when slack (vanilla droops the rope); no slack state in the leash render
LeashFeatureRenderer.addVertexPair inline crates/horizon-client/src/game/leads.rs::Game::leash_geometry vertex pair with block and sky light lerp folded into leash_geometry
ModelFeatureRenderer.buildGroup port crates/horizon-client/src/mobs.rs::render_model loop over model submits
ModelFeatureRenderer.prepareModel port crates/horizon-client/src/mobs.rs::render_model gap: minor: setupAnim is done by the mob code, and the sheeted decal and uv wrap are not checked
MovingBlockFeatureRenderer.buildGroup port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_geometry moving piston block and base geometry
MovingBlockFeatureRenderer.putBakedQuad port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_block_vertices quad placed at the moving offset
QuadParticleFeatureRenderer skip:other GPU batching and draw plumbing of particle quads; Horizon's particle pass lives in particles.rs and gfx/pack_entities.rs
RenderTypeFeatureRenderer skip:other GPU render-type batching; Horizon batches its own draws in gfx/entity_batch.rs
RenderTypeFeatureRenderer.Group skip:other GPU render-type batching, as above
ShadowFeatureRenderer.buildGroup port crates/horizon-client/src/shadows.rs::shadow loop over shadow submits
ShadowFeatureRenderer.prepare port crates/horizon-client/src/shadows.rs::shadow shadow quads per piece, clamped by the block below
ShadowFeatureRenderer.shadowVertex inline crates/horizon-client/src/shadows.rs::shadow vertex push folded into shadow
ShapeOutlineFeatureRenderer.buildGroup port crates/horizon-client/src/gfx.rs::outline_vertices block selection outline edges as line vertices
TextFeatureRenderer.buildGroup skip:other dispatch over text and background submits; each kind is covered below or by Horizon's text draw
TextFeatureRenderer.renderText missing minor: unsure: no outlined-text path found (font.rs, hud.rs, names.rs); the outline colour of a text submit is not drawn
TextFeatureRenderer.GlyphRenderer.acceptRenderable skip:other glyph sink for the text pass; Horizon's font pass draws the glyphs
FeatureRenderPhase.Output.acceptFeatureGroup skip:other phase plumbing: hands sorted groups to the renderer pass
SimpleFeatureRenderPhase skip:other submit, sort, shuffle (debug only) and clear of feature submits; Horizon sorts its own draws
SimpleFeatureRenderPhase.FeatureSubmits skip:other batching bookkeeping of feature submits
TranslucentFeatureRenderPhase.submit inline crates/horizon-client/src/gfx/translucency.rs::Sorter::sort collects submits; distances are taken in sort
TranslucentFeatureRenderPhase.sortInto port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort back-to-front by distance, equal distances keep submit order
TranslucentFeatureRenderPhase.sortIndices port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort far to near, stable on ties
TranslucentSubmit.computeDistanceToCameraSq inline crates/horizon-client/src/gfx/translucency.rs::Sorter::sort distance from the quad centre to the camera, computed inside sort
FogRenderer.getBuffer skip:other selects the fog uniform slice; Horizon hands its fog values to its own shader per frame
FogRenderer.updateBuffer skip:other writes the fog uniform buffer; Horizon's frame_fog passes FogData to its own shader
AtmosphericFogEnvironment.getBaseColor port crates/horizon-client/src/fog.rs::setup_fog gap: minor: sky fog end uses constant 512 instead of the SKY_FOG_END_DISTANCE attribute
AtmosphericFogEnvironment.applyWeatherDarken inline crates/horizon-client/src/fog.rs::setup_fog rain and thunder darkening folded into the atmospheric colour
BlindnessFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog blindness distance and sky/cloud ends
BlindnessFogEnvironment.getModifiedDarkness inline crates/horizon-client/src/fog.rs::setup_fog blindness darkness folded into setup_fog
LavaFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog gap: player: spectator (-8 start, half render distance) and fire resistance (0 to 5) are not applied in lava
MobEffectFogEnvironment.isApplicable inline crates/horizon-client/src/game/render_tick.rs::Game::frame_fog effect gate is where frame_fog builds the blindness and darkness inputs
PowderedSnowFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog gap: player: spectator case (-8 start, half render distance) is not applied
WaterFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog gap: minor: water fog start is fixed at -8; vanilla reads the WATER_FOG_START_DISTANCE attribute
DrawableGizmoPrimitives.addPoint missing minor: debug points are not drawn; Gizmos has no point kind
DrawableGizmoPrimitives.addLine port crates/horizon-client/src/gizmos.rs::Gizmos::line
DrawableGizmoPrimitives.addTriangleFan missing minor: debug triangle fans are not drawn
DrawableGizmoPrimitives.addQuad missing minor: debug filled quads are not drawn
DrawableGizmoPrimitives.addText missing minor: debug gizmo text labels are not drawn
DrawableGizmoPrimitives.submit port crates/horizon-client/src/game.rs::Game::render gap: minor: lines of both lists go to camera_relative in Game::render; only lines are drawn
BundleSelectedItemSpecialRenderer.update port crates/horizon-assets/src/item_model.rs::Resolve::node bundle selected item layers via the BundleSelectedItem arm
CompositeModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node composite arm: each child in order
CompositeModel.Unbaked.resolveDependencies port crates/horizon-assets/src/item_model.rs::ItemModelNode::dependencies
CompositeModel.Unbaked.bake inline crates/horizon-assets/src/item_model.rs::Resolve::node child transform composed in the composite arm
ConditionalItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node condition arm picks the branch
ConditionalItemModel.Unbaked.bake inline crates/horizon-assets/src/item_model.rs::Resolve::node child transform composed in the condition arm
ConditionalItemModel.Unbaked.adaptProperty skip:java per-level cache of a registry-remapped property; Horizon resolves properties from its own tables
ConditionalItemModel.Unbaked.swapContext skip:data registry remap of a property for a new level; Horizon reads item definitions as data
CuboidItemModelWrapper.update port crates/horizon-assets/src/item_model.rs::Resolve::node model layer: foil, tints, transform and quads
CuboidItemModelWrapper.validateAtlasUsage skip:other load-time check that a model uses only the item and block atlases; throws on bad data, nothing at play time
CuboidItemModelWrapper.hasSpecialAnimatedTexture inline crates/horizon-assets/src/item_model.rs::Resolve::node clock and compass tag give special foil, folded into the model arm
ItemModelResolver.updateForLiving port crates/horizon-client/src/item_render.rs::ItemRenderer::resolve gap: minor: the seed is passed in by the caller; the entity id plus display ordinal seed is not checked here
ItemModelResolver.updateForNonLiving port crates/horizon-client/src/item_render.rs::ItemRenderer::resolve gap: minor: the seed is passed in by the caller; the entity id seed is not checked here
ItemStackRenderState.ensureCapacity skip:java layer array capacity; Horizon builds layer lists per frame
ItemStackRenderState.newLayer skip:java layer array allocation
ItemStackRenderState.clear skip:java resets the per-frame layer list
ItemStackRenderState.visitExtents port crates/horizon-client/src/item_render.rs::ItemRenderState::bounding_box extents transformed per layer
ItemStackRenderState.getModelBoundingBox port crates/horizon-client/src/item_render.rs::ItemRenderState::bounding_box bounding box from the layer extents
ItemStackRenderState.LayerRenderState.clear skip:java resets one layer's fields
ItemStackRenderState.LayerRenderState.tintLayers skip:java lazy list allocation for tint values
ItemStackRenderState.LayerRenderState.submit port crates/horizon-client/src/item_render.rs::ItemRenderState::submit special renderer or quads per layer
MissingItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::missing missing-model layer
MissingItemModel.withTransform port crates/horizon-assets/src/item_model.rs::Resolve::missing missing-model layer under the given transform
ModelRenderProperties.fromResolvedModel port crates/horizon-assets/src/item_bake.rs::bake_item_model particle sprite and GUI light taken at bake
ModelRenderProperties.applyToLayer port crates/horizon-client/src/item_render.rs::ItemRenderer::resolve uses block light, particle and display transform on the layer
RangeSelectItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node range dispatch arm picks the entry
RangeSelectItemModel.Unbaked.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode entries built at load time
SelectItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node select arm picks the case
SelectItemModel.SwitchCase.codec port crates/horizon-assets/src/item_model.rs::SwitchCase::decode case decode from JSON
SelectItemModel.Unbaked.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode cases built at load time
SelectItemModel.Unbaked.resolveDependencies port crates/horizon-assets/src/item_model.rs::ItemModelNode::dependencies
SelectItemModel.UnbakedSwitch.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode switch cases built at load time
SelectItemModel.UnbakedSwitch.createModelGetter port crates/horizon-assets/src/item_model.rs::Resolve::node case lookup by value in the select arm
SelectItemModel.UnbakedSwitch.resolveDependencies port crates/horizon-assets/src/item_model.rs::ItemModelNode::dependencies
SpecialModelWrapper.update port crates/horizon-assets/src/item_model.rs::Resolve::node special arm: model argument from components
SpecialModelWrapper.Unbaked.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode special node built at load time
SpecialModelWrapper.Unbaked.getProperties port crates/horizon-assets/src/item_model.rs::ItemModels::properties hand animation, GUI oversize and swap scale
properties/conditional/CustomModelDataProperty.get port crates/horizon-assets/src/item_model.rs::Resolve::condition conditional property: custom model data flag
FishingRodCast.get port crates/horizon-assets/src/item_model.rs::Resolve::condition owner is casting this item
HasComponent.get port crates/horizon-assets/src/item_model.rs::Resolve::condition component present, default ignored when asked
IsCarried.get port crates/horizon-assets/src/item_model.rs::Resolve::condition local player carrying the stack on the cursor
IsSelected.get port crates/horizon-assets/src/item_model.rs::Resolve::condition local player's selected slot
IsUsingItem.get port crates/horizon-assets/src/item_model.rs::Resolve::condition owner using this item
IsViewEntity.get port crates/horizon-assets/src/item_model.rs::Resolve::condition owner is the camera entity
CompassAngleState.getRandomlySpinningRotation port crates/horizon-assets/src/item_model.rs::Resolve::compass no-target spin, with the no-target wobbler
CompassAngleState.getRotationTowardsCompassTarget port crates/horizon-assets/src/item_model.rs::Resolve::compass target angle and local-player wobble
CompassAngleState.isValidCompassTargetPos inline crates/horizon-assets/src/item_model.rs::Resolve::compass dimension and distance check folded into compass
CompassAngleState.getAngleFromEntityToPos inline crates/horizon-assets/src/item_model.rs::Resolve::compass atan2 folded into compass
Cooldown.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric owner cooldown percent
Count.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric count, normalised or clamped
CrossbowPull.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric charge progress, zero while loaded
properties/numeric/CustomModelDataProperty.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric custom model data float
Damage.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric damage, normalised or clamped
UseCycle.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric remaining use ticks modulo the period
UseDuration.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric remaining or elapsed use ticks
Charge.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value none, arrow or rocket
properties/select/ComponentContents.createType skip:data codec for a component-keyed select; Horizon decodes select cases in item_model.rs
ContextEntityType.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value owner entity type
properties/select/CustomModelDataProperty.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value custom model data string
ItemBlockState.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value block state property of the stack
LocalTime.create port crates/horizon-client/src/game/item_draw.rs::local_time gap: minor: locale and time zone are ignored; only the pattern letters M d y H m s are formatted
LocalTime.get port crates/horizon-client/src/game/item_draw.rs::local_time gap: minor: same as create; formatted on every call, no 1-second cache
1 FeatureRenderDispatcher.PreparedFrame skip:other render-pass order and draw-group plumbing of vanilla's feature renderer; Horizon orders its own passes
2 FeatureRenderDispatcher.PreparedGroup skip:other runs one feature group through its renderer; the per-feature draws are mapped by their own renderers
3 FeatureRendererMap skip:java type-indexed lookup table of feature renderers
4 FlameFeatureRenderer.buildGroup port crates/horizon-client/src/fire_render.rs::flames loop over burning entities
5 FlameFeatureRenderer.prepare port crates/horizon-client/src/fire_render.rs::flames two alternating fire sprites stacked up the entity
6 FlameFeatureRenderer.fireVertex inline crates/horizon-client/src/fire_render.rs::flames vertex push folded into flames
7 GizmoFeatureRenderer.buildGroup port crates/horizon-client/src/gizmos.rs::camera_relative gap: minor: only lines are drawn; quads, triangle fans, points and texts are not
8 GizmoFeatureRenderer.buildTexts missing minor: debug gizmo text labels are not drawn; Gizmos has no text kind
9 GizmoFeatureRenderer.buildTriangleFans missing minor: debug triangle fans are not drawn; Gizmos has no fan kind
10 GizmoFeatureRenderer.buildQuads missing minor: debug filled quads are not drawn; cuboid gizmos are edges only
11 GizmoFeatureRenderer.buildPoints missing minor: debug points are not drawn; Gizmos has no point kind
12 ItemFeatureRenderer.buildGroup port crates/horizon-client/src/item_render.rs::ItemRenderState::submit loop over item submits
13 ItemFeatureRenderer.prepareSubmit port crates/horizon-client/src/item_render.rs::ItemRenderState::submit layer loop, quads or special model
14 ItemFeatureRenderer.prepareOutlineSubmit port crates/horizon-client/src/game/glowing.rs::Game::mark_outline gap: minor: outline colour is only applied to dropped items (item_draw.rs dropped_item_geometry); held-item outlines not checked
15 ItemFeatureRenderer.computeFoilDecalPose missing minor: unsure: the 0.5 GUI and 0.75 first-person foil decal scale is not found; glint scale is per context in item_render.rs Glint
16 ItemFeatureRenderer.getLayerColorSafe port crates/horizon-client/src/item_render.rs::submit_quads tint index past the tints draws white, both overloads
17 LeashFeatureRenderer.buildGroup port crates/horizon-client/src/game/leads.rs::Game::leash_geometry loop over leash submits
18 LeashFeatureRenderer.prepare port crates/horizon-client/src/game/leads.rs::Game::leash_geometry gap: player: rope never sags when slack (vanilla droops the rope); no slack state in the leash render
19 LeashFeatureRenderer.addVertexPair inline crates/horizon-client/src/game/leads.rs::Game::leash_geometry vertex pair with block and sky light lerp folded into leash_geometry
20 ModelFeatureRenderer.buildGroup port crates/horizon-client/src/mobs.rs::render_model loop over model submits
21 ModelFeatureRenderer.prepareModel port crates/horizon-client/src/mobs.rs::render_model gap: minor: setupAnim is done by the mob code, and the sheeted decal and uv wrap are not checked
22 MovingBlockFeatureRenderer.buildGroup port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_geometry moving piston block and base geometry
23 MovingBlockFeatureRenderer.putBakedQuad port crates/horizon-client/src/game/moving_pistons.rs::Game::moving_block_vertices quad placed at the moving offset
24 QuadParticleFeatureRenderer skip:other GPU batching and draw plumbing of particle quads; Horizon's particle pass lives in particles.rs and gfx/pack_entities.rs
25 RenderTypeFeatureRenderer skip:other GPU render-type batching; Horizon batches its own draws in gfx/entity_batch.rs
26 RenderTypeFeatureRenderer.Group skip:other GPU render-type batching, as above
27 ShadowFeatureRenderer.buildGroup port crates/horizon-client/src/shadows.rs::shadow loop over shadow submits
28 ShadowFeatureRenderer.prepare port crates/horizon-client/src/shadows.rs::shadow shadow quads per piece, clamped by the block below
29 ShadowFeatureRenderer.shadowVertex inline crates/horizon-client/src/shadows.rs::shadow vertex push folded into shadow
30 ShapeOutlineFeatureRenderer.buildGroup port crates/horizon-client/src/gfx.rs::outline_vertices block selection outline edges as line vertices
31 TextFeatureRenderer.buildGroup skip:other dispatch over text and background submits; each kind is covered below or by Horizon's text draw
32 TextFeatureRenderer.renderText missing minor: unsure: no outlined-text path found (font.rs, hud.rs, names.rs); the outline colour of a text submit is not drawn
33 TextFeatureRenderer.GlyphRenderer.acceptRenderable skip:other glyph sink for the text pass; Horizon's font pass draws the glyphs
34 FeatureRenderPhase.Output.acceptFeatureGroup skip:other phase plumbing: hands sorted groups to the renderer pass
35 SimpleFeatureRenderPhase skip:other submit, sort, shuffle (debug only) and clear of feature submits; Horizon sorts its own draws
36 SimpleFeatureRenderPhase.FeatureSubmits skip:other batching bookkeeping of feature submits
37 TranslucentFeatureRenderPhase.submit inline crates/horizon-client/src/gfx/translucency.rs::Sorter::sort collects submits; distances are taken in sort
38 TranslucentFeatureRenderPhase.sortInto port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort back-to-front by distance, equal distances keep submit order
39 TranslucentFeatureRenderPhase.sortIndices port crates/horizon-client/src/gfx/translucency.rs::Sorter::sort far to near, stable on ties
40 TranslucentSubmit.computeDistanceToCameraSq inline crates/horizon-client/src/gfx/translucency.rs::Sorter::sort distance from the quad centre to the camera, computed inside sort
41 FogRenderer.getBuffer skip:other selects the fog uniform slice; Horizon hands its fog values to its own shader per frame
42 FogRenderer.updateBuffer skip:other writes the fog uniform buffer; Horizon's frame_fog passes FogData to its own shader
43 AtmosphericFogEnvironment.getBaseColor port crates/horizon-client/src/fog.rs::setup_fog gap: minor: sky fog end uses constant 512 instead of the SKY_FOG_END_DISTANCE attribute
44 AtmosphericFogEnvironment.applyWeatherDarken inline crates/horizon-client/src/fog.rs::setup_fog rain and thunder darkening folded into the atmospheric colour
45 BlindnessFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog blindness distance and sky/cloud ends
46 BlindnessFogEnvironment.getModifiedDarkness inline crates/horizon-client/src/fog.rs::setup_fog blindness darkness folded into setup_fog
47 LavaFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog gap: player: spectator (-8 start, half render distance) and fire resistance (0 to 5) are not applied in lava
48 MobEffectFogEnvironment.isApplicable inline crates/horizon-client/src/game/render_tick.rs::Game::frame_fog effect gate is where frame_fog builds the blindness and darkness inputs
49 PowderedSnowFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog gap: player: spectator case (-8 start, half render distance) is not applied
50 WaterFogEnvironment.setupFog port crates/horizon-client/src/fog.rs::setup_fog gap: minor: water fog start is fixed at -8; vanilla reads the WATER_FOG_START_DISTANCE attribute
51 DrawableGizmoPrimitives.addPoint missing minor: debug points are not drawn; Gizmos has no point kind
52 DrawableGizmoPrimitives.addLine port crates/horizon-client/src/gizmos.rs::Gizmos::line
53 DrawableGizmoPrimitives.addTriangleFan missing minor: debug triangle fans are not drawn
54 DrawableGizmoPrimitives.addQuad missing minor: debug filled quads are not drawn
55 DrawableGizmoPrimitives.addText missing minor: debug gizmo text labels are not drawn
56 DrawableGizmoPrimitives.submit port crates/horizon-client/src/game.rs::Game::render gap: minor: lines of both lists go to camera_relative in Game::render; only lines are drawn
57 BundleSelectedItemSpecialRenderer.update port crates/horizon-assets/src/item_model.rs::Resolve::node bundle selected item layers via the BundleSelectedItem arm
58 CompositeModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node composite arm: each child in order
59 CompositeModel.Unbaked.resolveDependencies port crates/horizon-assets/src/item_model.rs::ItemModelNode::dependencies
60 CompositeModel.Unbaked.bake inline crates/horizon-assets/src/item_model.rs::Resolve::node child transform composed in the composite arm
61 ConditionalItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node condition arm picks the branch
62 ConditionalItemModel.Unbaked.bake inline crates/horizon-assets/src/item_model.rs::Resolve::node child transform composed in the condition arm
63 ConditionalItemModel.Unbaked.adaptProperty skip:java per-level cache of a registry-remapped property; Horizon resolves properties from its own tables
64 ConditionalItemModel.Unbaked.swapContext skip:data registry remap of a property for a new level; Horizon reads item definitions as data
65 CuboidItemModelWrapper.update port crates/horizon-assets/src/item_model.rs::Resolve::node model layer: foil, tints, transform and quads
66 CuboidItemModelWrapper.validateAtlasUsage skip:other load-time check that a model uses only the item and block atlases; throws on bad data, nothing at play time
67 CuboidItemModelWrapper.hasSpecialAnimatedTexture inline crates/horizon-assets/src/item_model.rs::Resolve::node clock and compass tag give special foil, folded into the model arm
68 ItemModelResolver.updateForLiving port crates/horizon-client/src/item_render.rs::ItemRenderer::resolve gap: minor: the seed is passed in by the caller; the entity id plus display ordinal seed is not checked here
69 ItemModelResolver.updateForNonLiving port crates/horizon-client/src/item_render.rs::ItemRenderer::resolve gap: minor: the seed is passed in by the caller; the entity id seed is not checked here
70 ItemStackRenderState.ensureCapacity skip:java layer array capacity; Horizon builds layer lists per frame
71 ItemStackRenderState.newLayer skip:java layer array allocation
72 ItemStackRenderState.clear skip:java resets the per-frame layer list
73 ItemStackRenderState.visitExtents port crates/horizon-client/src/item_render.rs::ItemRenderState::bounding_box extents transformed per layer
74 ItemStackRenderState.getModelBoundingBox port crates/horizon-client/src/item_render.rs::ItemRenderState::bounding_box bounding box from the layer extents
75 ItemStackRenderState.LayerRenderState.clear skip:java resets one layer's fields
76 ItemStackRenderState.LayerRenderState.tintLayers skip:java lazy list allocation for tint values
77 ItemStackRenderState.LayerRenderState.submit port crates/horizon-client/src/item_render.rs::ItemRenderState::submit special renderer or quads per layer
78 MissingItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::missing missing-model layer
79 MissingItemModel.withTransform port crates/horizon-assets/src/item_model.rs::Resolve::missing missing-model layer under the given transform
80 ModelRenderProperties.fromResolvedModel port crates/horizon-assets/src/item_bake.rs::bake_item_model particle sprite and GUI light taken at bake
81 ModelRenderProperties.applyToLayer port crates/horizon-client/src/item_render.rs::ItemRenderer::resolve uses block light, particle and display transform on the layer
82 RangeSelectItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node range dispatch arm picks the entry
83 RangeSelectItemModel.Unbaked.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode entries built at load time
84 SelectItemModel.update port crates/horizon-assets/src/item_model.rs::Resolve::node select arm picks the case
85 SelectItemModel.SwitchCase.codec port crates/horizon-assets/src/item_model.rs::SwitchCase::decode case decode from JSON
86 SelectItemModel.Unbaked.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode cases built at load time
87 SelectItemModel.Unbaked.resolveDependencies port crates/horizon-assets/src/item_model.rs::ItemModelNode::dependencies
88 SelectItemModel.UnbakedSwitch.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode switch cases built at load time
89 SelectItemModel.UnbakedSwitch.createModelGetter port crates/horizon-assets/src/item_model.rs::Resolve::node case lookup by value in the select arm
90 SelectItemModel.UnbakedSwitch.resolveDependencies port crates/horizon-assets/src/item_model.rs::ItemModelNode::dependencies
91 SpecialModelWrapper.update port crates/horizon-assets/src/item_model.rs::Resolve::node special arm: model argument from components
92 SpecialModelWrapper.Unbaked.bake port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode special node built at load time
93 SpecialModelWrapper.Unbaked.getProperties port crates/horizon-assets/src/item_model.rs::ItemModels::properties hand animation, GUI oversize and swap scale
94 properties/conditional/CustomModelDataProperty.get port crates/horizon-assets/src/item_model.rs::Resolve::condition conditional property: custom model data flag
95 FishingRodCast.get port crates/horizon-assets/src/item_model.rs::Resolve::condition owner is casting this item
96 HasComponent.get port crates/horizon-assets/src/item_model.rs::Resolve::condition component present, default ignored when asked
97 IsCarried.get port crates/horizon-assets/src/item_model.rs::Resolve::condition local player carrying the stack on the cursor
98 IsSelected.get port crates/horizon-assets/src/item_model.rs::Resolve::condition local player's selected slot
99 IsUsingItem.get port crates/horizon-assets/src/item_model.rs::Resolve::condition owner using this item
100 IsViewEntity.get port crates/horizon-assets/src/item_model.rs::Resolve::condition owner is the camera entity
101 CompassAngleState.getRandomlySpinningRotation port crates/horizon-assets/src/item_model.rs::Resolve::compass no-target spin, with the no-target wobbler
102 CompassAngleState.getRotationTowardsCompassTarget port crates/horizon-assets/src/item_model.rs::Resolve::compass target angle and local-player wobble
103 CompassAngleState.isValidCompassTargetPos inline crates/horizon-assets/src/item_model.rs::Resolve::compass dimension and distance check folded into compass
104 CompassAngleState.getAngleFromEntityToPos inline crates/horizon-assets/src/item_model.rs::Resolve::compass atan2 folded into compass
105 Cooldown.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric owner cooldown percent
106 Count.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric count, normalised or clamped
107 CrossbowPull.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric charge progress, zero while loaded
108 properties/numeric/CustomModelDataProperty.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric custom model data float
109 Damage.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric damage, normalised or clamped
110 UseCycle.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric remaining use ticks modulo the period
111 UseDuration.get port crates/horizon-assets/src/item_model.rs::Resolve::numeric remaining or elapsed use ticks
112 Charge.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value none, arrow or rocket
113 properties/select/ComponentContents.createType skip:data codec for a component-keyed select; Horizon decodes select cases in item_model.rs
114 ContextEntityType.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value owner entity type
115 properties/select/CustomModelDataProperty.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value custom model data string
116 ItemBlockState.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value block state property of the stack
117 LocalTime.create port crates/horizon-client/src/game/item_draw.rs::local_time gap: minor: locale and time zone are ignored; only the pattern letters M d y H m s are formatted
118 LocalTime.get port crates/horizon-client/src/game/item_draw.rs::local_time gap: minor: same as create; formatted on every call, no 1-second cache
+145
View File
@@ -0,0 +1,145 @@
SelectItemModelProperty.Type.create skip:java codec builder
SelectItemModelProperty.Type.validateCases port crates/horizon-assets/src/item_model.rs::ItemModelNode::decode empty and duplicate case checks in the Select arm
TrimMaterialProperty.get port crates/horizon-assets/src/item_model.rs::Resolve::select_value trim material id from the minecraft:trim component
OitPipelineSet.getPipeline missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
OitPipelineSet.Builder.composeModifiers missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
OitPipelineSet.Builder.build missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
OitRenderPassProvider.createRenderPass missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
OitRenderPassProvider.createDepthBoundsPass missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
OitRenderPassProvider.createTransmittancePass missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
OitRenderPassProvider.createAccumulatePass missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
PreparedRenderType.drawFromBufferOit missing minor: opt-in Improved Transparency (off by default), no OIT pipelines or passes in Horizon
PreparedRenderType.draw inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame gap: minor: the indexed draw runs in the gfx/ pass modules that draw_frame calls; RenderSetup scissor not seen
RenderSetup.toString skip:debug
RenderSetup.prepareTextures inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame overlay and lightmap samplers are bound per pass in gfx/
RenderSetup.RenderSetupBuilder.withTexture skip:java builder
RenderSetup.RenderSetupBuilder.setOutline skip:java builder setter; outline behaviour is in gfx/entity_outline.rs
RenderSetup.RenderSetupBuilder.createRenderSetup skip:java builder
RenderType.calculateHasBlending skip:other blend flag from the pipeline colour targets; Horizon picks blend per pipeline in gfx.rs
RenderType.prepare inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame gap: minor: texture and overlay/lightmap binding folded into the frame passes
RenderType.writeDynamicTransforms inline crates/horizon-client/src/gfx.rs::Renderer::draw_frame gap: minor: no per-render-type layering offset found (only perspective layering scale)
RenderTypes.createMovingBlockSetup inline crates/horizon-client/src/game/moving_pistons.rs::Game::moving_piston_geometry block atlas and lightmap for moving blocks; gap: minor: crumbling and outline flags not checked here
RenderTypes.breezeWind inline crates/horizon-client/src/mobs/render.rs::layers gap: player: the breeze wind layer does not scroll; the UV offset is not applied (render.rs comment)
BannerSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit Banner arm: flag, base and up to 16 pattern layers
BannerSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
BellSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit Bell arm
BellSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents Bell arm
BellSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
BookSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit Book arm with book_pose
BookSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents Book arm with book_pose
BookSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
ChestSpecialRenderer.createDefaultTextures inline crates/horizon-client/src/item_render/special.rs::submit default chest texture ids come from mapped("chest", ...) in the Chest arm
ChestSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit Chest arm with chest_pose
ChestSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents Chest arm with chest_pose
ChestSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
ConduitSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit Conduit arm
CopperGolemStatueSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit CopperGolemStatue arm
CopperGolemStatueSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents CopperGolemStatue arm
CopperGolemStatueSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts COPPER_GOLEM_LAYERS are baked once
CopperGolemStatueSpecialRenderer.Unbaked.getModel port crates/horizon-client/src/item_render/special.rs::statue_layer pose to model layer
DecoratedPotSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit DecoratedPot arm
EndCubeSpecialRenderer.Unbaked.bake missing minor: no bundled item uses the end cube model (special.rs notes it), so no end portal or gateway effect in hand
PlayerHeadSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit PlayerHead arm
PlayerHeadSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents PlayerHead arm
PlayerHeadSpecialRenderer.extractArgument port crates/horizon-client/src/skins.rs::head_skin profile to skin lookup
PlayerHeadSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
ShieldSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents Shield arm
ShieldSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
ShulkerBoxSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit ShulkerBox arm with shulker_pose
ShulkerBoxSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
SkullSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit Head arm with skull_pose and skull_texture
SkullSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents Head arm with skull_pose
SkullSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
SpecialModelRenderers.bootstrap skip:data registers special model kinds; Horizon matches SpecialKind in item_model.rs
TridentSpecialRenderer.submit port crates/horizon-client/src/item_render/special.rs::submit Trident arm; has_foil gives the standard foil
TridentSpecialRenderer.getExtents port crates/horizon-client/src/item_render/special.rs::extents Trident arm
TridentSpecialRenderer.Unbaked.bake inline crates/horizon-client/src/item_render/special.rs::load_parts models are baked once from entity-models.json
BlitRenderState.buildVertices skip:ui GUI draw-queue geometry; Horizon draws its own HUD
BlitRenderState.getBounds skip:ui GUI draw-queue geometry; Horizon draws its own HUD
ColoredRectangleRenderState.buildVertices skip:ui GUI draw-queue geometry; Horizon draws its own HUD
ColoredRectangleRenderState.getBounds skip:ui GUI draw-queue geometry; Horizon draws its own HUD
GlyphRenderState.buildVertices skip:ui GUI draw-queue geometry; Horizon draws its own HUD
GuiItemRenderState.calculateOversizedItemBounds skip:ui GUI draw-queue geometry; Horizon draws its own HUD
GuiItemRenderState.calculateBounds skip:ui GUI draw-queue geometry; Horizon draws its own HUD
GuiRenderState.nextStratum skip:ui GUI draw-queue ordering
GuiRenderState.blurBeforeThisStratum port crates/horizon-client/src/game.rs::Game::hud_layers blur_at marks the vertices drawn before the blur (game.rs hud batch)
GuiRenderState.up skip:ui GUI draw-queue ordering
GuiRenderState.addItem skip:ui GUI draw-queue ordering
GuiRenderState.addText skip:ui GUI draw-queue ordering
GuiRenderState.addPicturesInPictureState skip:ui GUI draw-queue ordering
GuiRenderState.addGuiElement skip:ui GUI draw-queue ordering
GuiRenderState.addDebugRectangleIfEnabled skip:debug UI layering debug rectangles
GuiRenderState.findAppropriateNode skip:ui GUI draw-queue ordering and traversal
GuiRenderState.navigateToAboveHighestElementWithIntersectingBounds skip:ui GUI draw-queue ordering and traversal
GuiRenderState.hasIntersection skip:ui GUI draw-queue ordering and traversal
GuiRenderState.forEachElement skip:ui GUI draw-queue ordering and traversal
GuiRenderState.forEachItem skip:ui GUI draw-queue ordering and traversal
GuiRenderState.forEachText skip:ui GUI draw-queue ordering and traversal
GuiRenderState.forEachPictureInPicture skip:ui GUI draw-queue ordering and traversal
GuiRenderState.sortElements skip:ui GUI draw-queue ordering and traversal
GuiRenderState.traverse skip:ui GUI draw-queue ordering and traversal
GuiRenderState.reset skip:ui GUI draw-queue ordering and traversal
GuiRenderState.Node.addItem skip:ui GUI draw-queue node
GuiRenderState.Node.addText skip:ui GUI draw-queue node
GuiRenderState.Node.addPicturesInPictureState skip:ui GUI draw-queue node
GuiRenderState.Node.addGuiElement skip:ui GUI draw-queue node
GuiRenderState.Node.addGlyph skip:ui GUI draw-queue node
GuiTextRenderState.ensurePrepared skip:ui text layout for the GUI draw queue
TiledBlitRenderState.buildVertices skip:ui GUI tiled draw geometry
TiledBlitRenderState.getBounds skip:ui GUI draw bounds
PictureInPictureRenderState.getBounds skip:ui GUI draw bounds
LevelRenderState.reset skip:java per-frame state clear
ParticlesRenderState.submit inline crates/horizon-client/src/particles.rs::ParticleEngine::render submits particle groups; draws in render
PlayerRenderState.reset skip:java per-frame state clear
QuadParticleRenderState.add port crates/horizon-client/src/particles.rs::ParticleEngine::add quad particle queued per layer
QuadParticleRenderState.buildLayer port crates/horizon-client/src/particles.rs::ParticleEngine::render per-layer quad build and draw
QuadParticleRenderState.renderVertex inline crates/horizon-client/src/particles.rs::ParticleEngine::render vertex math inside the render rotated quad
QuadParticleRenderState.Storage.add port crates/horizon-client/src/particles.rs::ParticleEngine::push store one quad particle
QuadParticleRenderState.Storage.forEachParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::render iterates stored particles in render
QuadParticleRenderState.Storage.grow skip:java array capacity growth
WeatherRenderState.reset skip:java per-frame state clear
AbstractTexture.releaseTextures skip:java GPU handle release; Rust drop
AbstractTexture.getTexture skip:java accessor
AbstractTexture.getTextureView skip:java accessor
CubeMapTexture.loadContents port crates/horizon-client/src/gfx/panorama.rs::Faces::try_load six faces read, flipped and stacked
CubeMapTexture.doLoad port crates/horizon-client/src/gfx/panorama.rs::Panorama::new cube texture creation and upload
DynamicAtlasTree.insertInner skip:other dynamic atlas packing; Horizon uses texture-array layers, not a rectangle packer
DynamicTexture.createTexture skip:other GPU texture creation for CPU pixels; Horizon has no DynamicTexture class
DynamicTexture.upload port crates/horizon-client/src/gfx.rs::Renderer::update_lightmap gap: minor: only the lightmap upload goes through here
DynamicTexture.dumpContents skip:debug dump debug action
MipmappedTexture.setSampler port crates/horizon-client/src/screen_effects.rs::sampling gap: minor: only blur and clamp bits; filters fixed in gfx
MipmappedTexture.doLoad port crates/horizon-client/src/mipmap.rs::generate mip chain generation
MipmappedTexture.clampMipLevel port crates/horizon-client/src/sprites.rs::sprite_mipmap_limit mip level cap from texture size
MissingTextureAtlasSprite.create port crates/horizon-client/src/sprites.rs::Sprites::insert generated magenta and black missing texture
OverlayTexture.pack skip:other packs u and v into one int for vertex data; overlay.rs::living uses one code
ReloadableTexture.apply inline crates/horizon-client/src/sprites.rs::Sprites::load gap: minor: sampler flags read from the texture section; upload happens later in gfx
ReloadableTexture.doLoad inline crates/horizon-client/src/sprites.rs::Sprites::finish gap: minor: lays out layers; the GPU upload is in gfx
SkinTextureDownloader.downloadAndRegisterSkin port crates/horizon-client/src/skins.rs::Downloader::state starts the skin download and decode
SkinTextureDownloader.downloadSkin port crates/horizon-client/src/skins.rs::Downloader::state disk cache read or HTTP fetch with cache write, in the spawned thread
SkinTextureDownloader.registerTextureInManager inline crates/horizon-client/src/skins.rs::Downloader::queue ready skin queued for the atlas upload
SkinTextureDownloader.doNotchTransparencyHack inline crates/horizon-client/src/skins.rs::process_legacy_skin hat layer cleared when fully opaque
SkinTextureDownloader.setNoAlpha inline crates/horizon-client/src/skins.rs::process_legacy_skin legacy skin regions made opaque
SpriteContents.increaseMipLevel port crates/horizon-client/src/mipmap.rs::generate mip chain generation
SpriteContents.createAnimatedTexture port crates/horizon-client/src/sprites.rs::Sprites::load animation frames from mcmeta
SpriteContents.createAnimationState inline crates/horizon-client/src/sprites.rs::Sprites::finish animation frames laid out per layer
SpriteContents.getAdditionalMetadata skip:java generic metadata lookup
SpriteContents.close skip:java image release; Rust drop
SpriteContents.toString skip:debug
SpriteContents.isTransparent inline crates/horizon-client/src/sprites.rs::Sprites::region_opaque gap: minor: single-texel alpha query is not kept; region_opaque tests alpha 255 over a UV box
SpriteContents.uploadFirstFrame inline crates/horizon-client/src/sprites.rs::Sprites::finish first frame copied into the layer pixels
SpriteContents.AnimatedTexture.createAnimationState inline crates/horizon-client/src/sprites.rs::Sprites::finish animation frames laid out per layer
SpriteContents.AnimationState.needsToDraw skip:java redraw skip optimisation
SpriteContents.AnimationState.close skip:java frame texture release; Rust drop
SpriteLoader.stitch port crates/horizon-client/src/sprites.rs::sprite_mipmap_limit gap: minor: atlas stitching replaced by one texture-array layer per sprite
SpriteLoader.runSpriteSuppliers skip:java parallel sprite loading
SpriteLoader.loadAndStitch inline crates/horizon-client/src/sprites.rs::Sprites::insert gap: minor: sprites are read on first use, not as one batch
SpriteLoader.getStitchedSprites skip:other maps sprites to atlas rectangles; Horizon uses array layers
Stitcher.registerSprite skip:other atlas rectangle packing; Horizon uses one texture-array layer per sprite
Stitcher.stitch skip:other atlas rectangle packing; Horizon uses one texture-array layer per sprite
Stitcher.gatherSprites skip:other atlas rectangle packing; Horizon uses one texture-array layer per sprite
Stitcher.smallestFittingMinTexel skip:other atlas rectangle packing; Horizon uses one texture-array layer per sprite
Stitcher.addToStorage skip:other atlas rectangle packing; Horizon uses one texture-array layer per sprite
Stitcher.expand skip:other atlas rectangle packing; Horizon uses one texture-array layer per sprite
Stitcher.Region.add skip:other atlas rectangle packing
Stitcher.Region.walk skip:other atlas rectangle packing
Stitcher.Region.toString skip:debug
Can't render this file because it contains an unexpected character in line 31 and column 151.
+150
View File
@@ -0,0 +1,150 @@
TextureAtlas.createTexture inline crates/horizon-client/src/sprites.rs::Sprites::finish gap: minor: no GPU texture objects or mip views; array size and mip count are set in finish
TextureAtlas.upload inline crates/horizon-client/src/sprites.rs::Sprites::finish gap: minor: no GPU upload or animated UBOs; sprites are inserted before finish
TextureAtlas.uploadInitialContents inline crates/horizon-client/src/sprites.rs::Sprites::finish static frames copied into the array pixels
TextureAtlas.dumpContents skip:debug DEBUG_DUMP_TEXTURE_ATLAS PNG dump
TextureAtlas.dumpSpriteNames skip:debug DEBUG_DUMP_TEXTURE_ATLAS name list
TextureAtlas.cycleAnimationFrames port crates/horizon-client/src/gfx/animate.rs::SpriteAnimator::animate advances every animated layer to the frame for the tick
TextureAtlas.uploadAnimationFrames port crates/horizon-client/src/gfx/animate.rs::mix_level per mip level frame mix (drawToAtlas)
TextureAtlas.getSprite port crates/horizon-client/src/sprites.rs::Sprites::insert gap: minor: loads a texture on first lookup; vanilla returns the missing sprite for names not in the atlas
TextureAtlas.clearTextureData skip:java frees sprite and UBO memory; Rust ownership
TextureAtlas.releaseTextures skip:java frees GPU mip views; Rust ownership
TextureAtlasSprite.getV inline crates/horizon-client/src/particles.rs::ParticleEngine::render gap: minor: only the particle quad V lerp is here; other getV callers keep their own lerp
TextureAtlasSprite.toString skip:debug debug string
TextureAtlasSprite.uploadSpriteUbo skip:other GPU uniform block for the atlas blit; Horizon samples its layer array and SpriteAnimator computes frames, so no UBO is needed
TextureContents.load port crates/horizon-client/src/sprites.rs::Sprites::load reads the PNG and the .mcmeta animation section
TextureManager.registerAndLoad port crates/horizon-client/src/sprites.rs::Sprites::insert loads the texture into a layer and registers it by name
TextureManager.loadContentsSafe inline crates/horizon-client/src/sprites.rs::Sprites::insert missing texture fallback when a texture does not load
TextureManager.register inline crates/horizon-client/src/sprites.rs::Sprites::insert adds the layer under its name
TextureManager.safeClose skip:java closes a texture object; Rust ownership
TextureManager.getTexture port crates/horizon-client/src/sprites.rs::Sprites::insert loads on first use, as SimpleTexture does
TextureManager.tick port crates/horizon-client/src/gfx/animate.rs::SpriteAnimator::animate gap: minor: animated layers advance in the per frame animate pass; there is no tickable texture list
TextureManager.release skip:java drops one texture object; Rust ownership
TextureManager.close skip:java drops all texture objects; Rust ownership
TextureManager.reload port crates/horizon-client/src/assets.rs::Assets::reload gap: minor: rebuilds every render asset synchronously; no pending futures
TextureManager.dumpAllSheets skip:debug debug dump of every atlas
TextureManager.scheduleLoad skip:other asynchronous texture preparation; Horizon loads each texture on the calling thread in Sprites::insert
SpriteSource.Output.add port crates/horizon-client/src/atlas_sources.rs::list records a sprite id and its origin; a later source with the same id replaces it
SpriteSourceList.load port crates/horizon-client/src/atlas_sources.rs::atlases gap: minor: reads one resource root's atlases/*.json, not every pack's stacked definitions
DirectoryLister.run port crates/horizon-client/src/atlas_sources.rs::list Directory arm: textures under source/ get the prefix
LazyLoadedImage.get skip:java shared image cache; generate reads the source texture each time it builds a sprite
LazyLoadedImage.release skip:java releases the shared image cache
PalettedPermutations.loadPaletteEntryFromImage inline crates/horizon-client/src/atlas_sources.rs::generate palette images are loaded inside the Paletted arm of generate
PalettedPermutations.PalettedSpriteSupplier.get port crates/horizon-client/src/atlas_sources.rs::generate Paletted arm: base colours mapped through the palette pair (apply_palette)
SingleFile.run port crates/horizon-client/src/atlas_sources.rs::list Single arm: the sprite named by the resource, or its sprite id
Unstitcher.run port crates/horizon-client/src/atlas_sources.rs::list Unstitch arm: one sprite per region of the texture
Unstitcher.RegionInstance.get port crates/horizon-client/src/atlas_sources.rs::generate Region arm: the region cut out of the texture
AshParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Ash arm
AttackSweepParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle SweepAttack uses the HugeExplosion behaviour: age, then sprite from age
AttackSweepParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SweepAttack arm: size from xAux
BaseAshSmokeParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke, Ash, WhiteAsh and DustPlume arms: motion, GrowIn size, lifetime
BreakingItemParticle.CobwebProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ItemCobweb arm; the layer comes from item_sprites (game/item_particles.rs)
BreakingItemParticle.ItemParticleProvider.getSprite port crates/horizon-client/src/particles.rs::ParticleEngine::make Item arms pick a layer with the engine random; ItemCobweb, ItemSlime and ItemSnowball read item_sprites
BreakingItemParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Item arm
BreakingItemParticle.SlimeProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ItemSlime arm
BreakingItemParticle.SnowballProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ItemSnowball arm
BreakingItemParticle.SulfurCubeProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SulfurCubeGoo arm: the first sprite of its set
BubbleColumnUpParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle BubbleColumnUp arm: removed once it leaves water
BubbleColumnUpParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make BubbleColumnUp arm
BubbleParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Bubble arm: rises, drag 0.85, removed out of water
BubbleParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Bubble arm
BubblePopParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle BubblePop arm
BubblePopParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make BubblePop arm
CampfireSmokeParticle.CosyProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make CampfireCosySmoke arm, alpha 0.9
CampfireSmokeParticle.SignalProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make CampfireSignalSmoke arm, alpha 0.95
CritParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Crit arm; the constructor tick runs on the next engine tick (pre_tick)
CritParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Crit arm: green and blue fade
CritParticle.DamageIndicatorProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DamageIndicator arm; lifetime 20 from after_constructor_tick
CritParticle.MagicProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make EnchantedHit arm; red and green scaled by after_constructor_tick
CritParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Crit arm
DragonBreathParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle DragonBreath arm: hit-ground flag and friction
DragonBreathParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
DragonBreathParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DragonBreath arm; power through set_power
DripParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords Block15 for the glowing tears; World for the rest
DripParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Drip: pre move, gravity and move, post move, fluid check
DripParticle.preMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip: lifetime countdown and removal
DripParticle.CoolingDripHangParticle.preMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip CoolingHang stage: red, green and blue fade
DripParticle.DripHangParticle.preMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip Hang stage: spawns the falling drip when the countdown ends
DripParticle.DripHangParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip Hang stage: velocity times 0.02
DripParticle.DripstoneFallAndLandParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallAndLand stage with the dripstone land sound
DripParticle.DripstoneLavaFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingDripstoneLava arm
DripParticle.DripstoneLavaHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingDripstoneLava arm
DripParticle.DripstoneWaterFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingDripstoneWater arm
DripParticle.DripstoneWaterHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingDripstoneWater arm
DripParticle.FallAndLandParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallAndLand stage: removed on the ground, spawns the land particle
DripParticle.HoneyFallAndLandParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallAndLand for FallingHoney: beehive drip sound
DripParticle.LavaFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingLava arm
DripParticle.LavaHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingLava arm
DripParticle.LavaLandProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make LandingLava arm
DripParticle.ObsidianTearFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingObsidianTear arm
DripParticle.ObsidianTearHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingObsidianTear arm
DripParticle.ObsidianTearLandProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make LandingObsidianTear arm
DripParticle.SporeBlossomFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingSporeBlossom arm
DripParticle.WaterFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingWater arm
DripParticle.WaterHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingWater arm
DustColorTransitionParticle.randomizeColor port crates/horizon-client/src/particles.rs::ParticleEngine::make DustColorTransition arm: the randomize closure for from and to colours
DustColorTransitionParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DustColorTransition arm
DustParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Dust arm
DustParticleBase.randomizeColor port crates/horizon-client/src/particles.rs::ParticleEngine::make Dust and DustColorTransition arms: the randomize closure
DustParticleBase.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
DustPlumeParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DustPlume arm, base 1.0
ElderGuardianParticleGroup.extractRenderState port crates/horizon-client/src/game/mob_blocks.rs::Game::elder_apparition_geometry gap: minor: one apparition timer that a new curse resets, so two curses show one ghost
ElderGuardianParticleGroup.ElderGuardianParticleRenderState.fromParticle port crates/horizon-client/src/game/mob_blocks.rs::Game::elder_apparition_geometry fade, camera pose and offsets
ElderGuardianParticleGroup.State.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::elder_apparition_geometry draws the guardian model
EmissiveRisingParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords Block15 for sculk soul only (the SculkSoul arm)
EmissiveRisingParticle.EmissiveProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SculkSoul arm of the Soul arms
EmissiveRisingParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Soul arm
EndRodParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move: moves the box without collision
EndRodParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make EndRod arm
ExplodeParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Poof and Spit arms: puff motion, size and lifetime
ExplodeParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Poof arm
FallingDustParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
FallingDustParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallingDust arm: roll and gravity clamp
FallingDustParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: the invisible-block skip and the tint lookup happen in animate_tick (Animate::Falling), not here
FallingLeavesParticle.CherryProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make CherryLeaves arm
FallingLeavesParticle.PaleOakProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make PaleOakLeaves arm
FallingLeavesParticle.PoplarProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make RedPoplarLeaves, OrangePoplarLeaves and YellowPoplarLeaves arms
FallingLeavesParticle.TintedLeavesProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make TintedLeaves arm with the option colour
FallingParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Leaves arm: size, gravity, start velocity, flow and swirl
FallingParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Leaves arm: wind, spin and removal on the ground
FireflyParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Firefly arm: removed in a solid block, fade, random drift
FireflyParticle.FireflyProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Firefly arm
FireworkParticles.FlashProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Flash arm
FireworkParticles.SparkProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Firework arm, alpha 0.99
FireworkParticles.Starter.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_starters launch sound, a burst every 2 ticks, flash, twinkle sound at the end
FireworkParticles.Starter.isFarAwayFromCamera inline crates/horizon-client/src/particles.rs::ParticleEngine::fireworks gap: minor: the distance is taken when the rocket is launched, not on each tick
FireworkParticles.Starter.createParticleBall port crates/horizon-client/src/particles.rs::ParticleEngine::spark_ball
FireworkParticles.Starter.createParticleShape port crates/horizon-client/src/particles.rs::ParticleEngine::spark_shape
FireworkParticles.Starter.createParticleBurst inline crates/horizon-client/src/particles.rs::ParticleEngine::tick_starters Burst shape arm of tick_starters
FlameParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move: moves the box without collision
FlameParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Flame size curve
FlameParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords AgeEmission light
FlameParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Flame arm (also copper and soul fire flame)
FlameParticle.SmallFlameProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SmallFlame arm, scaled 0.5
FlyStraightTowardsParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FlyStraight arm: position and colour lerp
FlyStraightTowardsParticle.OminousSpawnProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make OminousSpawning arm
FlyTowardsPositionParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Enchant, Nautilus and VaultConnection arms
FlyTowardsPositionParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move: moves the box without collision
FlyTowardsPositionParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords AgeEmission4 for enchant and nautilus; Block15 for vault connection
FlyTowardsPositionParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FlyTowards arm
FlyTowardsPositionParticle.extract port crates/horizon-client/src/particles.rs::ParticleEngine::render alpha from the lifetime curve at draw time
FlyTowardsPositionParticle.EnchantProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Enchant arm
FlyTowardsPositionParticle.NautilusProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Nautilus arm
FlyTowardsPositionParticle.VaultConnectionProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make VaultConnection arm: block light, lifetime alpha, scale 1.5
GeyserBaseParticle.Provider.createParticle missing player: sulfur geysers do not erupt here: no water column, base puff or eruption sound (only the potent sulfur block state exists), and the geyser particle types are not in ParticleType
GeyserEruptionParticle.tick missing player: the water column of a geyser eruption is not drawn; no geyser particle types exist here
GeyserEruptionParticle.Provider.createParticle missing player: no geyser eruption particle is made
GeyserPlumeParticle.<init> missing player: no water plume is made when a sulfur geyser erupts
GeyserPlumeParticle.tick missing player: the plume does not rise, spray or fall back
GeyserPlumeParticle.Provider.createParticle missing player: no water plume is made when a sulfur geyser erupts
GlowParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords AgeEmission light (glow, wax, electric spark)
GlowParticle.ElectricSparkProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ElectricSpark arm
GlowParticle.GlowSquidProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Glow arm
GlowParticle.WaxOffProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make WaxOff arm
GlowParticle.WaxOnProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make WaxOn arm
GustParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle HugeExplosion behaviour: age, then sprite from age
GustParticle.SmallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SmallGust arm, scaled 0.15
GustSeedParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle GustSeed arm: a gust every tick or two, then removal
GustSeedParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make GustEmitterLarge and GustEmitterSmall arms: scale, lifetime, delay
HeartParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
HeartParticle.AngryVillagerProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make AngryVillager arm, raised 0.5; the default colour is already white
HeartParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Heart arm
1 TextureAtlas.createTexture inline crates/horizon-client/src/sprites.rs::Sprites::finish gap: minor: no GPU texture objects or mip views; array size and mip count are set in finish
2 TextureAtlas.upload inline crates/horizon-client/src/sprites.rs::Sprites::finish gap: minor: no GPU upload or animated UBOs; sprites are inserted before finish
3 TextureAtlas.uploadInitialContents inline crates/horizon-client/src/sprites.rs::Sprites::finish static frames copied into the array pixels
4 TextureAtlas.dumpContents skip:debug DEBUG_DUMP_TEXTURE_ATLAS PNG dump
5 TextureAtlas.dumpSpriteNames skip:debug DEBUG_DUMP_TEXTURE_ATLAS name list
6 TextureAtlas.cycleAnimationFrames port crates/horizon-client/src/gfx/animate.rs::SpriteAnimator::animate advances every animated layer to the frame for the tick
7 TextureAtlas.uploadAnimationFrames port crates/horizon-client/src/gfx/animate.rs::mix_level per mip level frame mix (drawToAtlas)
8 TextureAtlas.getSprite port crates/horizon-client/src/sprites.rs::Sprites::insert gap: minor: loads a texture on first lookup; vanilla returns the missing sprite for names not in the atlas
9 TextureAtlas.clearTextureData skip:java frees sprite and UBO memory; Rust ownership
10 TextureAtlas.releaseTextures skip:java frees GPU mip views; Rust ownership
11 TextureAtlasSprite.getV inline crates/horizon-client/src/particles.rs::ParticleEngine::render gap: minor: only the particle quad V lerp is here; other getV callers keep their own lerp
12 TextureAtlasSprite.toString skip:debug debug string
13 TextureAtlasSprite.uploadSpriteUbo skip:other GPU uniform block for the atlas blit; Horizon samples its layer array and SpriteAnimator computes frames, so no UBO is needed
14 TextureContents.load port crates/horizon-client/src/sprites.rs::Sprites::load reads the PNG and the .mcmeta animation section
15 TextureManager.registerAndLoad port crates/horizon-client/src/sprites.rs::Sprites::insert loads the texture into a layer and registers it by name
16 TextureManager.loadContentsSafe inline crates/horizon-client/src/sprites.rs::Sprites::insert missing texture fallback when a texture does not load
17 TextureManager.register inline crates/horizon-client/src/sprites.rs::Sprites::insert adds the layer under its name
18 TextureManager.safeClose skip:java closes a texture object; Rust ownership
19 TextureManager.getTexture port crates/horizon-client/src/sprites.rs::Sprites::insert loads on first use, as SimpleTexture does
20 TextureManager.tick port crates/horizon-client/src/gfx/animate.rs::SpriteAnimator::animate gap: minor: animated layers advance in the per frame animate pass; there is no tickable texture list
21 TextureManager.release skip:java drops one texture object; Rust ownership
22 TextureManager.close skip:java drops all texture objects; Rust ownership
23 TextureManager.reload port crates/horizon-client/src/assets.rs::Assets::reload gap: minor: rebuilds every render asset synchronously; no pending futures
24 TextureManager.dumpAllSheets skip:debug debug dump of every atlas
25 TextureManager.scheduleLoad skip:other asynchronous texture preparation; Horizon loads each texture on the calling thread in Sprites::insert
26 SpriteSource.Output.add port crates/horizon-client/src/atlas_sources.rs::list records a sprite id and its origin; a later source with the same id replaces it
27 SpriteSourceList.load port crates/horizon-client/src/atlas_sources.rs::atlases gap: minor: reads one resource root's atlases/*.json, not every pack's stacked definitions
28 DirectoryLister.run port crates/horizon-client/src/atlas_sources.rs::list Directory arm: textures under source/ get the prefix
29 LazyLoadedImage.get skip:java shared image cache; generate reads the source texture each time it builds a sprite
30 LazyLoadedImage.release skip:java releases the shared image cache
31 PalettedPermutations.loadPaletteEntryFromImage inline crates/horizon-client/src/atlas_sources.rs::generate palette images are loaded inside the Paletted arm of generate
32 PalettedPermutations.PalettedSpriteSupplier.get port crates/horizon-client/src/atlas_sources.rs::generate Paletted arm: base colours mapped through the palette pair (apply_palette)
33 SingleFile.run port crates/horizon-client/src/atlas_sources.rs::list Single arm: the sprite named by the resource, or its sprite id
34 Unstitcher.run port crates/horizon-client/src/atlas_sources.rs::list Unstitch arm: one sprite per region of the texture
35 Unstitcher.RegionInstance.get port crates/horizon-client/src/atlas_sources.rs::generate Region arm: the region cut out of the texture
36 AshParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Ash arm
37 AttackSweepParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle SweepAttack uses the HugeExplosion behaviour: age, then sprite from age
38 AttackSweepParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SweepAttack arm: size from xAux
39 BaseAshSmokeParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke, Ash, WhiteAsh and DustPlume arms: motion, GrowIn size, lifetime
40 BreakingItemParticle.CobwebProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ItemCobweb arm; the layer comes from item_sprites (game/item_particles.rs)
41 BreakingItemParticle.ItemParticleProvider.getSprite port crates/horizon-client/src/particles.rs::ParticleEngine::make Item arms pick a layer with the engine random; ItemCobweb, ItemSlime and ItemSnowball read item_sprites
42 BreakingItemParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Item arm
43 BreakingItemParticle.SlimeProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ItemSlime arm
44 BreakingItemParticle.SnowballProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ItemSnowball arm
45 BreakingItemParticle.SulfurCubeProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SulfurCubeGoo arm: the first sprite of its set
46 BubbleColumnUpParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle BubbleColumnUp arm: removed once it leaves water
47 BubbleColumnUpParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make BubbleColumnUp arm
48 BubbleParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Bubble arm: rises, drag 0.85, removed out of water
49 BubbleParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Bubble arm
50 BubblePopParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle BubblePop arm
51 BubblePopParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make BubblePop arm
52 CampfireSmokeParticle.CosyProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make CampfireCosySmoke arm, alpha 0.9
53 CampfireSmokeParticle.SignalProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make CampfireSignalSmoke arm, alpha 0.95
54 CritParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Crit arm; the constructor tick runs on the next engine tick (pre_tick)
55 CritParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Crit arm: green and blue fade
56 CritParticle.DamageIndicatorProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DamageIndicator arm; lifetime 20 from after_constructor_tick
57 CritParticle.MagicProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make EnchantedHit arm; red and green scaled by after_constructor_tick
58 CritParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Crit arm
59 DragonBreathParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle DragonBreath arm: hit-ground flag and friction
60 DragonBreathParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
61 DragonBreathParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DragonBreath arm; power through set_power
62 DripParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords Block15 for the glowing tears; World for the rest
63 DripParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Drip: pre move, gravity and move, post move, fluid check
64 DripParticle.preMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip: lifetime countdown and removal
65 DripParticle.CoolingDripHangParticle.preMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip CoolingHang stage: red, green and blue fade
66 DripParticle.DripHangParticle.preMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip Hang stage: spawns the falling drip when the countdown ends
67 DripParticle.DripHangParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Drip Hang stage: velocity times 0.02
68 DripParticle.DripstoneFallAndLandParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallAndLand stage with the dripstone land sound
69 DripParticle.DripstoneLavaFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingDripstoneLava arm
70 DripParticle.DripstoneLavaHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingDripstoneLava arm
71 DripParticle.DripstoneWaterFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingDripstoneWater arm
72 DripParticle.DripstoneWaterHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingDripstoneWater arm
73 DripParticle.FallAndLandParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallAndLand stage: removed on the ground, spawns the land particle
74 DripParticle.HoneyFallAndLandParticle.postMoveUpdate port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallAndLand for FallingHoney: beehive drip sound
75 DripParticle.LavaFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingLava arm
76 DripParticle.LavaHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingLava arm
77 DripParticle.LavaLandProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make LandingLava arm
78 DripParticle.ObsidianTearFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingObsidianTear arm
79 DripParticle.ObsidianTearHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingObsidianTear arm
80 DripParticle.ObsidianTearLandProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make LandingObsidianTear arm
81 DripParticle.SporeBlossomFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingSporeBlossom arm
82 DripParticle.WaterFallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make FallingWater arm
83 DripParticle.WaterHangProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DrippingWater arm
84 DustColorTransitionParticle.randomizeColor port crates/horizon-client/src/particles.rs::ParticleEngine::make DustColorTransition arm: the randomize closure for from and to colours
85 DustColorTransitionParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DustColorTransition arm
86 DustParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Dust arm
87 DustParticleBase.randomizeColor port crates/horizon-client/src/particles.rs::ParticleEngine::make Dust and DustColorTransition arms: the randomize closure
88 DustParticleBase.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
89 DustPlumeParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make DustPlume arm, base 1.0
90 ElderGuardianParticleGroup.extractRenderState port crates/horizon-client/src/game/mob_blocks.rs::Game::elder_apparition_geometry gap: minor: one apparition timer that a new curse resets, so two curses show one ghost
91 ElderGuardianParticleGroup.ElderGuardianParticleRenderState.fromParticle port crates/horizon-client/src/game/mob_blocks.rs::Game::elder_apparition_geometry fade, camera pose and offsets
92 ElderGuardianParticleGroup.State.submit port crates/horizon-client/src/game/mob_blocks.rs::Game::elder_apparition_geometry draws the guardian model
93 EmissiveRisingParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords Block15 for sculk soul only (the SculkSoul arm)
94 EmissiveRisingParticle.EmissiveProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SculkSoul arm of the Soul arms
95 EmissiveRisingParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Soul arm
96 EndRodParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move: moves the box without collision
97 EndRodParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make EndRod arm
98 ExplodeParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Poof and Spit arms: puff motion, size and lifetime
99 ExplodeParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Poof arm
100 FallingDustParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
101 FallingDustParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FallingDust arm: roll and gravity clamp
102 FallingDustParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: the invisible-block skip and the tint lookup happen in animate_tick (Animate::Falling), not here
103 FallingLeavesParticle.CherryProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make CherryLeaves arm
104 FallingLeavesParticle.PaleOakProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make PaleOakLeaves arm
105 FallingLeavesParticle.PoplarProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make RedPoplarLeaves, OrangePoplarLeaves and YellowPoplarLeaves arms
106 FallingLeavesParticle.TintedLeavesProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make TintedLeaves arm with the option colour
107 FallingParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Leaves arm: size, gravity, start velocity, flow and swirl
108 FallingParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Leaves arm: wind, spin and removal on the ground
109 FireflyParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Firefly arm: removed in a solid block, fade, random drift
110 FireflyParticle.FireflyProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Firefly arm
111 FireworkParticles.FlashProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Flash arm
112 FireworkParticles.SparkProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Firework arm, alpha 0.99
113 FireworkParticles.Starter.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_starters launch sound, a burst every 2 ticks, flash, twinkle sound at the end
114 FireworkParticles.Starter.isFarAwayFromCamera inline crates/horizon-client/src/particles.rs::ParticleEngine::fireworks gap: minor: the distance is taken when the rocket is launched, not on each tick
115 FireworkParticles.Starter.createParticleBall port crates/horizon-client/src/particles.rs::ParticleEngine::spark_ball
116 FireworkParticles.Starter.createParticleShape port crates/horizon-client/src/particles.rs::ParticleEngine::spark_shape
117 FireworkParticles.Starter.createParticleBurst inline crates/horizon-client/src/particles.rs::ParticleEngine::tick_starters Burst shape arm of tick_starters
118 FlameParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move: moves the box without collision
119 FlameParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Flame size curve
120 FlameParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords AgeEmission light
121 FlameParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Flame arm (also copper and soul fire flame)
122 FlameParticle.SmallFlameProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SmallFlame arm, scaled 0.5
123 FlyStraightTowardsParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FlyStraight arm: position and colour lerp
124 FlyStraightTowardsParticle.OminousSpawnProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make OminousSpawning arm
125 FlyTowardsPositionParticle.<init> port crates/horizon-client/src/particles.rs::ParticleEngine::make Enchant, Nautilus and VaultConnection arms
126 FlyTowardsPositionParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move: moves the box without collision
127 FlyTowardsPositionParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords AgeEmission4 for enchant and nautilus; Block15 for vault connection
128 FlyTowardsPositionParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle FlyTowards arm
129 FlyTowardsPositionParticle.extract port crates/horizon-client/src/particles.rs::ParticleEngine::render alpha from the lifetime curve at draw time
130 FlyTowardsPositionParticle.EnchantProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Enchant arm
131 FlyTowardsPositionParticle.NautilusProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Nautilus arm
132 FlyTowardsPositionParticle.VaultConnectionProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make VaultConnection arm: block light, lifetime alpha, scale 1.5
133 GeyserBaseParticle.Provider.createParticle missing player: sulfur geysers do not erupt here: no water column, base puff or eruption sound (only the potent sulfur block state exists), and the geyser particle types are not in ParticleType
134 GeyserEruptionParticle.tick missing player: the water column of a geyser eruption is not drawn; no geyser particle types exist here
135 GeyserEruptionParticle.Provider.createParticle missing player: no geyser eruption particle is made
136 GeyserPlumeParticle.<init> missing player: no water plume is made when a sulfur geyser erupts
137 GeyserPlumeParticle.tick missing player: the plume does not rise, spray or fall back
138 GeyserPlumeParticle.Provider.createParticle missing player: no water plume is made when a sulfur geyser erupts
139 GlowParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords AgeEmission light (glow, wax, electric spark)
140 GlowParticle.ElectricSparkProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make ElectricSpark arm
141 GlowParticle.GlowSquidProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Glow arm
142 GlowParticle.WaxOffProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make WaxOff arm
143 GlowParticle.WaxOnProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make WaxOn arm
144 GustParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle HugeExplosion behaviour: age, then sprite from age
145 GustParticle.SmallProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make SmallGust arm, scaled 0.15
146 GustSeedParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle GustSeed arm: a gust every tick or two, then removal
147 GustSeedParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make GustEmitterLarge and GustEmitterSmall arms: scale, lifetime, delay
148 HeartParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size GrowIn size curve
149 HeartParticle.AngryVillagerProvider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make AngryVillager arm, raised 0.5; the default colour is already white
150 HeartParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make Heart arm
+149
View File
@@ -0,0 +1,149 @@
HugeExplosionParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::HugeExplosion: age, sprite from age, removed at lifetime
HugeExplosionParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Explosion arm (SonicBoom shares it): quad size from xAux, full bright
HugeExplosionSeedParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::ExplosionSeed: six EXPLOSION particles per tick, removed at lifetime
ItemPickupParticle.tick port crates/horizon-client/src/game/pickups.rs::Game::tick_pickups life to LIFE_TIME (3) then removed; follows the collector
ItemPickupParticle.saveOldPosition inline crates/horizon-client/src/game/pickups.rs::Game::tick_pickups target_old = target, done inside tick_pickups
ItemPickupParticleGroup.extractRenderState port crates/horizon-client/src/game/pickups.rs::position gap: minor: returns the flight positions only; each kind is drawn by dropped_item_geometry (item), entity_geometry (orb) and mob_geometry (arrow)
ItemPickupParticleGroup.State.submit port crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry gap: minor: draws the item kind only; orb and arrow pickups are drawn in entity_geometry and mob_geometry
LargeSmokeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke arm, LargeSmoke branch (scale 2.5)
LavaParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::Lava: size * (1 - t^2)
LavaParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Lava: smoke puffs while the random draw beats age/lifetime
LavaParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Lava arm: gravity 0.75, friction 0.999, lifetime 16 / (rand*0.8+0.2)
NoteParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Note arm: colour from the pitch, friction 0.66, lifetime 6, size x1.5
NoteParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::GrowIn over 32 ticks
NoteParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Note arm
NoxiousGasCloudParticle.tick missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
NoxiousGasCloudParticle.pickRandomParticleSpawnPoint missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
NoxiousGasCloudParticle.spawnNoxiousGasParticle missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
NoxiousGasParticle.tick missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears; the fade-out is missing with it
NoxiousGasParticle.Provider.createParticle missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
Particle.<init> port crates/horizon-client/src/particles.rs::Particle::base_at 4-arg constructor (box and lifetime draw); the 7-arg one is Particle::base_moving
Particle.toString skip:debug
Particle.setLocationFromBoundingbox port crates/horizon-client/src/particles.rs::Particle::set_location_from_bb
Particle.LifetimeAlpha.isOpaque inline crates/horizon-client-core/src/particle_type.rs::ParticleType::translucent_layer the layer is a fixed per-type table; VaultConnection is the non-opaque case
ParticleDescription.fromJson port crates/horizon-client/src/particles.rs::ParticleEngine::load_sprites reads the textures list from particles/*.json
ParticleEngine.makeParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: VibrationSignal options return None here; ParticleEngine::vibration creates them
ParticleEngine.createParticleGroup skip:other no render-type groups: ParticleEngine::render draws every particle in one pass, and the ITEM_PICKUP group is tick_pickups
ParticleEngine.countParticles skip:debug
ParticleEngine.hasSpaceInParticleLimit missing minor: no per-type particle cap; vanilla limits live SPORE_BLOSSOM air particles to 1000
ParticleEngine.clearParticles port crates/horizon-client/src/particles.rs::ParticleEngine::clear clears emitters, live and pending particles; no limit counts to clear
ParticleGroup.tickParticles port crates/horizon-client/src/particles.rs::ParticleEngine::tick ticks live particles and drops the removed ones
ParticleGroup.tickParticle skip:debug crash-report wrapper around particle.tick
ParticleResources.register skip:data provider table; Horizon matches particle types inside ParticleEngine::make
ParticleResources.reload port crates/horizon-client/src/particles.rs::ParticleEngine::reload gap: minor: vanilla clears live particles on a resource reload; this keeps them
ParticleResources.loadParticleDescription port crates/horizon-client/src/particles.rs::ParticleEngine::load_sprites
ParticleResources.MutableSpriteSet.get skip:other index form of SpriteSet.get: no vanilla caller; Horizon picks a random set sprite (sprite_from_set)
PlayerCloudParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Cloud arm: friction 0.96, lifetime from the random draw x2.5, GrowIn
PlayerCloudParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::GrowIn
PlayerCloudParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Cloud: sinks to the local player's feet within 2 blocks
PlayerCloudParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Cloud arm
PlayerCloudParticle.SneezeProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Sneeze arm: tint 0.22/1.0/0.53, alpha 0.4
PortalParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move path: moves the box without block collision
PortalParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::Portal
PortalParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords Light::AgeEmission4: block light plus age^4 emission
PortalParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Portal: eases from the start point along the velocity
PortalParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Portal arm
QuadParticleGroup.extractRenderState port crates/horizon-client/src/particles.rs::ParticleEngine::render gap: minor: no frustum point test; every live particle is drawn
ReversePortalParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::ReversePortal
ReversePortalParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::ReversePortal
ReversePortalParticle.ReversePortalProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make ReversePortal branch of the Portal arm
RisingParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make rising arm (Soul, SculkSoul, flames): velocity scaled by 0.01, position jitter 0.05
SculkChargeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SculkCharge arm: roll from the option, lifetime nextInt(12)+8
SculkChargePopParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SculkChargePop arm: lifetime nextInt(4)+6
ShriekParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Shriek: waits delay ticks, then base tick
ShriekParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Shriek arm: size 0.85, lifetime 30, delay from the option
SimpleAnimatedParticle.setFadeColor inline crates/horizon-client/src/particles.rs::ParticleEngine::make EndRod arm: fade colour 0xF2DEC9; applied by Behaviour::SimpleAnimated
SimpleVerticalParticle.PauseMobGrowthProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make PauseMobGrowth arm
SimpleVerticalParticle.ResetMobGrowthProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make ResetMobGrowth arm
SingleQuadParticle.extract port crates/horizon-client/src/particles.rs::ParticleEngine::render roll lerp and camera-facing rotation per particle
SingleQuadParticle.extractRotatedQuad port crates/horizon-client/src/particles.rs::ParticleEngine::render quad centre from the lerped position minus the camera
SingleQuadParticle.toString skip:debug
SingleQuadParticle.Layer.bySprite port crates/horizon-client/src/particles.rs::ParticleEngine::reload gap: minor: one translucent flag per sprite from the atlas; vanilla also splits block and item atlases (TRANSLUCENT_TERRAIN, TRANSLUCENT_ITEMS)
SmokeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke arm, Smoke branch (scale 1.0)
SnowflakeParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Poof/Snowflake/Spit arm, Snowflake branch: gravity 0.225, friction 1.0
SnowflakeParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Snowflake: base tick, sprite from age, drag 0.95/0.9/0.95
SnowflakeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Snowflake branch: colour 0.923/0.964/0.999
SonicBoomParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Explosion|SonicBoom arm, SonicBoom branch: lifetime 16, size 1.5
SpellParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle gap: player: the spyglass check is missing: while scoping in first person, vanilla makes spell particles within 3 blocks of the eye fully transparent; Horizon only lerps alpha
SpellParticle.isCloseToScopingPlayer missing player: spell particles near the eye stay visible while the player looks through a spyglass in first person; vanilla hides them
SpellParticle.InstantProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Effect|InstantEffect arm: colour and power from the option
SpellParticle.MobEffectProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make EntityEffect arm: colour and alpha from the option
SpellParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make uncoloured spell arm (Infested, TrialOmen, RaidOmen)
SpellParticle.WitchProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Witch arm: purple brightness from the engine random
SpitParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Poof/Snowflake/Spit arm, Spit branch: gravity 0.5, Animated
SplashParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Rain|Splash arm, Splash branch: gravity 0.04
SquidInkParticle.GlowInkProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make GlowSquidInk arm: colour (0.2, 0.8, 0.6)
SquidInkParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SquidInk arm: black
SulfurBubbleParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::SulfurBubble: still-water check, bounds, growth
SulfurBubbleParticle.randomHorizontalWiggling inline crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle SulfurBubble arm, the wiggle closure applied to x and z
SulfurBubbleParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SulfurBubbles arm
SuspendedParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Underwater/CrimsonSpore/WarpedSpore/SporeBlossomAir arm: spawned 0.125 below the point
SuspendedParticle.CrimsonSporeProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make CrimsonSpore arm: gaussian drift, colour 0.9/0.4/0.5
SuspendedParticle.SporeBlossomAirProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: SporeBlossomAir arm; the SPORE_BLOSSOM particle limit (1000) is not applied
SuspendedParticle.UnderwaterProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Underwater arm: colour 0.4/0.4/0.7
SuspendedParticle.WarpedSporeProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make WarpedSpore arm: colour 0.1/0.1/0.3, size 0.001
SuspendedTownParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move path: moves the box without block collision
SuspendedTownParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::SuspendedTown: lifetime countdown, drift, 0.99 damping
SuspendedTownParticle.ComposterFillProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Composter arm: white, lifetime 3 + nextInt(5)
SuspendedTownParticle.DolphinSpeedProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Dolphin arm: blue, alpha from the engine random, half lifetime
SuspendedTownParticle.EggCrackProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make EggCrack arm: white
SuspendedTownParticle.HappyVillagerProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make HappyVillager arm: white
SuspendedTownParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make plain arm (Mycelium): no colour change
TerrainParticle.<init> port crates/horizon-client/src/particles.rs::Particle::terrain crumb from a quarter of the block sprite, tinted, half size, mirrored UV
TerrainParticle.createTerrainParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: the air, moving-piston and noTerrainParticles checks are not in this arm; the callers' gating was not checked
TerrainParticle.CrumblingProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make BlockCrumble arm: zero speed, lifetime nextInt(10)+1
TerrainParticle.DustPillarProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make DustPillar arm: gaussian speed, lifetime nextInt(20)+20
TotemParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make TotemOfUndying arm
TrackingEmitter.tick port crates/horizon-client/src/particles.rs::ParticleEngine::emit 16 tries per tick; the countdown and removal are in ParticleEngine::tick
TrailParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Trail: eases towards the target over its lifetime
TrailParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Trail arm: target, colour jitter, duration
TrialSpawnerDetectionParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make TrialSpawnerDetection arm: gravity -0.1, Block15 light, GrowIn
TrialSpawnerDetectionParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::GrowIn
TrialSpawnerDetectionParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make TrialSpawnerDetection arm with scale 1.5
VibrationSignalParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::vibration flies to the listener in the arrival ticks
WakeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Fishing arm (WakeParticle)
WaterCurrentDownParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::CurrentDown: steers by angle, ends off water or on ground
WaterCurrentDownParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make CurrentDown arm
WaterDropParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::WaterDrop: gravity, drag, ends on ground or in fluid
WaterDropParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Rain arm
WhiteAshParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make WhiteAsh branch of the Smoke arm; the provider's motion is drawn from the engine random
WhiteSmokeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke arm, WhiteSmoke branch (scale 1.0)
ClientPackSource.findExplodedAssetPacks skip:other IDE-only: looks for a resourcepacks folder next to the asset dir in development runs
ClientPackSource.createVanillaPackSource skip:data pack source assembly; Horizon reads its assets from folders directly
ClientPackSource.getPackTitle skip:data pack display names
ClientPackSource.populatePackList skip:data pack discovery
DefaultPlayerSkin.create port crates/horizon-client/src/tab_list.rs::default_skin gap: minor: returns the texture path (the model is in the path); no PlayerSkin record
DryFoliageColorReloadListener.prepare port crates/horizon-client/src/biome.rs::colormap PNG decode of colormap/dry_foliage; the caller loads the three colormaps
FoliageColorReloadListener.prepare port crates/horizon-client/src/biome.rs::colormap PNG decode of colormap/foliage
GrassColorReloadListener.prepare port crates/horizon-client/src/biome.rs::colormap PNG decode of colormap/grass
IndexedAssetSource.createIndexFs skip:data legacy objects/ asset index; Horizon reads assets/ folders directly
LegacyStuffWrapper.getPixels port crates/horizon-client/src/hud.rs::decode gap: minor: PNG decode to bytes; vanilla returns ARGB ints
MapTextureManager.resetData skip:other frees GPU map textures on close; Horizon keeps its map atlas slots in Game::maps, no gameplay effect
MapTextureManager.getOrCreateMapInstance port crates/horizon-client/src/game/maps.rs::Game::map_texture gives the map its atlas slot, allocated on first use
MapTextureManager.MapInstance.replaceMapData port crates/horizon-client/src/game/maps.rs::MapData::update_color gap: minor: vanilla also flags an upload when the saved-data object is swapped; Horizon flags per changed colour
MapTextureManager.MapInstance.updateTextureIfNeeded port crates/horizon-client/src/game/maps.rs::Game::map_texture uploads the 128x128 colours when dirty
SkinManager.get port crates/horizon-client/src/skins.rs::lookup gap: minor: the packed textures come from ResolvedProfile::textures; the debug default-skin override is not ported
SkinManager.registerTextures port crates/horizon-client/src/skins.rs::lookup gap: minor: returns the skin location only; cape and elytra are downloaded here but not returned
SkinManager.TextureCache.getOrLoad port crates/horizon-client/src/skins.rs::Downloader::state one download per URL, then its state
SkinManager.TextureCache.getTextureLocation port crates/horizon-client/src/skins.rs::skin_location gap: minor: only the skins/ location; capes and elytra have no location fn
SplashManager.getSplash port crates/horizon-client/src/title.rs::choose_splash gap: player: no '<NAME> IS YOU' splash; vanilla sometimes shows the logged-in player's name instead of a splash on the title screen
WaypointStyle.validate port crates/horizon-client/src/locator_bar.rs::WaypointStyle::parse validation is folded into the parse
WaypointStyleManager.apply port crates/horizon-client/src/locator_bar.rs::WaypointStyles::load gap: minor: loads the arrow and dot sprites from the assets folder into one map
ClientLanguage.appendFrom port crates/horizon-client-core/src/lang.rs::Language::load layers the translation JSON from the sources
LanguageManager.extractLanguages port crates/horizon-client-core/src/lang.rs::available lists the languages the packs declare
LanguageManager.onResourceManagerReload port crates/horizon-client/src/game/options.rs::Game::load_language gap: minor: no error screen when the translations are empty or missing
AnimationMetadataSection.calculateFrameSize port crates/horizon-assets/src/animation.rs::AnimationMetadata::frame_size
GuiSpriteScaling.NineSlice.validate missing minor: Horizon accepts nine-slice metadata whose borders cover the whole sprite (parse_nine_slice has no check)
GuiSpriteScaling.NineSlice.Border.unpackValue skip:java codec helper that collapses a uniform border to one number; Horizon stores four values
BlockStateDefinitions.createItemFrameFakeState skip:data block state definition for the map property; Horizon chooses the frame model by flags
BlockStateDefinitions.getItemFrameFakeState port crates/horizon-client/src/game/frames.rs::Game::frame_geometry gap: minor: picks the glow and map frame model by flags; no block state
BlockStateDefinitions.definitionLocationToBlockStateMapper skip:data registry lookup of block state definitions
BlockStateModelLoader.loadBlockStates skip:data blockstate JSON loading; Horizon's block models come from its data tables
BlockStateModelLoader.loadBlockStateDefinitionStack skip:data blockstate JSON stacking
ClientItemInfoLoader.scheduleLoad skip:data item model JSON loading
EquipmentAssetManager.apply skip:data equipment asset table reload
EquipmentClientInfo.Builder.addHumanoidLayers skip:java builder
EquipmentClientInfo.Builder.addMainHumanoidLayer skip:java builder
EquipmentClientInfo.Builder.addLayers skip:java builder
EquipmentClientInfo.Builder.replaceTrimPalette skip:java builder
EquipmentClientInfo.Builder.build skip:java builder
1 HugeExplosionParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::HugeExplosion: age, sprite from age, removed at lifetime
2 HugeExplosionParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Explosion arm (SonicBoom shares it): quad size from xAux, full bright
3 HugeExplosionSeedParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::ExplosionSeed: six EXPLOSION particles per tick, removed at lifetime
4 ItemPickupParticle.tick port crates/horizon-client/src/game/pickups.rs::Game::tick_pickups life to LIFE_TIME (3) then removed; follows the collector
5 ItemPickupParticle.saveOldPosition inline crates/horizon-client/src/game/pickups.rs::Game::tick_pickups target_old = target, done inside tick_pickups
6 ItemPickupParticleGroup.extractRenderState port crates/horizon-client/src/game/pickups.rs::position gap: minor: returns the flight positions only; each kind is drawn by dropped_item_geometry (item), entity_geometry (orb) and mob_geometry (arrow)
7 ItemPickupParticleGroup.State.submit port crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry gap: minor: draws the item kind only; orb and arrow pickups are drawn in entity_geometry and mob_geometry
8 LargeSmokeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke arm, LargeSmoke branch (scale 2.5)
9 LavaParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::Lava: size * (1 - t^2)
10 LavaParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Lava: smoke puffs while the random draw beats age/lifetime
11 LavaParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Lava arm: gravity 0.75, friction 0.999, lifetime 16 / (rand*0.8+0.2)
12 NoteParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Note arm: colour from the pitch, friction 0.66, lifetime 6, size x1.5
13 NoteParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::GrowIn over 32 ticks
14 NoteParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Note arm
15 NoxiousGasCloudParticle.tick missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
16 NoxiousGasCloudParticle.pickRandomParticleSpawnPoint missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
17 NoxiousGasCloudParticle.spawnNoxiousGasParticle missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
18 NoxiousGasParticle.tick missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears; the fade-out is missing with it
19 NoxiousGasParticle.Provider.createParticle missing player: potent sulfur in vanilla 26.3 gives off drifting noxious gas clouds; Horizon has no noxious_gas particle type and no PotentSulfurBlockEntity client code, so no cloud appears
20 Particle.<init> port crates/horizon-client/src/particles.rs::Particle::base_at 4-arg constructor (box and lifetime draw); the 7-arg one is Particle::base_moving
21 Particle.toString skip:debug
22 Particle.setLocationFromBoundingbox port crates/horizon-client/src/particles.rs::Particle::set_location_from_bb
23 Particle.LifetimeAlpha.isOpaque inline crates/horizon-client-core/src/particle_type.rs::ParticleType::translucent_layer the layer is a fixed per-type table; VaultConnection is the non-opaque case
24 ParticleDescription.fromJson port crates/horizon-client/src/particles.rs::ParticleEngine::load_sprites reads the textures list from particles/*.json
25 ParticleEngine.makeParticle port crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: VibrationSignal options return None here; ParticleEngine::vibration creates them
26 ParticleEngine.createParticleGroup skip:other no render-type groups: ParticleEngine::render draws every particle in one pass, and the ITEM_PICKUP group is tick_pickups
27 ParticleEngine.countParticles skip:debug
28 ParticleEngine.hasSpaceInParticleLimit missing minor: no per-type particle cap; vanilla limits live SPORE_BLOSSOM air particles to 1000
29 ParticleEngine.clearParticles port crates/horizon-client/src/particles.rs::ParticleEngine::clear clears emitters, live and pending particles; no limit counts to clear
30 ParticleGroup.tickParticles port crates/horizon-client/src/particles.rs::ParticleEngine::tick ticks live particles and drops the removed ones
31 ParticleGroup.tickParticle skip:debug crash-report wrapper around particle.tick
32 ParticleResources.register skip:data provider table; Horizon matches particle types inside ParticleEngine::make
33 ParticleResources.reload port crates/horizon-client/src/particles.rs::ParticleEngine::reload gap: minor: vanilla clears live particles on a resource reload; this keeps them
34 ParticleResources.loadParticleDescription port crates/horizon-client/src/particles.rs::ParticleEngine::load_sprites
35 ParticleResources.MutableSpriteSet.get skip:other index form of SpriteSet.get: no vanilla caller; Horizon picks a random set sprite (sprite_from_set)
36 PlayerCloudParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Cloud arm: friction 0.96, lifetime from the random draw x2.5, GrowIn
37 PlayerCloudParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::GrowIn
38 PlayerCloudParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Cloud: sinks to the local player's feet within 2 blocks
39 PlayerCloudParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Cloud arm
40 PlayerCloudParticle.SneezeProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Sneeze arm: tint 0.22/1.0/0.53, alpha 0.4
41 PortalParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move path: moves the box without block collision
42 PortalParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::Portal
43 PortalParticle.getLightCoords port crates/horizon-client/src/particles.rs::Particle::light_coords Light::AgeEmission4: block light plus age^4 emission
44 PortalParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Portal: eases from the start point along the velocity
45 PortalParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Portal arm
46 QuadParticleGroup.extractRenderState port crates/horizon-client/src/particles.rs::ParticleEngine::render gap: minor: no frustum point test; every live particle is drawn
47 ReversePortalParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::ReversePortal
48 ReversePortalParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::ReversePortal
49 ReversePortalParticle.ReversePortalProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make ReversePortal branch of the Portal arm
50 RisingParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make rising arm (Soul, SculkSoul, flames): velocity scaled by 0.01, position jitter 0.05
51 SculkChargeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SculkCharge arm: roll from the option, lifetime nextInt(12)+8
52 SculkChargePopParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SculkChargePop arm: lifetime nextInt(4)+6
53 ShriekParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Shriek: waits delay ticks, then base tick
54 ShriekParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Shriek arm: size 0.85, lifetime 30, delay from the option
55 SimpleAnimatedParticle.setFadeColor inline crates/horizon-client/src/particles.rs::ParticleEngine::make EndRod arm: fade colour 0xF2DEC9; applied by Behaviour::SimpleAnimated
56 SimpleVerticalParticle.PauseMobGrowthProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make PauseMobGrowth arm
57 SimpleVerticalParticle.ResetMobGrowthProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make ResetMobGrowth arm
58 SingleQuadParticle.extract port crates/horizon-client/src/particles.rs::ParticleEngine::render roll lerp and camera-facing rotation per particle
59 SingleQuadParticle.extractRotatedQuad port crates/horizon-client/src/particles.rs::ParticleEngine::render quad centre from the lerped position minus the camera
60 SingleQuadParticle.toString skip:debug
61 SingleQuadParticle.Layer.bySprite port crates/horizon-client/src/particles.rs::ParticleEngine::reload gap: minor: one translucent flag per sprite from the atlas; vanilla also splits block and item atlases (TRANSLUCENT_TERRAIN, TRANSLUCENT_ITEMS)
62 SmokeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke arm, Smoke branch (scale 1.0)
63 SnowflakeParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Poof/Snowflake/Spit arm, Snowflake branch: gravity 0.225, friction 1.0
64 SnowflakeParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Snowflake: base tick, sprite from age, drag 0.95/0.9/0.95
65 SnowflakeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Snowflake branch: colour 0.923/0.964/0.999
66 SonicBoomParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Explosion|SonicBoom arm, SonicBoom branch: lifetime 16, size 1.5
67 SpellParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle gap: player: the spyglass check is missing: while scoping in first person, vanilla makes spell particles within 3 blocks of the eye fully transparent; Horizon only lerps alpha
68 SpellParticle.isCloseToScopingPlayer missing player: spell particles near the eye stay visible while the player looks through a spyglass in first person; vanilla hides them
69 SpellParticle.InstantProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Effect|InstantEffect arm: colour and power from the option
70 SpellParticle.MobEffectProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make EntityEffect arm: colour and alpha from the option
71 SpellParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make uncoloured spell arm (Infested, TrialOmen, RaidOmen)
72 SpellParticle.WitchProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Witch arm: purple brightness from the engine random
73 SpitParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Poof/Snowflake/Spit arm, Spit branch: gravity 0.5, Animated
74 SplashParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Rain|Splash arm, Splash branch: gravity 0.04
75 SquidInkParticle.GlowInkProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make GlowSquidInk arm: colour (0.2, 0.8, 0.6)
76 SquidInkParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SquidInk arm: black
77 SulfurBubbleParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::SulfurBubble: still-water check, bounds, growth
78 SulfurBubbleParticle.randomHorizontalWiggling inline crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle SulfurBubble arm, the wiggle closure applied to x and z
79 SulfurBubbleParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make SulfurBubbles arm
80 SuspendedParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make Underwater/CrimsonSpore/WarpedSpore/SporeBlossomAir arm: spawned 0.125 below the point
81 SuspendedParticle.CrimsonSporeProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make CrimsonSpore arm: gaussian drift, colour 0.9/0.4/0.5
82 SuspendedParticle.SporeBlossomAirProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: SporeBlossomAir arm; the SPORE_BLOSSOM particle limit (1000) is not applied
83 SuspendedParticle.UnderwaterProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Underwater arm: colour 0.4/0.4/0.7
84 SuspendedParticle.WarpedSporeProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make WarpedSpore arm: colour 0.1/0.1/0.3, size 0.001
85 SuspendedTownParticle.move port crates/horizon-client/src/particles.rs::Particle::move_by free_move path: moves the box without block collision
86 SuspendedTownParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::SuspendedTown: lifetime countdown, drift, 0.99 damping
87 SuspendedTownParticle.ComposterFillProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Composter arm: white, lifetime 3 + nextInt(5)
88 SuspendedTownParticle.DolphinSpeedProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Dolphin arm: blue, alpha from the engine random, half lifetime
89 SuspendedTownParticle.EggCrackProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make EggCrack arm: white
90 SuspendedTownParticle.HappyVillagerProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make HappyVillager arm: white
91 SuspendedTownParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make plain arm (Mycelium): no colour change
92 TerrainParticle.<init> port crates/horizon-client/src/particles.rs::Particle::terrain crumb from a quarter of the block sprite, tinted, half size, mirrored UV
93 TerrainParticle.createTerrainParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make gap: minor: the air, moving-piston and noTerrainParticles checks are not in this arm; the callers' gating was not checked
94 TerrainParticle.CrumblingProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make BlockCrumble arm: zero speed, lifetime nextInt(10)+1
95 TerrainParticle.DustPillarProvider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make DustPillar arm: gaussian speed, lifetime nextInt(20)+20
96 TotemParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make TotemOfUndying arm
97 TrackingEmitter.tick port crates/horizon-client/src/particles.rs::ParticleEngine::emit 16 tries per tick; the countdown and removal are in ParticleEngine::tick
98 TrailParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::Trail: eases towards the target over its lifetime
99 TrailParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Trail arm: target, colour jitter, duration
100 TrialSpawnerDetectionParticle.<init> inline crates/horizon-client/src/particles.rs::ParticleEngine::make TrialSpawnerDetection arm: gravity -0.1, Block15 light, GrowIn
101 TrialSpawnerDetectionParticle.getQuadSize port crates/horizon-client/src/particles.rs::Particle::quad_size Size::GrowIn
102 TrialSpawnerDetectionParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make TrialSpawnerDetection arm with scale 1.5
103 VibrationSignalParticle.Provider.createParticle port crates/horizon-client/src/particles.rs::ParticleEngine::vibration flies to the listener in the arrival ticks
104 WakeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Fishing arm (WakeParticle)
105 WaterCurrentDownParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::CurrentDown: steers by angle, ends off water or on ground
106 WaterCurrentDownParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make CurrentDown arm
107 WaterDropParticle.tick port crates/horizon-client/src/particles.rs::ParticleEngine::tick_particle Behaviour::WaterDrop: gravity, drag, ends on ground or in fluid
108 WaterDropParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Rain arm
109 WhiteAshParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make WhiteAsh branch of the Smoke arm; the provider's motion is drawn from the engine random
110 WhiteSmokeParticle.Provider.createParticle inline crates/horizon-client/src/particles.rs::ParticleEngine::make Smoke arm, WhiteSmoke branch (scale 1.0)
111 ClientPackSource.findExplodedAssetPacks skip:other IDE-only: looks for a resourcepacks folder next to the asset dir in development runs
112 ClientPackSource.createVanillaPackSource skip:data pack source assembly; Horizon reads its assets from folders directly
113 ClientPackSource.getPackTitle skip:data pack display names
114 ClientPackSource.populatePackList skip:data pack discovery
115 DefaultPlayerSkin.create port crates/horizon-client/src/tab_list.rs::default_skin gap: minor: returns the texture path (the model is in the path); no PlayerSkin record
116 DryFoliageColorReloadListener.prepare port crates/horizon-client/src/biome.rs::colormap PNG decode of colormap/dry_foliage; the caller loads the three colormaps
117 FoliageColorReloadListener.prepare port crates/horizon-client/src/biome.rs::colormap PNG decode of colormap/foliage
118 GrassColorReloadListener.prepare port crates/horizon-client/src/biome.rs::colormap PNG decode of colormap/grass
119 IndexedAssetSource.createIndexFs skip:data legacy objects/ asset index; Horizon reads assets/ folders directly
120 LegacyStuffWrapper.getPixels port crates/horizon-client/src/hud.rs::decode gap: minor: PNG decode to bytes; vanilla returns ARGB ints
121 MapTextureManager.resetData skip:other frees GPU map textures on close; Horizon keeps its map atlas slots in Game::maps, no gameplay effect
122 MapTextureManager.getOrCreateMapInstance port crates/horizon-client/src/game/maps.rs::Game::map_texture gives the map its atlas slot, allocated on first use
123 MapTextureManager.MapInstance.replaceMapData port crates/horizon-client/src/game/maps.rs::MapData::update_color gap: minor: vanilla also flags an upload when the saved-data object is swapped; Horizon flags per changed colour
124 MapTextureManager.MapInstance.updateTextureIfNeeded port crates/horizon-client/src/game/maps.rs::Game::map_texture uploads the 128x128 colours when dirty
125 SkinManager.get port crates/horizon-client/src/skins.rs::lookup gap: minor: the packed textures come from ResolvedProfile::textures; the debug default-skin override is not ported
126 SkinManager.registerTextures port crates/horizon-client/src/skins.rs::lookup gap: minor: returns the skin location only; cape and elytra are downloaded here but not returned
127 SkinManager.TextureCache.getOrLoad port crates/horizon-client/src/skins.rs::Downloader::state one download per URL, then its state
128 SkinManager.TextureCache.getTextureLocation port crates/horizon-client/src/skins.rs::skin_location gap: minor: only the skins/ location; capes and elytra have no location fn
129 SplashManager.getSplash port crates/horizon-client/src/title.rs::choose_splash gap: player: no '<NAME> IS YOU' splash; vanilla sometimes shows the logged-in player's name instead of a splash on the title screen
130 WaypointStyle.validate port crates/horizon-client/src/locator_bar.rs::WaypointStyle::parse validation is folded into the parse
131 WaypointStyleManager.apply port crates/horizon-client/src/locator_bar.rs::WaypointStyles::load gap: minor: loads the arrow and dot sprites from the assets folder into one map
132 ClientLanguage.appendFrom port crates/horizon-client-core/src/lang.rs::Language::load layers the translation JSON from the sources
133 LanguageManager.extractLanguages port crates/horizon-client-core/src/lang.rs::available lists the languages the packs declare
134 LanguageManager.onResourceManagerReload port crates/horizon-client/src/game/options.rs::Game::load_language gap: minor: no error screen when the translations are empty or missing
135 AnimationMetadataSection.calculateFrameSize port crates/horizon-assets/src/animation.rs::AnimationMetadata::frame_size
136 GuiSpriteScaling.NineSlice.validate missing minor: Horizon accepts nine-slice metadata whose borders cover the whole sprite (parse_nine_slice has no check)
137 GuiSpriteScaling.NineSlice.Border.unpackValue skip:java codec helper that collapses a uniform border to one number; Horizon stores four values
138 BlockStateDefinitions.createItemFrameFakeState skip:data block state definition for the map property; Horizon chooses the frame model by flags
139 BlockStateDefinitions.getItemFrameFakeState port crates/horizon-client/src/game/frames.rs::Game::frame_geometry gap: minor: picks the glow and map frame model by flags; no block state
140 BlockStateDefinitions.definitionLocationToBlockStateMapper skip:data registry lookup of block state definitions
141 BlockStateModelLoader.loadBlockStates skip:data blockstate JSON loading; Horizon's block models come from its data tables
142 BlockStateModelLoader.loadBlockStateDefinitionStack skip:data blockstate JSON stacking
143 ClientItemInfoLoader.scheduleLoad skip:data item model JSON loading
144 EquipmentAssetManager.apply skip:data equipment asset table reload
145 EquipmentClientInfo.Builder.addHumanoidLayers skip:java builder
146 EquipmentClientInfo.Builder.addMainHumanoidLayer skip:java builder
147 EquipmentClientInfo.Builder.addLayers skip:java builder
148 EquipmentClientInfo.Builder.replaceTrimPalette skip:java builder
149 EquipmentClientInfo.Builder.build skip:java builder
+149
View File
@@ -0,0 +1,149 @@
EquipmentClientInfo.Layer.leatherDyeable skip:data equipment asset factory; Horizon reads the equipment JSON in armor_stands.rs
EquipmentClientInfo.Layer.onlyIfDyed skip:data equipment asset factory; Horizon reads the equipment JSON in armor_stands.rs
EquipmentClientInfo.Layer.getTextureLocation port crates/horizon-client/src/game/armor_stands.rs::ArmorStandAssets::load builds entity/equipment/<kind>/<texture>; gap: minor: only humanoid, humanoid_leggings and wings are read here
EquipmentClientInfo.TrimOverride.validate skip:java codec validator; TrimOverride::list keeps an override with neither texture nor palette (minor)
EquipmentClientInfo.TrimPredicate.validate skip:java codec validator; TrimOverride::list keeps a predicate with neither material nor pattern (minor)
EquipmentClientInfo.TrimPredicate.matches port crates/horizon-client/src/trims.rs::TrimOverride::matches material and pattern id comparison
ModelBakery.bakeModels port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models bakes block states; gap: minor: items and standalone models bake in separate fns (item_bake.rs::bake_item_model)
ModelBakery.ModelBakerImpl.getModel port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve an unknown id falls back to the missing model
ModelDiscovery.createAndQueueWrapper inline crates/horizon-client/src/model_library.rs::ParsedModels::block_models parent queue; no wrapper object is kept
ModelDiscovery.addSpecialModel inline crates/horizon-assets/src/resolve.rs::ModelLibrary::with_shared_item_generator gap: minor: only builtin/generated is registered; a non-root special model is not rejected
ModelDiscovery.resolve port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve resolved per model id, not as a batch map
ModelDiscovery.discoverDependencies inline crates/horizon-client/src/model_library.rs::ParsedModels::block_models pushes each model's parent until the set is complete
ModelDiscovery.propagateValidity port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve a chain that reaches a cycle is an error when resolved
ModelDiscovery.ModelWrapper.updateSlot skip:java per-model result cache
ModelDiscovery.ModelWrapper.getSimpleProperty skip:java per-model result cache
ModelDiscovery.ModelWrapper.resolveParticleMaterial port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models block particle sprite; the item side is item_bake.rs::bake_item_model
ModelDiscovery.ModelWrapper.bakeDefaultState skip:java cache of the identity-rotation geometry
ModelDiscovery.ModelWrapper.bakeTopGeometry port crates/horizon-assets/src/bake.rs::bake_block_model bakes with the blockstate rotation; per-state cache skipped
ModelGroupCollector.build skip:java groups states for shared baked geometry; Horizon has no model-group ids
ModelGroupCollector.GroupKey.create skip:java group key of build
ModelGroupCollector.GroupKey.getColoringValues skip:java group key of build
ModelManager.reload port crates/horizon-client/src/assets.rs::RenderAssets::load one synchronous load: models, block states, item infos, then bake and store
ModelManager.loadBlockModels port crates/horizon-client/src/model_library.rs::ParsedModels::load every models/**.json by id, parsed in parallel
ModelManager.discoverModelDependencies port crates/horizon-client/src/model_library.rs::ParsedModels::block_models referenced models and their parents
ModelManager.loadModels port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models bakes block states and their models
ModelManager.createBlockStateToModelDispatch inline crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models missing model for a state without a baked model
ModelManager.buildModelGroups skip:java wrapper of ModelGroupCollector.build; render sharing only
ModelManager.apply inline crates/horizon-client/src/assets.rs::RenderAssets::load the baked result is stored in the returned struct
ModelManager.requiresRender skip:java render-skip optimisation for equal model groups; no visible effect
ResolvedModel.findTopTextureSlots port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve texture slots merged along the parent chain
ResolvedModel.findTopAmbientOcclusion port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve ambient occlusion from the first model that sets it, default true
ResolvedModel.findTopGuiLight port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve gui_light from the first model that sets it, default side
ResolvedModel.findTopGeometry port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve first element list up the parent chain
ResolvedModel.resolveParticleMaterial port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models block particle slot; the item side is item_bake.rs::bake_item_model
ResolvedModel.findTopTransform port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve display transform per context, inherited up the chain
ResolvedModel.findTopTransforms port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve display transforms for every context
SimpleModelWrapper.bake port crates/horizon-assets/src/bake.rs::bake_block_model gap: minor: no rejection of block models that use non-block sprites
SimpleModelWrapper.findNonBlockSprites missing minor: vanilla replaces a block model whose quads use sprites outside the block atlas; Horizon keeps every sprite
UnbakedModel.GuiLight.getByName port crates/horizon-assets/src/model.rs::CuboidModel::decode front and side only; other values are an error
CuboidFace.Deserializer.deserialize port crates/horizon-assets/src/model.rs::Face::decode texture, cullface, tintindex and rotation
CuboidFace.Deserializer.getUVs port crates/horizon-assets/src/model.rs::Face::decode uv as four numbers; absent uses default_uv in bake.rs
CuboidFace.UVs.getVertexU inline crates/horizon-assets/src/bake.rs::bake_face the U corner is picked in bake_face
CuboidFace.UVs.getVertexV inline crates/horizon-assets/src/bake.rs::bake_face the V corner is picked in bake_face
CuboidModel.Deserializer.deserialize port crates/horizon-assets/src/model.rs::CuboidModel::decode whole model JSON
CuboidModel.Deserializer.getTextureMap port crates/horizon-assets/src/model.rs::CuboidModel::decode each textures entry through texture()
CuboidModel.Deserializer.getAmbientOcclusion port crates/horizon-assets/src/model.rs::CuboidModel::decode ambientocclusion flag
CuboidModel.Deserializer.getElements port crates/horizon-assets/src/model.rs::CuboidModel::decode elements list with null entries
CuboidModelElement.Deserializer.deserialize port crates/horizon-assets/src/model.rs::Element::decode whole element JSON
CuboidModelElement.Deserializer.getShadeDirectionOverride port crates/horizon-assets/src/model.rs::Element::decode shade_direction_override
CuboidModelElement.Deserializer.getRotation port crates/horizon-assets/src/model.rs::ElementRotation::decode rotation object
CuboidModelElement.Deserializer.getAxis port crates/horizon-assets/src/model.rs::ElementRotation::decode axis x, y or z
CuboidModelElement.Deserializer.getFaces port crates/horizon-assets/src/model.rs::Element::decode faces object
CuboidModelElement.Deserializer.filterNullFromFaces inline crates/horizon-assets/src/model.rs::Element::decode null faces are kept as None through nullable()
CuboidModelElement.Deserializer.getFacing port crates/horizon-assets/src/model.rs::Element::decode face names through Direction::by_name
CuboidModelElement.Deserializer.getPosition port crates/horizon-assets/src/model.rs::Element::decode from and to, bounded to -16..32
CuboidModelElement.Deserializer.getVector3f port crates/horizon-assets/src/json.rs::vector three-number array
CuboidRotation.computeTransform port crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation rotation matrix, then rescale when set
CuboidRotation.computeRescale inline crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation per-axis rescale inside from_rotation
CuboidRotation.scaleFactorForAxis inline crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation per-axis factor inside from_rotation
CuboidRotation.EulerXYZRotation.transformation port crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation Euler XYZ branch
CuboidRotation.SingleAxisRotation.transformation port crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation single-axis branch
FaceBakery.defaultFaceUV port crates/horizon-assets/src/bake.rs::default_uv default face UVs by direction
FaceBakery.computeMaterialTransparency port crates/horizon-client/src/sprites.rs::Sprites::region_opaque gap: minor: only the opaque-region check; force_translucent is not applied here
FaceBakery.bakeVertex inline crates/horizon-assets/src/bake.rs::bake_face vertex position and UV inside bake_face
FaceBakery.rotateVertexBy inline crates/horizon-assets/src/bake.rs::bake_face element rotation about its origin
FaceBakery.calculateFacing port crates/horizon-assets/src/bake.rs::facing quad normal, then closest direction
FaceBakery.findClosestDirection port crates/horizon-assets/src/bake.rs::facing closest axis direction with a non-negative dot
FaceBakery.recalculateWinding inline crates/horizon-assets/src/bake.rs::bake_face corner reorder for unrotated elements
FaceBakery.findVertex inline crates/horizon-assets/src/bake.rs::bake_face search inside the winding reorder
FaceBakery.swap inline crates/horizon-assets/src/bake.rs::bake_face swap inside the winding reorder
ItemModelGenerator.bake port crates/horizon-assets/src/item_bake.rs::bake_item_model layer loop of generated item models
ItemModelGenerator.bakeSideFaces port crates/horizon-assets/src/item_bake.rs::extrude_layer side faces of one layer
ItemModelGenerator.getSideFaces inline crates/horizon-assets/src/item_bake.rs::extrude_layer edge collection inside extrude_layer
ItemModelGenerator.checkTransition inline crates/horizon-assets/src/item_bake.rs::extrude_layer transparent neighbour check inside extrude_layer
ItemModelGenerator.isTransparent port crates/horizon-assets/src/item_bake.rs::SpriteMask::transparent alpha mask lookup
ItemModelGenerator.ItemLayerKey.compute skip:java layer bake cache key; Horizon bakes each item model once
ItemTransform.Deserializer.deserialize port crates/horizon-assets/src/model.rs::ItemTransform::decode rotation, translation and scale
ItemTransform.Deserializer.getVector3f port crates/horizon-assets/src/json.rs::vector three-number array
ItemTransforms.Deserializer.deserialize port crates/horizon-assets/src/model.rs::ItemTransforms::decode display contexts
ItemTransforms.Deserializer.getTransform port crates/horizon-assets/src/item_bake.rs::BakedItemModel::transform transform for one display context
BakedQuad.position skip:java record accessor; ModelQuad.positions field
BakedQuad.packedUV skip:java record accessor; ModelQuad.uv field
BakedQuad.MaterialInfo.of port crates/horizon-client/src/item_render.rs::FileSprites::translucent gap: minor: picks solid or translucent only; no per-material render type or glint sheet
BakedQuad.MaterialInfo.flags skip:java translucent and animated bit flags used to skip work; Horizon ticks animated textures by its setting
ItemQuads.split port crates/horizon-client/src/item_render.rs::submit_quads quads with translucent sprites go to the translucent pass
QuadCollection.computeMaterialFlags skip:java flag bits of the quad list; see BakedQuad.MaterialInfo.flags
QuadCollection.getQuads port crates/horizon-client/src/mesher.rs::Mesher::mesh quads filtered by cull direction
QuadCollection.materialFlags skip:java cached flag bits
QuadCollection.Builder.addAll skip:java collection builder
QuadCollection.Builder.createFromSublists skip:java sublist layout of a quad collection
AtlasManager.getAtlasOrThrow skip:java atlas map lookup; Horizon keeps one sprite table
AtlasManager.forEach skip:java map iteration
AtlasManager.close skip:java GPU release; freed with its owner
AtlasManager.get port crates/horizon-client/src/sprites.rs::Sprites::insert sprite layer added on first use; missing texture when it fails to load
AtlasManager.prepareSharedState skip:java future-based stitch plumbing
AtlasManager.reload skip:java async reload; sprites load synchronously in RenderAssets::load
AtlasManager.updateSpriteMaps port crates/horizon-client/src/sprites.rs::Sprites::finish lays out every layer at one size; gap: minor: no duplicate-sprite warning
AtlasManager.AtlasEntry.scheduleLoad port crates/horizon-client/src/sprites.rs::Sprites::insert gap: minor: sprites load on demand, not per atlas source
AtlasManager.PendingStitch.joinAndUpload skip:java future join
AtlasManager.PendingStitchResults.joinAndUpload skip:java future join
MaterialBaker.get port crates/horizon-assets/src/item_bake.rs::bake_item_model sprite that is not known falls back to missingno
MaterialBaker.bake skip:java Material.Baked wrapper
MaterialBaker.bakeForAtlas skip:java Material.Baked wrapper for an atlas
MaterialBaker.resolveSlot port crates/horizon-assets/src/resolve.rs::ResolvedCuboidModel::material named texture slot lookup
MaterialBaker.logMissingTextures skip:debug log of missing texture slots only
TextureSlots.getMaterial port crates/horizon-assets/src/resolve.rs::ResolvedCuboidModel::material named texture slot lookup
TextureSlots.parseTextureMap port crates/horizon-assets/src/model.rs::CuboidModel::decode textures object
TextureSlots.parseEntry port crates/horizon-assets/src/model.rs::texture # reference or sprite material
TextureSlots.Data.Builder.addReference skip:java builder
TextureSlots.Data.Builder.addTexture skip:java builder
TextureSlots.Data.Builder.build skip:java builder
TextureSlots.Resolver.resolve port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve alias chain resolution; the batch hint (horizon-protocol resolver.rs) is a DNS resolver and is not this
resources/palette/Palette.listAndLoad port crates/horizon-client/src/trims.rs::TrimTexture::generate gap: minor: palettes load on demand, none listed up front
resources/palette/Palette.tryLoad port crates/horizon-client/src/trims.rs::TrimTexture::generate gap: minor: a broken palette skips the recolour instead of an empty palette
resources/palette/Palette.load port crates/horizon-client/src/trims.rs::TrimTexture::generate palette PNG read as ARGB
PaletteMapping.apply port crates/horizon-assets/src/palette.rs::apply_palette colour swap; alpha scaled by the target's alpha
PalettedTextureManager.loadBaseTexture port crates/horizon-client/src/trims.rs::TrimTexture::generate base texture and its base_palette from the mcmeta
PalettedTextureManager.allocateSlot port crates/horizon-client/src/sprites.rs::Sprites::insert gap: minor: one array layer per texture, no dynamic atlas tree
PalettedTextureManager.close skip:java GPU release
PalettedTextureManager.reload port crates/horizon-client/src/game/armor_stands.rs::ArmorStandAssets::reload_trims trim data reloaded; models kept
PalettedTextureManager.AtlasTexture.dumpContents skip:debug debug dump
PalettedTextureManager.Slot.getU skip:java UV accessor of a dynamic atlas slot; Horizon uses sprite rects
PalettedTextureManager.Slot.getV skip:java UV accessor of a dynamic atlas slot; Horizon uses sprite rects
DownloadedPackSource.configureSource inline crates/horizon-client/src/game/server_packs.rs::Game::start_pack_reload pack list staged for the reload; empty when none
DownloadedPackSource.onRecovery port crates/horizon-client/src/server_packs.rs::ServerPacks::reloaded reloads the packs that were active after a failure
DownloadedPackSource.onRecoveryFailure port crates/horizon-client/src/server_packs.rs::ServerPacks::reloaded second failure leaves the server's packs inactive
DownloadedPackSource.waitForPackFeedback skip:java future over the feedback callback; replies go through ServerPacks::take_replies
ServerPackManager.markExistingPacksAsRemoved inline crates/horizon-client/src/server_packs.rs::ServerPacks::push packs with the same id are removed as ServerReplaced
ServerPackManager.pushPack port crates/horizon-client/src/server_packs.rs::ServerPacks::push declined prompt answers DECLINED
ServerPackManager.pushLocalPack missing player: a world's own resource pack (resources.zip in the save) is not loaded when the world opens
ServerPackManager.pushNewPack inline crates/horizon-client/src/server_packs.rs::ServerPacks::push adds the pack and accepts it when allowed
ServerPackManager.findPackInfo inline crates/horizon-client/src/server_packs.rs::ServerPacks::pop finds the live pack with the id
ServerPackManager.popPack port crates/horizon-client/src/server_packs.rs::ServerPacks::pop marks the pack ServerRemoved
ServerPackManager.allowServerPacks port crates/horizon-client/src/server_packs.rs::ServerPacks::allow prompt allowed; accepts the waiting packs
ServerPackManager.rejectServerPacks port crates/horizon-client/src/server_packs.rs::ServerPacks::reject prompt declined; removes the unaccepted packs
ServerPackManager.cleanupRemovedPacks inline crates/horizon-client/src/server_packs.rs::ServerPacks::tick forgets removed packs and reports why
ServerPackManager.updateDownloads port crates/horizon-client/src/server_packs.rs::ServerPacks::tick gap: minor: returns the download requests; the download itself starts in game/server_packs.rs::Game::start_pack_downloads
AbstractSoundInstance.getOrResolve port crates/horizon-client/src/sound_engine.rs::SoundEngine::resolve event lookup, then a random sound from it
BeeSoundInstance.tick port crates/horizon-client/src/sound_engine.rs::SoundInstance::tick Ticking::Bee follows the bee; pitch and volume from speed
DirectionalSoundInstance.setPosition port crates/horizon-client/src/game/end.rs::Game::tick_end gap: minor: the end flash plays without a position, so the 10-block offset toward the view is not kept
ElytraOnPlayerSoundInstance.tick missing player: no elytra wind loop (entity.elytra.flying) while gliding; gliding is silent
EntityBoundSoundInstance.tick missing minor: a sound tied to an entity does not follow it; it stays at its start point
RidingEntitySoundInstance.tick missing player: no riding loop for a happy ghast or nautilus (HAPPY_GHAST_RIDING, NAUTILUS_RIDING)
RidingMinecartSoundInstance.shoudlPlaySound port crates/horizon-client/src/sound_engine.rs::SoundInstance::tick RidingMinecart arm; the predicate is always true for OldMinecartBehavior, Horizon's only minecart
SnifferSoundInstance.tick port crates/horizon-client/src/game/sniffers.rs::Game::tick_sniffer_effects gap: player: the digging sound plays once when digging starts; vanilla loops it while digging
Sound.Type.getByName port crates/horizon-client/src/sound_events.rs::parse_sound type file or event; other values reject the sound
SoundEventRegistrationSerializer.deserialize port crates/horizon-client/src/sound_events.rs::parse_file replace and subtitle per event
SoundEventRegistrationSerializer.getSounds inline crates/horizon-client/src/sound_events.rs::parse_file sounds array inside parse_file
SoundEventRegistrationSerializer.getType inline crates/horizon-client/src/sound_events.rs::parse_sound type field inside parse_sound
1 EquipmentClientInfo.Layer.leatherDyeable skip:data equipment asset factory; Horizon reads the equipment JSON in armor_stands.rs
2 EquipmentClientInfo.Layer.onlyIfDyed skip:data equipment asset factory; Horizon reads the equipment JSON in armor_stands.rs
3 EquipmentClientInfo.Layer.getTextureLocation port crates/horizon-client/src/game/armor_stands.rs::ArmorStandAssets::load builds entity/equipment/<kind>/<texture>; gap: minor: only humanoid, humanoid_leggings and wings are read here
4 EquipmentClientInfo.TrimOverride.validate skip:java codec validator; TrimOverride::list keeps an override with neither texture nor palette (minor)
5 EquipmentClientInfo.TrimPredicate.validate skip:java codec validator; TrimOverride::list keeps a predicate with neither material nor pattern (minor)
6 EquipmentClientInfo.TrimPredicate.matches port crates/horizon-client/src/trims.rs::TrimOverride::matches material and pattern id comparison
7 ModelBakery.bakeModels port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models bakes block states; gap: minor: items and standalone models bake in separate fns (item_bake.rs::bake_item_model)
8 ModelBakery.ModelBakerImpl.getModel port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve an unknown id falls back to the missing model
9 ModelDiscovery.createAndQueueWrapper inline crates/horizon-client/src/model_library.rs::ParsedModels::block_models parent queue; no wrapper object is kept
10 ModelDiscovery.addSpecialModel inline crates/horizon-assets/src/resolve.rs::ModelLibrary::with_shared_item_generator gap: minor: only builtin/generated is registered; a non-root special model is not rejected
11 ModelDiscovery.resolve port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve resolved per model id, not as a batch map
12 ModelDiscovery.discoverDependencies inline crates/horizon-client/src/model_library.rs::ParsedModels::block_models pushes each model's parent until the set is complete
13 ModelDiscovery.propagateValidity port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve a chain that reaches a cycle is an error when resolved
14 ModelDiscovery.ModelWrapper.updateSlot skip:java per-model result cache
15 ModelDiscovery.ModelWrapper.getSimpleProperty skip:java per-model result cache
16 ModelDiscovery.ModelWrapper.resolveParticleMaterial port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models block particle sprite; the item side is item_bake.rs::bake_item_model
17 ModelDiscovery.ModelWrapper.bakeDefaultState skip:java cache of the identity-rotation geometry
18 ModelDiscovery.ModelWrapper.bakeTopGeometry port crates/horizon-assets/src/bake.rs::bake_block_model bakes with the blockstate rotation; per-state cache skipped
19 ModelGroupCollector.build skip:java groups states for shared baked geometry; Horizon has no model-group ids
20 ModelGroupCollector.GroupKey.create skip:java group key of build
21 ModelGroupCollector.GroupKey.getColoringValues skip:java group key of build
22 ModelManager.reload port crates/horizon-client/src/assets.rs::RenderAssets::load one synchronous load: models, block states, item infos, then bake and store
23 ModelManager.loadBlockModels port crates/horizon-client/src/model_library.rs::ParsedModels::load every models/**.json by id, parsed in parallel
24 ModelManager.discoverModelDependencies port crates/horizon-client/src/model_library.rs::ParsedModels::block_models referenced models and their parents
25 ModelManager.loadModels port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models bakes block states and their models
26 ModelManager.createBlockStateToModelDispatch inline crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models missing model for a state without a baked model
27 ModelManager.buildModelGroups skip:java wrapper of ModelGroupCollector.build; render sharing only
28 ModelManager.apply inline crates/horizon-client/src/assets.rs::RenderAssets::load the baked result is stored in the returned struct
29 ModelManager.requiresRender skip:java render-skip optimisation for equal model groups; no visible effect
30 ResolvedModel.findTopTextureSlots port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve texture slots merged along the parent chain
31 ResolvedModel.findTopAmbientOcclusion port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve ambient occlusion from the first model that sets it, default true
32 ResolvedModel.findTopGuiLight port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve gui_light from the first model that sets it, default side
33 ResolvedModel.findTopGeometry port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve first element list up the parent chain
34 ResolvedModel.resolveParticleMaterial port crates/horizon-client/src/models/catalog.rs::StateModels::from_facts_with_models block particle slot; the item side is item_bake.rs::bake_item_model
35 ResolvedModel.findTopTransform port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve display transform per context, inherited up the chain
36 ResolvedModel.findTopTransforms port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve display transforms for every context
37 SimpleModelWrapper.bake port crates/horizon-assets/src/bake.rs::bake_block_model gap: minor: no rejection of block models that use non-block sprites
38 SimpleModelWrapper.findNonBlockSprites missing minor: vanilla replaces a block model whose quads use sprites outside the block atlas; Horizon keeps every sprite
39 UnbakedModel.GuiLight.getByName port crates/horizon-assets/src/model.rs::CuboidModel::decode front and side only; other values are an error
40 CuboidFace.Deserializer.deserialize port crates/horizon-assets/src/model.rs::Face::decode texture, cullface, tintindex and rotation
41 CuboidFace.Deserializer.getUVs port crates/horizon-assets/src/model.rs::Face::decode uv as four numbers; absent uses default_uv in bake.rs
42 CuboidFace.UVs.getVertexU inline crates/horizon-assets/src/bake.rs::bake_face the U corner is picked in bake_face
43 CuboidFace.UVs.getVertexV inline crates/horizon-assets/src/bake.rs::bake_face the V corner is picked in bake_face
44 CuboidModel.Deserializer.deserialize port crates/horizon-assets/src/model.rs::CuboidModel::decode whole model JSON
45 CuboidModel.Deserializer.getTextureMap port crates/horizon-assets/src/model.rs::CuboidModel::decode each textures entry through texture()
46 CuboidModel.Deserializer.getAmbientOcclusion port crates/horizon-assets/src/model.rs::CuboidModel::decode ambientocclusion flag
47 CuboidModel.Deserializer.getElements port crates/horizon-assets/src/model.rs::CuboidModel::decode elements list with null entries
48 CuboidModelElement.Deserializer.deserialize port crates/horizon-assets/src/model.rs::Element::decode whole element JSON
49 CuboidModelElement.Deserializer.getShadeDirectionOverride port crates/horizon-assets/src/model.rs::Element::decode shade_direction_override
50 CuboidModelElement.Deserializer.getRotation port crates/horizon-assets/src/model.rs::ElementRotation::decode rotation object
51 CuboidModelElement.Deserializer.getAxis port crates/horizon-assets/src/model.rs::ElementRotation::decode axis x, y or z
52 CuboidModelElement.Deserializer.getFaces port crates/horizon-assets/src/model.rs::Element::decode faces object
53 CuboidModelElement.Deserializer.filterNullFromFaces inline crates/horizon-assets/src/model.rs::Element::decode null faces are kept as None through nullable()
54 CuboidModelElement.Deserializer.getFacing port crates/horizon-assets/src/model.rs::Element::decode face names through Direction::by_name
55 CuboidModelElement.Deserializer.getPosition port crates/horizon-assets/src/model.rs::Element::decode from and to, bounded to -16..32
56 CuboidModelElement.Deserializer.getVector3f port crates/horizon-assets/src/json.rs::vector three-number array
57 CuboidRotation.computeTransform port crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation rotation matrix, then rescale when set
58 CuboidRotation.computeRescale inline crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation per-axis rescale inside from_rotation
59 CuboidRotation.scaleFactorForAxis inline crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation per-axis factor inside from_rotation
60 CuboidRotation.EulerXYZRotation.transformation port crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation Euler XYZ branch
61 CuboidRotation.SingleAxisRotation.transformation port crates/horizon-assets/src/bake.rs::ElementMatrix::from_rotation single-axis branch
62 FaceBakery.defaultFaceUV port crates/horizon-assets/src/bake.rs::default_uv default face UVs by direction
63 FaceBakery.computeMaterialTransparency port crates/horizon-client/src/sprites.rs::Sprites::region_opaque gap: minor: only the opaque-region check; force_translucent is not applied here
64 FaceBakery.bakeVertex inline crates/horizon-assets/src/bake.rs::bake_face vertex position and UV inside bake_face
65 FaceBakery.rotateVertexBy inline crates/horizon-assets/src/bake.rs::bake_face element rotation about its origin
66 FaceBakery.calculateFacing port crates/horizon-assets/src/bake.rs::facing quad normal, then closest direction
67 FaceBakery.findClosestDirection port crates/horizon-assets/src/bake.rs::facing closest axis direction with a non-negative dot
68 FaceBakery.recalculateWinding inline crates/horizon-assets/src/bake.rs::bake_face corner reorder for unrotated elements
69 FaceBakery.findVertex inline crates/horizon-assets/src/bake.rs::bake_face search inside the winding reorder
70 FaceBakery.swap inline crates/horizon-assets/src/bake.rs::bake_face swap inside the winding reorder
71 ItemModelGenerator.bake port crates/horizon-assets/src/item_bake.rs::bake_item_model layer loop of generated item models
72 ItemModelGenerator.bakeSideFaces port crates/horizon-assets/src/item_bake.rs::extrude_layer side faces of one layer
73 ItemModelGenerator.getSideFaces inline crates/horizon-assets/src/item_bake.rs::extrude_layer edge collection inside extrude_layer
74 ItemModelGenerator.checkTransition inline crates/horizon-assets/src/item_bake.rs::extrude_layer transparent neighbour check inside extrude_layer
75 ItemModelGenerator.isTransparent port crates/horizon-assets/src/item_bake.rs::SpriteMask::transparent alpha mask lookup
76 ItemModelGenerator.ItemLayerKey.compute skip:java layer bake cache key; Horizon bakes each item model once
77 ItemTransform.Deserializer.deserialize port crates/horizon-assets/src/model.rs::ItemTransform::decode rotation, translation and scale
78 ItemTransform.Deserializer.getVector3f port crates/horizon-assets/src/json.rs::vector three-number array
79 ItemTransforms.Deserializer.deserialize port crates/horizon-assets/src/model.rs::ItemTransforms::decode display contexts
80 ItemTransforms.Deserializer.getTransform port crates/horizon-assets/src/item_bake.rs::BakedItemModel::transform transform for one display context
81 BakedQuad.position skip:java record accessor; ModelQuad.positions field
82 BakedQuad.packedUV skip:java record accessor; ModelQuad.uv field
83 BakedQuad.MaterialInfo.of port crates/horizon-client/src/item_render.rs::FileSprites::translucent gap: minor: picks solid or translucent only; no per-material render type or glint sheet
84 BakedQuad.MaterialInfo.flags skip:java translucent and animated bit flags used to skip work; Horizon ticks animated textures by its setting
85 ItemQuads.split port crates/horizon-client/src/item_render.rs::submit_quads quads with translucent sprites go to the translucent pass
86 QuadCollection.computeMaterialFlags skip:java flag bits of the quad list; see BakedQuad.MaterialInfo.flags
87 QuadCollection.getQuads port crates/horizon-client/src/mesher.rs::Mesher::mesh quads filtered by cull direction
88 QuadCollection.materialFlags skip:java cached flag bits
89 QuadCollection.Builder.addAll skip:java collection builder
90 QuadCollection.Builder.createFromSublists skip:java sublist layout of a quad collection
91 AtlasManager.getAtlasOrThrow skip:java atlas map lookup; Horizon keeps one sprite table
92 AtlasManager.forEach skip:java map iteration
93 AtlasManager.close skip:java GPU release; freed with its owner
94 AtlasManager.get port crates/horizon-client/src/sprites.rs::Sprites::insert sprite layer added on first use; missing texture when it fails to load
95 AtlasManager.prepareSharedState skip:java future-based stitch plumbing
96 AtlasManager.reload skip:java async reload; sprites load synchronously in RenderAssets::load
97 AtlasManager.updateSpriteMaps port crates/horizon-client/src/sprites.rs::Sprites::finish lays out every layer at one size; gap: minor: no duplicate-sprite warning
98 AtlasManager.AtlasEntry.scheduleLoad port crates/horizon-client/src/sprites.rs::Sprites::insert gap: minor: sprites load on demand, not per atlas source
99 AtlasManager.PendingStitch.joinAndUpload skip:java future join
100 AtlasManager.PendingStitchResults.joinAndUpload skip:java future join
101 MaterialBaker.get port crates/horizon-assets/src/item_bake.rs::bake_item_model sprite that is not known falls back to missingno
102 MaterialBaker.bake skip:java Material.Baked wrapper
103 MaterialBaker.bakeForAtlas skip:java Material.Baked wrapper for an atlas
104 MaterialBaker.resolveSlot port crates/horizon-assets/src/resolve.rs::ResolvedCuboidModel::material named texture slot lookup
105 MaterialBaker.logMissingTextures skip:debug log of missing texture slots only
106 TextureSlots.getMaterial port crates/horizon-assets/src/resolve.rs::ResolvedCuboidModel::material named texture slot lookup
107 TextureSlots.parseTextureMap port crates/horizon-assets/src/model.rs::CuboidModel::decode textures object
108 TextureSlots.parseEntry port crates/horizon-assets/src/model.rs::texture # reference or sprite material
109 TextureSlots.Data.Builder.addReference skip:java builder
110 TextureSlots.Data.Builder.addTexture skip:java builder
111 TextureSlots.Data.Builder.build skip:java builder
112 TextureSlots.Resolver.resolve port crates/horizon-assets/src/resolve.rs::ModelLibrary::resolve alias chain resolution; the batch hint (horizon-protocol resolver.rs) is a DNS resolver and is not this
113 resources/palette/Palette.listAndLoad port crates/horizon-client/src/trims.rs::TrimTexture::generate gap: minor: palettes load on demand, none listed up front
114 resources/palette/Palette.tryLoad port crates/horizon-client/src/trims.rs::TrimTexture::generate gap: minor: a broken palette skips the recolour instead of an empty palette
115 resources/palette/Palette.load port crates/horizon-client/src/trims.rs::TrimTexture::generate palette PNG read as ARGB
116 PaletteMapping.apply port crates/horizon-assets/src/palette.rs::apply_palette colour swap; alpha scaled by the target's alpha
117 PalettedTextureManager.loadBaseTexture port crates/horizon-client/src/trims.rs::TrimTexture::generate base texture and its base_palette from the mcmeta
118 PalettedTextureManager.allocateSlot port crates/horizon-client/src/sprites.rs::Sprites::insert gap: minor: one array layer per texture, no dynamic atlas tree
119 PalettedTextureManager.close skip:java GPU release
120 PalettedTextureManager.reload port crates/horizon-client/src/game/armor_stands.rs::ArmorStandAssets::reload_trims trim data reloaded; models kept
121 PalettedTextureManager.AtlasTexture.dumpContents skip:debug debug dump
122 PalettedTextureManager.Slot.getU skip:java UV accessor of a dynamic atlas slot; Horizon uses sprite rects
123 PalettedTextureManager.Slot.getV skip:java UV accessor of a dynamic atlas slot; Horizon uses sprite rects
124 DownloadedPackSource.configureSource inline crates/horizon-client/src/game/server_packs.rs::Game::start_pack_reload pack list staged for the reload; empty when none
125 DownloadedPackSource.onRecovery port crates/horizon-client/src/server_packs.rs::ServerPacks::reloaded reloads the packs that were active after a failure
126 DownloadedPackSource.onRecoveryFailure port crates/horizon-client/src/server_packs.rs::ServerPacks::reloaded second failure leaves the server's packs inactive
127 DownloadedPackSource.waitForPackFeedback skip:java future over the feedback callback; replies go through ServerPacks::take_replies
128 ServerPackManager.markExistingPacksAsRemoved inline crates/horizon-client/src/server_packs.rs::ServerPacks::push packs with the same id are removed as ServerReplaced
129 ServerPackManager.pushPack port crates/horizon-client/src/server_packs.rs::ServerPacks::push declined prompt answers DECLINED
130 ServerPackManager.pushLocalPack missing player: a world's own resource pack (resources.zip in the save) is not loaded when the world opens
131 ServerPackManager.pushNewPack inline crates/horizon-client/src/server_packs.rs::ServerPacks::push adds the pack and accepts it when allowed
132 ServerPackManager.findPackInfo inline crates/horizon-client/src/server_packs.rs::ServerPacks::pop finds the live pack with the id
133 ServerPackManager.popPack port crates/horizon-client/src/server_packs.rs::ServerPacks::pop marks the pack ServerRemoved
134 ServerPackManager.allowServerPacks port crates/horizon-client/src/server_packs.rs::ServerPacks::allow prompt allowed; accepts the waiting packs
135 ServerPackManager.rejectServerPacks port crates/horizon-client/src/server_packs.rs::ServerPacks::reject prompt declined; removes the unaccepted packs
136 ServerPackManager.cleanupRemovedPacks inline crates/horizon-client/src/server_packs.rs::ServerPacks::tick forgets removed packs and reports why
137 ServerPackManager.updateDownloads port crates/horizon-client/src/server_packs.rs::ServerPacks::tick gap: minor: returns the download requests; the download itself starts in game/server_packs.rs::Game::start_pack_downloads
138 AbstractSoundInstance.getOrResolve port crates/horizon-client/src/sound_engine.rs::SoundEngine::resolve event lookup, then a random sound from it
139 BeeSoundInstance.tick port crates/horizon-client/src/sound_engine.rs::SoundInstance::tick Ticking::Bee follows the bee; pitch and volume from speed
140 DirectionalSoundInstance.setPosition port crates/horizon-client/src/game/end.rs::Game::tick_end gap: minor: the end flash plays without a position, so the 10-block offset toward the view is not kept
141 ElytraOnPlayerSoundInstance.tick missing player: no elytra wind loop (entity.elytra.flying) while gliding; gliding is silent
142 EntityBoundSoundInstance.tick missing minor: a sound tied to an entity does not follow it; it stays at its start point
143 RidingEntitySoundInstance.tick missing player: no riding loop for a happy ghast or nautilus (HAPPY_GHAST_RIDING, NAUTILUS_RIDING)
144 RidingMinecartSoundInstance.shoudlPlaySound port crates/horizon-client/src/sound_engine.rs::SoundInstance::tick RidingMinecart arm; the predicate is always true for OldMinecartBehavior, Horizon's only minecart
145 SnifferSoundInstance.tick port crates/horizon-client/src/game/sniffers.rs::Game::tick_sniffer_effects gap: player: the digging sound plays once when digging starts; vanilla loops it while digging
146 Sound.Type.getByName port crates/horizon-client/src/sound_events.rs::parse_sound type file or event; other values reject the sound
147 SoundEventRegistrationSerializer.deserialize port crates/horizon-client/src/sound_events.rs::parse_file replace and subtitle per event
148 SoundEventRegistrationSerializer.getSounds inline crates/horizon-client/src/sound_events.rs::parse_file sounds array inside parse_file
149 SoundEventRegistrationSerializer.getType inline crates/horizon-client/src/sound_events.rs::parse_sound type field inside parse_sound
+149
View File
@@ -0,0 +1,149 @@
ActiveTextCollector.accept inline crates/horizon-client/src/screen_draw.rs::text default overload: left-aligned text at x,y with default parameters
ActiveTextCollector.acceptScrolling missing minor: forwards to the scrolling helper, which Horizon lacks; long text is clipped
ActiveTextCollector.acceptScrollingWithDefaultCenter port crates/horizon-client/src/ui.rs::centered_text gap: minor: centres the message; wider text is clipped instead of scrolled
ActiveTextCollector.defaultScrollingHelper missing minor: wider text does not slide back and forth; ui.rs centered_text clips it
ActiveTextCollector.findElementUnderCursor port crates/horizon-client/src/chat.rs::Chat::style_at gap: minor: hit test covers chat lines only; book links use game/books.rs book_link_at
ActiveTextCollector.isPointInRectangle port crates/horizon-client/src/ui.rs::hovered half-open rectangle test with the same bounds
ActiveTextCollector.ClickableStyleFinder.accept port crates/horizon-client/src/chat.rs::Chat::style_at gap: minor: only chat lines are searched for click and hover styles
ActiveTextCollector.ClickableStyleFinder.acceptScrolling missing minor: no scrolling text (see defaultScrollingHelper)
ActiveTextCollector.Parameters.withScale skip:java record copy-with helper; Horizon has no pose matrix per text
ActiveTextCollector.Parameters.withOpacity skip:java record copy-with helper; opacity is the colour's alpha byte in Horizon
ActiveTextCollector.Parameters.withScissor missing minor: a nested scissor is not intersected with the enclosing rectangle; Draw::Scissor replaces it
ComponentPath.path skip:other focus path builder for nested containers; Horizon focus is a flat per-screen state
ComponentPath.Path.applyFocus skip:other focus path propagation; Horizon focus is a flat per-screen state
Font.bidirectionalShaping port crates/horizon-client/src/bidi.rs::visual_str Arabic shaping and bidi reorder
Font.prepare8xTextOutline skip:other no vanilla 26.3 caller passes a non-zero outline colour; text displays, name tags and map labels pass 0 or a background
Font.prepareBackground port crates/horizon-client/src/hud_overlays.rs::text_with_backdrop background box behind text; callers pass their own bounds
Font.getGlyph port crates/horizon-client/src/font.rs::Font::glyph_styled obfuscated glyph is picked in HudBatch::text_styled via random_glyph
Font.PreparedTextBuilder.markSize skip:other bounds bookkeeping of prepared text; Horizon has no prepared-text object and hit-tests by advance
Font.PreparedTextBuilder.markBackground inline crates/horizon-client/src/hud_overlays.rs::text_with_backdrop gap: minor: the background box is 2 px around the text; vanilla grows it by 1 px around each glyph
Font.PreparedTextBuilder.addGlyph inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph quad pushed directly into the batch
Font.PreparedTextBuilder.addEffect inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline and strikethrough rectangles drawn inline
Font.PreparedTextBuilder.addEmptyGlyph skip:other hit areas for glyphs with no image; Chat::style_at hit-tests by advance width instead
Font.PreparedTextBuilder.accept port crates/horizon-client/src/hud.rs::HudBatch::text_styled per-character draw with bold, italic, shadow, underline and strikethrough
Font.PreparedTextBuilder.visit skip:other visitor over prepared glyphs for draw order and hit tests; Horizon draws straight into the batch
Font.PreparedTextBuilder.getTextColor inline crates/horizon-client/src/hud.rs::HudBatch::text_styled style colour with the base colour's alpha
Font.PreparedTextBuilder.getShadowColor inline crates/horizon-client/src/hud.rs::HudBatch::text_styled gap: minor: style shadow colour is ignored; shadow is always 0.25 of the text colour
Font.PreparedTextBuilder.bounds skip:other bounds of prepared text for vanilla hit tests; Horizon hit-tests by advance
Gui.update skip:other narrator-only update (handleDelayedNarration); Horizon has no narrator
Gui.isPausing port crates/horizon-client/src/game.rs::Game::pauses_game gap: minor: checks the open screen only, not the overlay part
Gui.addSocialInteractionsToast skip:service social interactions are not offered by Horizon
Gui.handleKeybinds port crates/horizon-client/src/game.rs::Game::key_pressed gap: minor: the social interactions key has no port (see addSocialInteractionsToast)
Gui.openChatScreen port crates/horizon-client/src/game/chat.rs::Game::open_chat
Gui.openChatAndAddText port crates/horizon-client/src/game/chat.rs::Game::open_chat the text is passed as the initial input
Gui.buildInitialScreens missing player: first launch skips vanilla's accessibility onboarding screen, and ban notices are not shown before the title screen
Gui.addInitialScreens missing player: same as buildInitialScreens: no onboarding screen or ban notice is queued
Gui.canInterruptScreen missing minor: unsure: no check that stops a server-opened screen from replacing an open one was found
Gui.renderActiveTextDebug skip:debug debug overlay of text bounds
GuiGraphicsExtractor.enableScissor port crates/horizon-client/src/screen_draw.rs::paint gap: minor: callers push a rectangle; there is no stack, so enclosing rectangles are not intersected
GuiGraphicsExtractor.outline missing minor: unsure: no one-pixel outline draw was found in Horizon's UI
GuiGraphicsExtractor.innerFill port crates/horizon-client/src/hud.rs::HudBatch::fill gap: minor: one colour only; a second gradient colour (color2) is not drawn
GuiGraphicsExtractor.textWithWordWrap port crates/horizon-client/src/screen_draw.rs::Measure::split gap: minor: only the wrap; the caller draws each line at y+9
GuiGraphicsExtractor.blitSprite port crates/horizon-client/src/hud.rs::HudBatch::sprite_scaled gap: minor: tile and nine-slice scaling is in ui.rs (tiled, draw_nine_slice)
GuiGraphicsExtractor.blitNineSliceInnerSegment port crates/horizon-client/src/ui.rs::draw_nine_slice inner segments of a nine-slice sprite
GuiGraphicsExtractor.blitTiledSprite port crates/horizon-client/src/ui.rs::tiled
GuiGraphicsExtractor.innerBlit port crates/horizon-client/src/screen_draw.rs::blit texture rectangle by UV; the atlas lookup is in HudBatch::rect_uv
GuiGraphicsExtractor.innerTiledBlit port crates/horizon-client/src/ui.rs::tile one tiled quad
GuiGraphicsExtractor.item port crates/horizon-client/src/game.rs::Game::draw_item gap: minor: no seed or owner is passed to the item model
GuiGraphicsExtractor.fakeItem inline crates/horizon-client/src/game.rs::Game::draw_item same as item with no owner
GuiGraphicsExtractor.itemBar inline crates/horizon-client/src/hud_overlays.rs::item_decorations damage bar drawn in item_decorations
GuiGraphicsExtractor.itemCount inline crates/horizon-client/src/hud_overlays.rs::item_decorations stack count drawn in item_decorations
GuiGraphicsExtractor.map port crates/horizon-client/src/game/cartography.rs::Game::draw_cartography gap: player: the map image is drawn only in the cartography preview; map markers (decorations) are not drawn there
GuiGraphicsExtractor.entity port crates/horizon-client/src/game/perspective.rs::Game::draw_player_preview gap: player: only the local player is previewed; the smithing armour-stand preview has no port
GuiGraphicsExtractor.skin missing minor: no skin customisation preview was found; the inventory preview is draw_player_preview
GuiGraphicsExtractor.book missing player: the enchanting table screen does not draw its open book; Horizon's book drawing is for written books only
GuiGraphicsExtractor.profilerChart skip:debug F3 profiler pie chart; Horizon's debug_chart.rs covers its own charts
GuiGraphicsExtractor.setTooltipForNextFrame inline crates/horizon-client/src/screen_draw.rs::tooltip the overloads route to the tooltip draw
GuiGraphicsExtractor.setComponentTooltipForNextFrame port crates/horizon-client/src/screen_draw.rs::tooltip gap: minor: tooltip images (TooltipComponent) are not drawn
GuiGraphicsExtractor.setTooltipForNextFrameInternal port crates/horizon-client/src/ui.rs::tooltip frame and background sprites beside the cursor
GuiGraphicsExtractor.extractDeferredElements port crates/horizon-client/src/screen_draw.rs::paint gap: minor: deferred hover effects come from chat only (see componentHoverEffect)
GuiGraphicsExtractor.componentHoverEffect port crates/horizon-client/src/game/chat.rs::Game::draw_chat_screen gap: player: hover tooltips exist only for text in chat; item and entity hover events show nothing
GuiGraphicsExtractor.textRendererForWidget skip:ui builds a text collector for a widget; Horizon draws widget text directly
GuiGraphicsExtractor.textRenderer skip:ui builds a text collector; Horizon draws text directly
GuiGraphicsExtractor.createDefaultTextParameters skip:ui default pose, opacity and scissor for text; Horizon passes colour and rectangle directly
GuiGraphicsExtractor.RenderingTextCollector.accept port crates/horizon-client/src/screen_draw.rs::text gap: minor: no hover or click registration here (see Chat::style_at)
GuiGraphicsExtractor.RenderingTextCollector.acceptScrolling missing minor: no scrolling text (see defaultScrollingHelper)
GuiGraphicsExtractor.ScissorStack.push inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: the pushed rectangle replaces the current one; it is not intersected
GuiGraphicsExtractor.ScissorStack.pop inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: Draw::NoScissor clears the scissor instead of restoring the enclosing one
GuiGraphicsExtractor.ScissorStack.containsPoint missing minor: hover ignores the scissor, so a widget clipped out of view can still highlight
Hud.extractHotbarAndDecorations port crates/horizon-client/src/hud_layout.rs::hotbar items and decorations are drawn by Game::draw_item
Hud.<init> skip:java constructor state setup
Hud.extractSubtitleOverlay port crates/horizon-client/src/hud_overlays.rs::SubtitleOverlay::extract
Hud.extractChat port crates/horizon-client/src/chat.rs::Chat::layout
Hud.getMobEffectSprite port crates/horizon-client/src/game/potions.rs::Game::draw_effect_icons sprite lookup is inside the effect icon draw
Hud.extractDemoOverlay skip:other Horizon has no demo mode, so there is no demo timer overlay
Hud.getCameraPlayer missing minor: unsure: no camera-entity lookup found; the HUD always uses the local player
Hud.getPlayerVehicleWithHealth port crates/horizon-client/src/hud_layout.rs::vehicle_health gap: minor: the vehicle is chosen by the caller
Hud.extractArmor inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout armour row inside the health layout
Hud.extractHearts inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout heart row inside the health layout
Hud.extractHeart port crates/horizon-client/src/hud_layout.rs::heart heart sprite choice for one heart
Hud.getAirBubbleYLine inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout air bubble row position
Hud.getCurrentAirSupplyBubble inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout air bubble count
Hud.extractFood inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout food row inside the health layout
Hud.extractTextureOverlay port crates/horizon-client/src/hud_overlays.rs::camera_overlays gap: player: the powder-snow freeze outline is not drawn; only the equippable camera overlay (pumpkin) is
Hud.extractSlot port crates/horizon-client/src/game.rs::Game::draw_slot_item
Hud.setNowPlaying port crates/horizon-client/src/hud_overlays.rs::Titles::set_overlay the animate flag gives the rainbow colour
Hud.onDisconnected missing minor: unsure: no HUD reset on disconnect found; titles clear only on the ClearTitles packet
Hud.willPrioritizeJumpInfo port crates/horizon-client/src/locator_bar.rs::ContextualBar::next the jumping input comes from Game::mount_jumping
Hud.HeartType.getSprite port crates/horizon-client/src/hud_layout.rs::heart
Hud.HeartType.forPlayer inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout heart kind comes from the health inputs
AbstractButton.extractDefaultSprite port crates/horizon-client/src/screen_draw.rs::button disabled, highlighted and normal sprites
AbstractButton.keyPressed missing minor: Enter or Space does not press a focused button; Enter only confirms a title text edit
AbstractContainerWidget.setFocused port crates/horizon-client/src/pack_screen.rs::PackScreen::set_focus gap: minor: screen-level focus only; no child-container focus
AbstractContainerWidget.mouseClicked port crates/horizon-client/src/ui.rs::Scroll::press gap: minor: child click dispatch is per screen; only the scrollbar press is here
AbstractScrollArea.isOverScrollbar inline crates/horizon-client/src/ui.rs::Scroll::press scrollbar column test folded into the press
AbstractScrollArea.scrollBarY port crates/horizon-client/src/ui.rs::scrollbar_thumb thumb top
AbstractScrollArea.extractScrollbar port crates/horizon-client/src/ui.rs::scrollbar gap: minor: no disabled-scroller sprite and no cursor request
AbstractScrollArea.defaultSettings skip:java settings record builder; the sizes are constants in ui.rs
AbstractSelectionList.swap port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: mouse move up or down works; keyboard Shift+arrow reorder is not ported
AbstractSelectionList.clearEntriesExcept skip:other only the stats screen calls it; Horizon's stats screen draws its rows directly
AbstractSelectionList.replaceEntries port crates/horizon-client/src/pack_screen.rs::PackScreen::update_list
AbstractSelectionList.getNextY port crates/horizon-client/src/pack_screen.rs::List::next_y
AbstractSelectionList.addEntry port crates/horizon-client/src/pack_screen.rs::List::add
AbstractSelectionList.addEntryToTop skip:service only the chat report selection screen calls it; Horizon has no chat reporting
AbstractSelectionList.repositionEntries port crates/horizon-client/src/pack_screen.rs::List::reposition
AbstractSelectionList.removeEntryFromTop skip:service only the chat report selection screen calls it; Horizon has no chat reporting
AbstractSelectionList.updateSizeAndPosition port crates/horizon-client/src/pack_screen.rs::List::update_size
AbstractSelectionList.extractListSeparators port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list header and footer separators, with the in-world variant
AbstractSelectionList.extractListBackground port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list menu list background sprite
AbstractSelectionList.enableScissor port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list scissor clamped to the screen
AbstractSelectionList.scrollToEntry port crates/horizon-client/src/pack_screen.rs::List::scroll_to
AbstractSelectionList.setFocused port crates/horizon-client/src/pack_screen.rs::PackScreen::set_focus gap: minor: focusing a row does not select it; vanilla selects the focused entry
AbstractSelectionList.nextEntry missing minor: arrow keys do not move the selection between rows in the pack or server lists
AbstractSelectionList.extractListItems port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list rows culled to the visible band
AbstractSelectionList.extractItem port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list selection outline and row content
AbstractSelectionList.extractSelection port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list two fills: outline colour and black inner
AbstractSelectionList.getRowBottom skip:other only the LAN-found narration uses it; Horizon has no narrator
AbstractSelectionList.narrationPriority skip:other screen-reader priority; Horizon has no narrator
AbstractSelectionList.removeEntry skip:other rows are rebuilt from the model when they change (update_list, server list), so there is no single-row removal
AbstractSelectionList.narrateListElementPosition skip:other narration only
AbstractSelectionList.TrackedList.set skip:java delegate list wrapper
AbstractSliderButton.getSprite inline crates/horizon-client/src/ui.rs::slider gap: minor: track highlight follows hover only; keyboard focus does not highlight
AbstractSliderButton.getHandleSprite inline crates/horizon-client/src/ui.rs::slider gap: minor: handle highlight follows hover only
AbstractSliderButton.updateWidgetNarration skip:other narration only
AbstractSliderButton.extractWidgetRenderState port crates/horizon-client/src/ui.rs::slider gap: minor: the label is clipped rather than scrolled
AbstractSliderButton.handleCursor port crates/horizon-client/src/widgets.rs::widget_cursor gap: minor: no resize cursor while dragging
AbstractSliderButton.setFocused missing minor: keyboard focus does not enable value changes; there is no change-value state
AbstractSliderButton.keyPressed missing minor: Left and Right do not move a focused slider; Enter does not toggle it
AbstractSliderButton.setValue port crates/horizon-client/src/options_ui.rs::set_slider gap: minor: the 0..1 clamp is done by the caller (ui.rs slider_value)
AbstractStringWidget.extractWidgetRenderState port crates/horizon-client/src/screen_draw.rs::string_widget gap: minor: hover tooltip and click cursor for styled text are not drawn
AbstractStringWidget.onClick missing minor: clicking a styled label with a click event does nothing here; book links and chat links do work
AbstractStringWidget.setMessage skip:ui width is measured at draw time
AbstractStringWidget.handleStyleClick missing minor: same as onClick: no click handling for labels
AbstractTextAreaWidget.mouseClicked port crates/horizon-client/src/game/books.rs::Game::book_page_click gap: minor: a scrollbar press inside the area is not checked
AbstractTextAreaWidget.keyPressed port crates/horizon-client/src/game/books.rs::Game::book_page_key gap: minor: up and down scroll the area in vanilla; not checked here
AbstractTextAreaWidget.extractWidgetRenderState port crates/horizon-client/src/game/books.rs::Game::draw_book gap: minor: scroll offset inside the page not verified
AbstractTextAreaWidget.isMouseOver port crates/horizon-client/src/screen_draw.rs::inside gap: minor: the scrollbar width is not added to the hit area
AbstractTextAreaWidget.extractBackground skip:ui frame drawn by the book screen; no behaviour
AbstractTextAreaWidget.extractBorder skip:ui frame sprite; no behaviour
AbstractTextAreaWidget.withinContentAreaTopBottom skip:ui visibility cull while drawing lines
AbstractWidget.extractRenderState port crates/horizon-client/src/ui.rs::hovered gap: minor: the scissor test is not part of the hover check
AbstractWidget.extractTooltipForNextRenderPass port crates/horizon-client/src/ui.rs::tooltip gap: minor: unsure: widget hover delay not checked
AbstractWidget.extractScrollingStringOverContents port crates/horizon-client/src/ui.rs::centered_text gap: minor: text is clipped, not scrolled
AbstractWidget.mouseClicked port crates/horizon-client/src/title.rs::Title::click gap: minor: click dispatch is per screen; the press sound is audio.rs Audio::play_button_click
AbstractWidget.mouseReleased port crates/horizon-client/src/ui.rs::Scroll::release gap: minor: only the scroll release; widget onRelease is per screen
AbstractWidget.mouseDragged port crates/horizon-client/src/ui.rs::Scroll::drag gap: minor: only scroll drag; widget onDrag is per screen
AbstractWidget.nextFocusPath missing minor: unsure: no per-widget focus path; Horizon focus is per screen
AbstractWidget.isMouseOver port crates/horizon-client/src/screen_draw.rs::inside gap: minor: isActive is checked by the caller
AbstractWidget.narrationPriority skip:other narration only
AbstractWidget.defaultButtonNarrationText skip:other narration only
1 ActiveTextCollector.accept inline crates/horizon-client/src/screen_draw.rs::text default overload: left-aligned text at x,y with default parameters
2 ActiveTextCollector.acceptScrolling missing minor: forwards to the scrolling helper, which Horizon lacks; long text is clipped
3 ActiveTextCollector.acceptScrollingWithDefaultCenter port crates/horizon-client/src/ui.rs::centered_text gap: minor: centres the message; wider text is clipped instead of scrolled
4 ActiveTextCollector.defaultScrollingHelper missing minor: wider text does not slide back and forth; ui.rs centered_text clips it
5 ActiveTextCollector.findElementUnderCursor port crates/horizon-client/src/chat.rs::Chat::style_at gap: minor: hit test covers chat lines only; book links use game/books.rs book_link_at
6 ActiveTextCollector.isPointInRectangle port crates/horizon-client/src/ui.rs::hovered half-open rectangle test with the same bounds
7 ActiveTextCollector.ClickableStyleFinder.accept port crates/horizon-client/src/chat.rs::Chat::style_at gap: minor: only chat lines are searched for click and hover styles
8 ActiveTextCollector.ClickableStyleFinder.acceptScrolling missing minor: no scrolling text (see defaultScrollingHelper)
9 ActiveTextCollector.Parameters.withScale skip:java record copy-with helper; Horizon has no pose matrix per text
10 ActiveTextCollector.Parameters.withOpacity skip:java record copy-with helper; opacity is the colour's alpha byte in Horizon
11 ActiveTextCollector.Parameters.withScissor missing minor: a nested scissor is not intersected with the enclosing rectangle; Draw::Scissor replaces it
12 ComponentPath.path skip:other focus path builder for nested containers; Horizon focus is a flat per-screen state
13 ComponentPath.Path.applyFocus skip:other focus path propagation; Horizon focus is a flat per-screen state
14 Font.bidirectionalShaping port crates/horizon-client/src/bidi.rs::visual_str Arabic shaping and bidi reorder
15 Font.prepare8xTextOutline skip:other no vanilla 26.3 caller passes a non-zero outline colour; text displays, name tags and map labels pass 0 or a background
16 Font.prepareBackground port crates/horizon-client/src/hud_overlays.rs::text_with_backdrop background box behind text; callers pass their own bounds
17 Font.getGlyph port crates/horizon-client/src/font.rs::Font::glyph_styled obfuscated glyph is picked in HudBatch::text_styled via random_glyph
18 Font.PreparedTextBuilder.markSize skip:other bounds bookkeeping of prepared text; Horizon has no prepared-text object and hit-tests by advance
19 Font.PreparedTextBuilder.markBackground inline crates/horizon-client/src/hud_overlays.rs::text_with_backdrop gap: minor: the background box is 2 px around the text; vanilla grows it by 1 px around each glyph
20 Font.PreparedTextBuilder.addGlyph inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph quad pushed directly into the batch
21 Font.PreparedTextBuilder.addEffect inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline and strikethrough rectangles drawn inline
22 Font.PreparedTextBuilder.addEmptyGlyph skip:other hit areas for glyphs with no image; Chat::style_at hit-tests by advance width instead
23 Font.PreparedTextBuilder.accept port crates/horizon-client/src/hud.rs::HudBatch::text_styled per-character draw with bold, italic, shadow, underline and strikethrough
24 Font.PreparedTextBuilder.visit skip:other visitor over prepared glyphs for draw order and hit tests; Horizon draws straight into the batch
25 Font.PreparedTextBuilder.getTextColor inline crates/horizon-client/src/hud.rs::HudBatch::text_styled style colour with the base colour's alpha
26 Font.PreparedTextBuilder.getShadowColor inline crates/horizon-client/src/hud.rs::HudBatch::text_styled gap: minor: style shadow colour is ignored; shadow is always 0.25 of the text colour
27 Font.PreparedTextBuilder.bounds skip:other bounds of prepared text for vanilla hit tests; Horizon hit-tests by advance
28 Gui.update skip:other narrator-only update (handleDelayedNarration); Horizon has no narrator
29 Gui.isPausing port crates/horizon-client/src/game.rs::Game::pauses_game gap: minor: checks the open screen only, not the overlay part
30 Gui.addSocialInteractionsToast skip:service social interactions are not offered by Horizon
31 Gui.handleKeybinds port crates/horizon-client/src/game.rs::Game::key_pressed gap: minor: the social interactions key has no port (see addSocialInteractionsToast)
32 Gui.openChatScreen port crates/horizon-client/src/game/chat.rs::Game::open_chat
33 Gui.openChatAndAddText port crates/horizon-client/src/game/chat.rs::Game::open_chat the text is passed as the initial input
34 Gui.buildInitialScreens missing player: first launch skips vanilla's accessibility onboarding screen, and ban notices are not shown before the title screen
35 Gui.addInitialScreens missing player: same as buildInitialScreens: no onboarding screen or ban notice is queued
36 Gui.canInterruptScreen missing minor: unsure: no check that stops a server-opened screen from replacing an open one was found
37 Gui.renderActiveTextDebug skip:debug debug overlay of text bounds
38 GuiGraphicsExtractor.enableScissor port crates/horizon-client/src/screen_draw.rs::paint gap: minor: callers push a rectangle; there is no stack, so enclosing rectangles are not intersected
39 GuiGraphicsExtractor.outline missing minor: unsure: no one-pixel outline draw was found in Horizon's UI
40 GuiGraphicsExtractor.innerFill port crates/horizon-client/src/hud.rs::HudBatch::fill gap: minor: one colour only; a second gradient colour (color2) is not drawn
41 GuiGraphicsExtractor.textWithWordWrap port crates/horizon-client/src/screen_draw.rs::Measure::split gap: minor: only the wrap; the caller draws each line at y+9
42 GuiGraphicsExtractor.blitSprite port crates/horizon-client/src/hud.rs::HudBatch::sprite_scaled gap: minor: tile and nine-slice scaling is in ui.rs (tiled, draw_nine_slice)
43 GuiGraphicsExtractor.blitNineSliceInnerSegment port crates/horizon-client/src/ui.rs::draw_nine_slice inner segments of a nine-slice sprite
44 GuiGraphicsExtractor.blitTiledSprite port crates/horizon-client/src/ui.rs::tiled
45 GuiGraphicsExtractor.innerBlit port crates/horizon-client/src/screen_draw.rs::blit texture rectangle by UV; the atlas lookup is in HudBatch::rect_uv
46 GuiGraphicsExtractor.innerTiledBlit port crates/horizon-client/src/ui.rs::tile one tiled quad
47 GuiGraphicsExtractor.item port crates/horizon-client/src/game.rs::Game::draw_item gap: minor: no seed or owner is passed to the item model
48 GuiGraphicsExtractor.fakeItem inline crates/horizon-client/src/game.rs::Game::draw_item same as item with no owner
49 GuiGraphicsExtractor.itemBar inline crates/horizon-client/src/hud_overlays.rs::item_decorations damage bar drawn in item_decorations
50 GuiGraphicsExtractor.itemCount inline crates/horizon-client/src/hud_overlays.rs::item_decorations stack count drawn in item_decorations
51 GuiGraphicsExtractor.map port crates/horizon-client/src/game/cartography.rs::Game::draw_cartography gap: player: the map image is drawn only in the cartography preview; map markers (decorations) are not drawn there
52 GuiGraphicsExtractor.entity port crates/horizon-client/src/game/perspective.rs::Game::draw_player_preview gap: player: only the local player is previewed; the smithing armour-stand preview has no port
53 GuiGraphicsExtractor.skin missing minor: no skin customisation preview was found; the inventory preview is draw_player_preview
54 GuiGraphicsExtractor.book missing player: the enchanting table screen does not draw its open book; Horizon's book drawing is for written books only
55 GuiGraphicsExtractor.profilerChart skip:debug F3 profiler pie chart; Horizon's debug_chart.rs covers its own charts
56 GuiGraphicsExtractor.setTooltipForNextFrame inline crates/horizon-client/src/screen_draw.rs::tooltip the overloads route to the tooltip draw
57 GuiGraphicsExtractor.setComponentTooltipForNextFrame port crates/horizon-client/src/screen_draw.rs::tooltip gap: minor: tooltip images (TooltipComponent) are not drawn
58 GuiGraphicsExtractor.setTooltipForNextFrameInternal port crates/horizon-client/src/ui.rs::tooltip frame and background sprites beside the cursor
59 GuiGraphicsExtractor.extractDeferredElements port crates/horizon-client/src/screen_draw.rs::paint gap: minor: deferred hover effects come from chat only (see componentHoverEffect)
60 GuiGraphicsExtractor.componentHoverEffect port crates/horizon-client/src/game/chat.rs::Game::draw_chat_screen gap: player: hover tooltips exist only for text in chat; item and entity hover events show nothing
61 GuiGraphicsExtractor.textRendererForWidget skip:ui builds a text collector for a widget; Horizon draws widget text directly
62 GuiGraphicsExtractor.textRenderer skip:ui builds a text collector; Horizon draws text directly
63 GuiGraphicsExtractor.createDefaultTextParameters skip:ui default pose, opacity and scissor for text; Horizon passes colour and rectangle directly
64 GuiGraphicsExtractor.RenderingTextCollector.accept port crates/horizon-client/src/screen_draw.rs::text gap: minor: no hover or click registration here (see Chat::style_at)
65 GuiGraphicsExtractor.RenderingTextCollector.acceptScrolling missing minor: no scrolling text (see defaultScrollingHelper)
66 GuiGraphicsExtractor.ScissorStack.push inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: the pushed rectangle replaces the current one; it is not intersected
67 GuiGraphicsExtractor.ScissorStack.pop inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: Draw::NoScissor clears the scissor instead of restoring the enclosing one
68 GuiGraphicsExtractor.ScissorStack.containsPoint missing minor: hover ignores the scissor, so a widget clipped out of view can still highlight
69 Hud.extractHotbarAndDecorations port crates/horizon-client/src/hud_layout.rs::hotbar items and decorations are drawn by Game::draw_item
70 Hud.<init> skip:java constructor state setup
71 Hud.extractSubtitleOverlay port crates/horizon-client/src/hud_overlays.rs::SubtitleOverlay::extract
72 Hud.extractChat port crates/horizon-client/src/chat.rs::Chat::layout
73 Hud.getMobEffectSprite port crates/horizon-client/src/game/potions.rs::Game::draw_effect_icons sprite lookup is inside the effect icon draw
74 Hud.extractDemoOverlay skip:other Horizon has no demo mode, so there is no demo timer overlay
75 Hud.getCameraPlayer missing minor: unsure: no camera-entity lookup found; the HUD always uses the local player
76 Hud.getPlayerVehicleWithHealth port crates/horizon-client/src/hud_layout.rs::vehicle_health gap: minor: the vehicle is chosen by the caller
77 Hud.extractArmor inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout armour row inside the health layout
78 Hud.extractHearts inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout heart row inside the health layout
79 Hud.extractHeart port crates/horizon-client/src/hud_layout.rs::heart heart sprite choice for one heart
80 Hud.getAirBubbleYLine inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout air bubble row position
81 Hud.getCurrentAirSupplyBubble inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout air bubble count
82 Hud.extractFood inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout food row inside the health layout
83 Hud.extractTextureOverlay port crates/horizon-client/src/hud_overlays.rs::camera_overlays gap: player: the powder-snow freeze outline is not drawn; only the equippable camera overlay (pumpkin) is
84 Hud.extractSlot port crates/horizon-client/src/game.rs::Game::draw_slot_item
85 Hud.setNowPlaying port crates/horizon-client/src/hud_overlays.rs::Titles::set_overlay the animate flag gives the rainbow colour
86 Hud.onDisconnected missing minor: unsure: no HUD reset on disconnect found; titles clear only on the ClearTitles packet
87 Hud.willPrioritizeJumpInfo port crates/horizon-client/src/locator_bar.rs::ContextualBar::next the jumping input comes from Game::mount_jumping
88 Hud.HeartType.getSprite port crates/horizon-client/src/hud_layout.rs::heart
89 Hud.HeartType.forPlayer inline crates/horizon-client/src/hud_layout.rs::HealthHud::layout heart kind comes from the health inputs
90 AbstractButton.extractDefaultSprite port crates/horizon-client/src/screen_draw.rs::button disabled, highlighted and normal sprites
91 AbstractButton.keyPressed missing minor: Enter or Space does not press a focused button; Enter only confirms a title text edit
92 AbstractContainerWidget.setFocused port crates/horizon-client/src/pack_screen.rs::PackScreen::set_focus gap: minor: screen-level focus only; no child-container focus
93 AbstractContainerWidget.mouseClicked port crates/horizon-client/src/ui.rs::Scroll::press gap: minor: child click dispatch is per screen; only the scrollbar press is here
94 AbstractScrollArea.isOverScrollbar inline crates/horizon-client/src/ui.rs::Scroll::press scrollbar column test folded into the press
95 AbstractScrollArea.scrollBarY port crates/horizon-client/src/ui.rs::scrollbar_thumb thumb top
96 AbstractScrollArea.extractScrollbar port crates/horizon-client/src/ui.rs::scrollbar gap: minor: no disabled-scroller sprite and no cursor request
97 AbstractScrollArea.defaultSettings skip:java settings record builder; the sizes are constants in ui.rs
98 AbstractSelectionList.swap port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: mouse move up or down works; keyboard Shift+arrow reorder is not ported
99 AbstractSelectionList.clearEntriesExcept skip:other only the stats screen calls it; Horizon's stats screen draws its rows directly
100 AbstractSelectionList.replaceEntries port crates/horizon-client/src/pack_screen.rs::PackScreen::update_list
101 AbstractSelectionList.getNextY port crates/horizon-client/src/pack_screen.rs::List::next_y
102 AbstractSelectionList.addEntry port crates/horizon-client/src/pack_screen.rs::List::add
103 AbstractSelectionList.addEntryToTop skip:service only the chat report selection screen calls it; Horizon has no chat reporting
104 AbstractSelectionList.repositionEntries port crates/horizon-client/src/pack_screen.rs::List::reposition
105 AbstractSelectionList.removeEntryFromTop skip:service only the chat report selection screen calls it; Horizon has no chat reporting
106 AbstractSelectionList.updateSizeAndPosition port crates/horizon-client/src/pack_screen.rs::List::update_size
107 AbstractSelectionList.extractListSeparators port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list header and footer separators, with the in-world variant
108 AbstractSelectionList.extractListBackground port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list menu list background sprite
109 AbstractSelectionList.enableScissor port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list scissor clamped to the screen
110 AbstractSelectionList.scrollToEntry port crates/horizon-client/src/pack_screen.rs::List::scroll_to
111 AbstractSelectionList.setFocused port crates/horizon-client/src/pack_screen.rs::PackScreen::set_focus gap: minor: focusing a row does not select it; vanilla selects the focused entry
112 AbstractSelectionList.nextEntry missing minor: arrow keys do not move the selection between rows in the pack or server lists
113 AbstractSelectionList.extractListItems port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list rows culled to the visible band
114 AbstractSelectionList.extractItem port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list selection outline and row content
115 AbstractSelectionList.extractSelection port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list two fills: outline colour and black inner
116 AbstractSelectionList.getRowBottom skip:other only the LAN-found narration uses it; Horizon has no narrator
117 AbstractSelectionList.narrationPriority skip:other screen-reader priority; Horizon has no narrator
118 AbstractSelectionList.removeEntry skip:other rows are rebuilt from the model when they change (update_list, server list), so there is no single-row removal
119 AbstractSelectionList.narrateListElementPosition skip:other narration only
120 AbstractSelectionList.TrackedList.set skip:java delegate list wrapper
121 AbstractSliderButton.getSprite inline crates/horizon-client/src/ui.rs::slider gap: minor: track highlight follows hover only; keyboard focus does not highlight
122 AbstractSliderButton.getHandleSprite inline crates/horizon-client/src/ui.rs::slider gap: minor: handle highlight follows hover only
123 AbstractSliderButton.updateWidgetNarration skip:other narration only
124 AbstractSliderButton.extractWidgetRenderState port crates/horizon-client/src/ui.rs::slider gap: minor: the label is clipped rather than scrolled
125 AbstractSliderButton.handleCursor port crates/horizon-client/src/widgets.rs::widget_cursor gap: minor: no resize cursor while dragging
126 AbstractSliderButton.setFocused missing minor: keyboard focus does not enable value changes; there is no change-value state
127 AbstractSliderButton.keyPressed missing minor: Left and Right do not move a focused slider; Enter does not toggle it
128 AbstractSliderButton.setValue port crates/horizon-client/src/options_ui.rs::set_slider gap: minor: the 0..1 clamp is done by the caller (ui.rs slider_value)
129 AbstractStringWidget.extractWidgetRenderState port crates/horizon-client/src/screen_draw.rs::string_widget gap: minor: hover tooltip and click cursor for styled text are not drawn
130 AbstractStringWidget.onClick missing minor: clicking a styled label with a click event does nothing here; book links and chat links do work
131 AbstractStringWidget.setMessage skip:ui width is measured at draw time
132 AbstractStringWidget.handleStyleClick missing minor: same as onClick: no click handling for labels
133 AbstractTextAreaWidget.mouseClicked port crates/horizon-client/src/game/books.rs::Game::book_page_click gap: minor: a scrollbar press inside the area is not checked
134 AbstractTextAreaWidget.keyPressed port crates/horizon-client/src/game/books.rs::Game::book_page_key gap: minor: up and down scroll the area in vanilla; not checked here
135 AbstractTextAreaWidget.extractWidgetRenderState port crates/horizon-client/src/game/books.rs::Game::draw_book gap: minor: scroll offset inside the page not verified
136 AbstractTextAreaWidget.isMouseOver port crates/horizon-client/src/screen_draw.rs::inside gap: minor: the scrollbar width is not added to the hit area
137 AbstractTextAreaWidget.extractBackground skip:ui frame drawn by the book screen; no behaviour
138 AbstractTextAreaWidget.extractBorder skip:ui frame sprite; no behaviour
139 AbstractTextAreaWidget.withinContentAreaTopBottom skip:ui visibility cull while drawing lines
140 AbstractWidget.extractRenderState port crates/horizon-client/src/ui.rs::hovered gap: minor: the scissor test is not part of the hover check
141 AbstractWidget.extractTooltipForNextRenderPass port crates/horizon-client/src/ui.rs::tooltip gap: minor: unsure: widget hover delay not checked
142 AbstractWidget.extractScrollingStringOverContents port crates/horizon-client/src/ui.rs::centered_text gap: minor: text is clipped, not scrolled
143 AbstractWidget.mouseClicked port crates/horizon-client/src/title.rs::Title::click gap: minor: click dispatch is per screen; the press sound is audio.rs Audio::play_button_click
144 AbstractWidget.mouseReleased port crates/horizon-client/src/ui.rs::Scroll::release gap: minor: only the scroll release; widget onRelease is per screen
145 AbstractWidget.mouseDragged port crates/horizon-client/src/ui.rs::Scroll::drag gap: minor: only scroll drag; widget onDrag is per screen
146 AbstractWidget.nextFocusPath missing minor: unsure: no per-widget focus path; Horizon focus is per screen
147 AbstractWidget.isMouseOver port crates/horizon-client/src/screen_draw.rs::inside gap: minor: isActive is checked by the caller
148 AbstractWidget.narrationPriority skip:other narration only
149 AbstractWidget.defaultButtonNarrationText skip:other narration only
+144
View File
@@ -0,0 +1,144 @@
BossHealthOverlay.extractBar port crates/horizon-client/src/hud_overlays.rs::boss_overlay background bar, then progress at the lerped width; the notch overlay only when not PROGRESS
BossHealthOverlay.shouldDarkenScreen port crates/horizon-client/src/boss_overlay.rs::BossOverlay::should_darken any bar asks to darken
Button.Builder.build skip:java builder: makes a Plain button and sets its tooltip
ChatComponent.forEachLine port crates/horizon-client/src/chat.rs::Chat::layout visible lines bottom-up with the alpha filter, inlined in layout
ChatComponent.addMessageToDisplayQueue port crates/horizon-client/src/chat.rs::Chat::add_lines wrap at width/scale, keep the scroll when chatting, trim to 100 lines
ChatComponent.addMessageToQueue port crates/horizon-client/src/chat.rs::Chat::add_message newest first, trimmed to 100 messages
ChatComponent.processMessageDeletionQueue missing player: a message the server deletes stays in chat; the delete-chat packet is only named in horizon-protocol/src/ids.rs and never decoded
ChatComponent.deleteMessage missing player: a server message delete does nothing in Horizon; the removed line stays visible
ChatComponent.deleteMessageOrDelay missing player: no 60-tick delayed removal and no deleted marker; see deleteMessage
ChatComponent.refreshTrimmedMessages port crates/horizon-client/src/chat.rs::Chat::rewrap gap: minor: rewrap also resets the scroll to 0; vanilla keeps the position
ChatComponent.scrollChat port crates/horizon-client/src/chat.rs::Chat::scroll_by clamp to the page and clear new-message marker at the bottom
ChatComponent.getHeight port crates/horizon-client/src/chat.rs::ChatOptions::height_px focused or unfocused chat height in px
ChatComponent.defaultUnfocusedPct inline crates/horizon-client/src/chat.rs::ChatOptions::default the default 70/160 is stored as a constant, not computed from the height formula
ChatComponent.getLineHeight port crates/horizon-client/src/chat.rs::ChatOptions::line_height 9 * (line spacing + 1)
ChatComponent.saveAsDraft missing player: Save Chat Drafts does nothing (options_ui.rs notes no drafts yet); text left in the box is not kept for the next open
ChatComponent.createScreen port crates/horizon-client/src/game/chat.rs::Game::open_chat gap: player: no draft is restored; the chat opens with the initial text its caller passes
ChatComponent.preserveCurrentChatScreen missing minor: unsure: Horizon keeps no chat screen across a dimension change; game/nether_portal.rs:577 only leaves Chat alone during a portal effect, the change path was not checked
ChatComponent.storeState inline crates/horizon-client/src/game/remote.rs::Game::poll_remote no snapshot: the Reconfigured arm only resets boss bars and registries, so the chat survives a reconfigure without a copy
ChatComponent.restoreState inline crates/horizon-client/src/game/remote.rs::Game::poll_remote no restore: the chat is never cleared on Reconfigured, so there is nothing to put back
ChatComponent.ClickableTextOnlyGraphicsAccess.updatePose skip:ui pose bookkeeping of the text collector; chat draws with its own scale and translate
ChatComponent.DrawingBackgroundGraphicsAccess.updatePose skip:ui pose bookkeeping of the text collector; chat draws with its own scale and translate
ChatComponent.DrawingBackgroundGraphicsAccess.handleMessage port crates/horizon-client/src/chat.rs::Chat::layout line text drawn at its bottom with the text opacity
ChatComponent.DrawingBackgroundGraphicsAccess.handleTag port crates/horizon-client/src/chat.rs::Chat::layout indicator bar filled from x -4 to -2 with the line alpha
ChatComponent.DrawingFocusedGraphicsAccess.updateLocalMousePos inline crates/horizon-client/src/chat.rs::Chat::line_at the mouse mapped into line space inside line_at
ChatComponent.DrawingFocusedGraphicsAccess.updatePose skip:ui pose bookkeeping; the mouse mapping is done in Chat::line_at
ChatComponent.DrawingFocusedGraphicsAccess.handleMessage port crates/horizon-client/src/chat.rs::Chat::style_at gap: player: no pointing-hand cursor over clickable chat text; only widgets set the cursor (widgets.rs:28)
ChatComponent.DrawingFocusedGraphicsAccess.isMouseOver inline crates/horizon-client/src/chat.rs::Chat::indicator_at the rectangle test of the indicator bar; tag icons are not drawn
ChatComponent.DrawingFocusedGraphicsAccess.handleTagIcon missing minor: no tag icons; Horizon never tags a message as modified, so the Modified icon never shows
ChatComponent.DrawingFocusedGraphicsAccess.showTooltip port crates/horizon-client/src/game/chat.rs::Game::draw_chat_screen gap: minor: every indicator shows the systemSinglePlayer text as its tooltip
Checkbox.adjustWidth missing minor: the checkbox width is never capped or its label wrapped; dialog_screen.rs:137 sets the width to the full label
Checkbox.overflowsRowLimit missing minor: no tooltip for a label that wraps past two rows; Horizon dialog labels never wrap
Checkbox.onPress port crates/horizon-client/src/game/dialogs.rs::Game::dialog_click toggles the boolean input value (dialogs.rs:448)
Checkbox.updateWidgetNarration skip:other narration text; Horizon has no narrator (the Narrator option is stored only)
Checkbox.extractContents port crates/horizon-client/src/game/dialogs.rs::Game::draw_dialog box sprite for checked and focused states, then the label (Part::Check)
Checkbox.Builder.selected skip:java builder setter
Checkbox.Builder.build skip:java builder: makes the checkbox and its tooltip
CommandSuggestions.mouseScrolled port crates/horizon-client/src/chat.rs::ChatScreen::scroll wheel over the suggestion list, clamped to the list
CommandSuggestions.mouseClicked port crates/horizon-client/src/chat.rs::ChatScreen::click click on a suggestion row uses it, else the input box
CommandSuggestions.getUsageNarration skip:other narration text; no narrator in Horizon
CommandSuggestions.sortSuggestions port crates/horizon-client/src/chat.rs::ChatScreen::show_suggestions suggestions starting with the typed word first, including the minecraft: prefix
CommandSuggestions.hasMessageArguments missing minor: a /say or /msg style command with a message argument counts as a command here; Horizon's parse keeps no argument kinds (see update_usage_info comment)
CommandSuggestions.getExceptionMessage port crates/horizon-client/src/chat.rs::ChatScreen::update_usage_info parse errors shown with their context (e.with_context)
CommandSuggestions.fillNodeUsage port crates/horizon-client/src/chat.rs::ChatScreen::update_usage_info smart usage lines, without the literal nodes
CommandSuggestions.recomputeUsageBoxWidth port crates/horizon-client/src/chat.rs::ChatScreen::update_usage_info usage width is the widest line
CommandSuggestions.formatChat port crates/horizon-client/src/chat.rs::ChatScreen::format argument colours over the input
CommandSuggestions.calculateSuggestionSuffix port crates/horizon-client/src/chat.rs::ChatScreen::select the grey suffix for the highlighted suggestion (strip the typed prefix)
CommandSuggestions.extractSuggestions port crates/horizon-client/src/chat.rs::ChatScreen::draw the suggestion list drawn when it is open
CommandSuggestions.extractUsage port crates/horizon-client/src/chat.rs::ChatScreen::draw usage lines drawn upward from the bottom, as vanilla's bottom anchor
CommandSuggestions.getNarrationMessage skip:other narration text; no narrator in Horizon
CommandSuggestions.hasAllowedInput port crates/horizon-client/src/chat.rs::ChatAbilities::allows gap: minor: a /say style command is judged as a command, not a message (see hasMessageArguments)
CommandSuggestions.SuggestionsList.extractRenderState port crates/horizon-client/src/chat.rs::ChatScreen::draw_list rows, scroll marks, highlight and tooltip; gap: minor: no pointing-hand cursor over the rows
CommandSuggestions.SuggestionsList.mouseClicked port crates/horizon-client/src/chat.rs::ChatScreen::click row click selects and uses the suggestion
CommandSuggestions.SuggestionsList.keyPressed port crates/horizon-client/src/chat.rs::ChatScreen::key up, down and tab cycle and use the suggestion
CommandSuggestions.SuggestionsList.cycle port crates/horizon-client/src/chat.rs::ChatScreen::cycle moves the selection and the scroll offset
CommandSuggestions.SuggestionsList.getNarrationMessage skip:other narration text; no narrator in Horizon
ComponentRenderUtils.stripColor port crates/horizon-client/src/chat.rs::Chat::displayed with Chat Colors off the section codes are stripped before wrapping
ContainerObjectSelectionList.nextFocusPath port crates/horizon-client-input/src/gamepad.rs::focus_step gap: minor: picks the nearest target by geometry, not row by row with a wrap to the next entry
ContainerObjectSelectionList.setFocused missing minor: unsure: no list focus model beyond gamepad focus_step; losing focus does not clear a selection here
ContainerObjectSelectionList.updateWidgetNarration skip:other narration text; no narrator in Horizon
ContainerObjectSelectionList.Entry.setFocused missing minor: unsure: focus inside a row is not tracked; focus_step works on target rectangles
ContainerObjectSelectionList.Entry.focusPathAtIndex missing minor: unsure: no per-row focus path; see focus_step
ContainerObjectSelectionList.Entry.nextFocusPath port crates/horizon-client-input/src/gamepad.rs::focus_step gap: minor: moves by nearest target rectangle, not by child index within the row
ContainerObjectSelectionList.Entry.updateNarration skip:other narration text; no narrator in Horizon
CycleButton.extractContents port crates/horizon-client/src/options_ui.rs::OptionsUi::draw option button sprite and its label
CycleButton.onPress port crates/horizon-client/src/options_ui.rs::Opt::cycle click cycles forward; the back flag comes from the caller
CycleButton.getCycledValue skip:other only feeds the narration of the next value
CycleButton.mouseScrolled missing player: the mouse wheel over an option button does not change its value; OptionsUi::scroll_at only scrolls the list
CycleButton.updateValue inline crates/horizon-client/src/options_ui.rs::Opt::cycle labels are read live from Settings (Opt::label), so no cached message needs updating
CycleButton.createLabelForValue port crates/horizon-client/src/options_ui.rs::Opt::label value label or full name, from the setting
CycleButton.updateWidgetNarration skip:other narration text; no narrator in Horizon
CycleButton.createDefaultNarrationMessage skip:other narration text; no narrator in Horizon
CycleButton.builder skip:java builder
CycleButton.booleanBuilder skip:java builder
CycleButton.onOffBuilder skip:java builder
CycleButton.Builder.withValues skip:java builder
CycleButton.Builder.create skip:java builder: makes the cycle button and its initial value
CycleButton.ValueListSupplier.create skip:java value list copy
DebugScreenOverlay.<init> skip:java constructs the chart objects; Horizon's DebugCharts is plain state
DebugScreenOverlay.formatChart port crates/horizon-client/src/game/debug_keys.rs::Game::debug_chart_lines the [key] name visible or hidden line
DebugScreenOverlay.formatKeybind inline crates/horizon-client/src/game/debug_keys.rs::Game::debug_chart_lines the key closure inside debug_chart_lines
DebugScreenOverlay.getServerLevel missing minor: F3 draws no chunk or level lines; draw_debug_overlay has no chunk data
DebugScreenOverlay.getLevel missing minor: F3 draws no chunk or level lines; draw_debug_overlay has no chunk data
DebugScreenOverlay.getServerChunk missing minor: F3 draws no server chunk line
DebugScreenOverlay.getClientChunk missing minor: F3 draws no client chunk line
DebugScreenOverlay.showDebugScreen port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay debug on and (HUD shown or a screen open)
DebugScreenOverlay.showProfilerChart missing minor: no profiler chart; the profiling chart key is used up and draws nothing (debug_keys.rs:662)
DebugScreenOverlay.showNetworkCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::draw network chart drawn when its flag is set
DebugScreenOverlay.showFpsCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::draw fps chart drawn when its flag is set
DebugScreenOverlay.showLightmapTexture port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay lightmap drawn when its flag is set (debug_keys.rs:473)
DebugScreenOverlay.toggleNetworkCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::toggle_network toggles the network chart and clears the others
DebugScreenOverlay.toggleFpsCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::toggle_fps toggles the fps chart and clears the others
DebugScreenOverlay.toggleLightmapTexture port crates/horizon-client/src/debug_chart.rs::DebugCharts::toggle_lightmap toggles the lightmap and clears the others
DebugScreenOverlay.toggleProfilerChart missing minor: no profiler chart (see showProfilerChart)
DebugScreenOverlay.logRemoteSample missing minor: unsure: the debug_sample packet is only named in horizon-protocol/src/ids.rs, so a server's samples are not logged
EditBox.createNarrationMessage skip:other narration text; no narrator in Horizon
EditBox.getHighlighted port crates/horizon-client/src/ui.rs::EditBox::selected_text the text between cursor and highlight
EditBox.moveCursorTo port crates/horizon-client/src/ui.rs::EditBox::set_cursor sets the cursor and keeps the highlight unless extending
EditBox.setCursorPosition port crates/horizon-client/src/ui.rs::EditBox::set_cursor clamps and scrolls to the cursor
EditBox.canConsumeInput missing minor: unsure: no editable flag on the box; whether a box takes typed input is the caller's focus routing
EditBox.preeditUpdated missing minor: no IME composition; Horizon has no preedit input
EditBox.selectWord port crates/horizon-client/src/ui.rs::EditBox::click a double click selects the word (the double flag)
EditBox.applyFormat port crates/horizon-client/src/ui.rs::EditBox::draw the format text passed to draw
EditBox.updateTextPosition port crates/horizon-client/src/ui.rs::EditBox::text_x text_x of the shown part; text_y is its sibling
EditBox.setMaxLength port crates/horizon-client/src/ui.rs::Caret::sync gap: minor: sets the limit only; a longer value is not cut to it
EditBox.setFocused port crates/horizon-client/src/ui.rs::Caret::draw focus restarts the blink clock here; gap: minor: no IME or narration side effects
EditBox.setEditable missing minor: unsure: no read-only flag on the box in ui.rs; a box vanilla locks would accept typing
EditBox.setHighlightPos port crates/horizon-client/src/ui.rs::EditBox::set_cursor sets the highlight and scrolls
EditBox.setHint inline crates/horizon-client/src/title/create_world.rs::Title::create_field the hint is passed when the box is made and drawn while it is empty and unfocused
FittingMultiLineTextWidget.setWidth skip:ui layout: wrap width
FittingMultiLineTextWidget.minimizeHeight skip:ui layout: height to content
FittingMultiLineTextWidget.extractContents port crates/horizon-client/src/game/dialogs.rs::Game::draw_dialog message lines drawn as text parts
FocusableTextWidget.updateWidgetNarration skip:other narration text; no narrator in Horizon
FocusableTextWidget.extractWidgetRenderState port crates/horizon-client/src/game/lan_screen.rs::Game::draw_restrictions gap: minor: text only; no focus outline or background fill
FocusableTextWidget.updateWidth skip:ui layout: width from the message
FocusableTextWidget.updateHeight skip:ui layout: height from the wrapped lines
FocusableTextWidget.setMessage skip:ui layout: size follows the message
FocusableTextWidget.keyPressed missing minor: unsure: keyboard does not activate a clickable style in a focused text line; no such focus in Horizon
FocusableTextWidget.builder skip:java builder
FriendsButton.refreshIncomingRequestCount skip:service Microsoft friend requests; Horizon's friends use its own invite codes (multiplayer.rs:90)
FriendsButton.extractContents skip:service draws the request badge; Horizon has no incoming request count
IMEPreeditOverlay.extractRenderState missing minor: no IME composition overlay; Horizon has no preedit input
ImageButton.extractContents port crates/horizon-client/src/game/recipe_book.rs::Game::draw_book_panel tab buttons drawn with their sprite; the other vanilla ImageButton screens are not in Horizon
ImageWidget.texture skip:java factory
ImageWidget.Sprite.extractWidgetRenderState skip:other picture of a popup or social tab; Horizon's lock popup has no picture
ImageWidget.Texture.extractWidgetRenderState skip:other picture of a popup or social tab; Horizon's lock popup has no picture
ItemDisplayWidget.extractWidgetRenderState missing player: a dialog's item body is not drawn (dialog_screen.rs Body::Item gives no element)
ItemDisplayWidget.updateWidgetNarration skip:other narration text; no narrator in Horizon
LoadingDotsWidget.extractWidgetRenderState port crates/horizon-client/src/multiplayer.rs::Screen::draw the scanning label and the animated dots under it on the LAN row
LockIconButton.createNarrationMessage skip:other narration text; no narrator in Horizon
LockIconButton.extractContents port crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view lock or unlock sprite by state
LogoRenderer.extractRenderState port crates/horizon-client/src/title.rs::Title::draw logo top 44 rows and edition banner; gap: minor: no easter-egg logo variant
MultiLineEditBox.updateWidgetNarration skip:other narration text; no narrator in Horizon
MultiLineEditBox.onClick port crates/horizon-client/src/screen_draw.rs::TextField::click click places the cursor; gap: minor: no double-click word select
MultiLineEditBox.onDrag missing minor: unsure: TextField has no drag selection in screen_draw.rs
MultiLineEditBox.charTyped port crates/horizon-client/src/screen_draw.rs::TextField::insert_text typed text replaces the selection or goes at the cursor
MultiLineEditBox.preeditUpdated missing minor: no IME composition; Horizon has no preedit input
MultiLineEditBox.extractContents port crates/horizon-client/src/screen_draw.rs::TextField::draw placeholder, lines, caret and selection highlight
MultiLineEditBox.extractDecorations missing minor: no character count under a limited box; TextField has no limit
MultiLineEditBox.scrollToCursor port crates/horizon-client/src/screen_draw.rs::TextField::scroll_to keeps the cursor line in view
MultiLineEditBox.seekCursorScreen port crates/horizon-client/src/screen_draw.rs::TextField::click maps the pointer to a cursor position
MultiLineEditBox.setFocused inline crates/horizon-client/src/screen_draw.rs::TextField::draw gap: minor: focus does not restart the caret blink here; the caller passes the blink clock
MultiLineEditBox.Builder.build skip:java builder
MultiLineTextWidget.getHeight skip:ui layout: wrapped line count times 9; Measure::split does the wrap when drawing
MultiLineTextWidget.getFreshCacheKey skip:java cache key for the wrapped lines
1 BossHealthOverlay.extractBar port crates/horizon-client/src/hud_overlays.rs::boss_overlay background bar, then progress at the lerped width; the notch overlay only when not PROGRESS
2 BossHealthOverlay.shouldDarkenScreen port crates/horizon-client/src/boss_overlay.rs::BossOverlay::should_darken any bar asks to darken
3 Button.Builder.build skip:java builder: makes a Plain button and sets its tooltip
4 ChatComponent.forEachLine port crates/horizon-client/src/chat.rs::Chat::layout visible lines bottom-up with the alpha filter, inlined in layout
5 ChatComponent.addMessageToDisplayQueue port crates/horizon-client/src/chat.rs::Chat::add_lines wrap at width/scale, keep the scroll when chatting, trim to 100 lines
6 ChatComponent.addMessageToQueue port crates/horizon-client/src/chat.rs::Chat::add_message newest first, trimmed to 100 messages
7 ChatComponent.processMessageDeletionQueue missing player: a message the server deletes stays in chat; the delete-chat packet is only named in horizon-protocol/src/ids.rs and never decoded
8 ChatComponent.deleteMessage missing player: a server message delete does nothing in Horizon; the removed line stays visible
9 ChatComponent.deleteMessageOrDelay missing player: no 60-tick delayed removal and no deleted marker; see deleteMessage
10 ChatComponent.refreshTrimmedMessages port crates/horizon-client/src/chat.rs::Chat::rewrap gap: minor: rewrap also resets the scroll to 0; vanilla keeps the position
11 ChatComponent.scrollChat port crates/horizon-client/src/chat.rs::Chat::scroll_by clamp to the page and clear new-message marker at the bottom
12 ChatComponent.getHeight port crates/horizon-client/src/chat.rs::ChatOptions::height_px focused or unfocused chat height in px
13 ChatComponent.defaultUnfocusedPct inline crates/horizon-client/src/chat.rs::ChatOptions::default the default 70/160 is stored as a constant, not computed from the height formula
14 ChatComponent.getLineHeight port crates/horizon-client/src/chat.rs::ChatOptions::line_height 9 * (line spacing + 1)
15 ChatComponent.saveAsDraft missing player: Save Chat Drafts does nothing (options_ui.rs notes no drafts yet); text left in the box is not kept for the next open
16 ChatComponent.createScreen port crates/horizon-client/src/game/chat.rs::Game::open_chat gap: player: no draft is restored; the chat opens with the initial text its caller passes
17 ChatComponent.preserveCurrentChatScreen missing minor: unsure: Horizon keeps no chat screen across a dimension change; game/nether_portal.rs:577 only leaves Chat alone during a portal effect, the change path was not checked
18 ChatComponent.storeState inline crates/horizon-client/src/game/remote.rs::Game::poll_remote no snapshot: the Reconfigured arm only resets boss bars and registries, so the chat survives a reconfigure without a copy
19 ChatComponent.restoreState inline crates/horizon-client/src/game/remote.rs::Game::poll_remote no restore: the chat is never cleared on Reconfigured, so there is nothing to put back
20 ChatComponent.ClickableTextOnlyGraphicsAccess.updatePose skip:ui pose bookkeeping of the text collector; chat draws with its own scale and translate
21 ChatComponent.DrawingBackgroundGraphicsAccess.updatePose skip:ui pose bookkeeping of the text collector; chat draws with its own scale and translate
22 ChatComponent.DrawingBackgroundGraphicsAccess.handleMessage port crates/horizon-client/src/chat.rs::Chat::layout line text drawn at its bottom with the text opacity
23 ChatComponent.DrawingBackgroundGraphicsAccess.handleTag port crates/horizon-client/src/chat.rs::Chat::layout indicator bar filled from x -4 to -2 with the line alpha
24 ChatComponent.DrawingFocusedGraphicsAccess.updateLocalMousePos inline crates/horizon-client/src/chat.rs::Chat::line_at the mouse mapped into line space inside line_at
25 ChatComponent.DrawingFocusedGraphicsAccess.updatePose skip:ui pose bookkeeping; the mouse mapping is done in Chat::line_at
26 ChatComponent.DrawingFocusedGraphicsAccess.handleMessage port crates/horizon-client/src/chat.rs::Chat::style_at gap: player: no pointing-hand cursor over clickable chat text; only widgets set the cursor (widgets.rs:28)
27 ChatComponent.DrawingFocusedGraphicsAccess.isMouseOver inline crates/horizon-client/src/chat.rs::Chat::indicator_at the rectangle test of the indicator bar; tag icons are not drawn
28 ChatComponent.DrawingFocusedGraphicsAccess.handleTagIcon missing minor: no tag icons; Horizon never tags a message as modified, so the Modified icon never shows
29 ChatComponent.DrawingFocusedGraphicsAccess.showTooltip port crates/horizon-client/src/game/chat.rs::Game::draw_chat_screen gap: minor: every indicator shows the systemSinglePlayer text as its tooltip
30 Checkbox.adjustWidth missing minor: the checkbox width is never capped or its label wrapped; dialog_screen.rs:137 sets the width to the full label
31 Checkbox.overflowsRowLimit missing minor: no tooltip for a label that wraps past two rows; Horizon dialog labels never wrap
32 Checkbox.onPress port crates/horizon-client/src/game/dialogs.rs::Game::dialog_click toggles the boolean input value (dialogs.rs:448)
33 Checkbox.updateWidgetNarration skip:other narration text; Horizon has no narrator (the Narrator option is stored only)
34 Checkbox.extractContents port crates/horizon-client/src/game/dialogs.rs::Game::draw_dialog box sprite for checked and focused states, then the label (Part::Check)
35 Checkbox.Builder.selected skip:java builder setter
36 Checkbox.Builder.build skip:java builder: makes the checkbox and its tooltip
37 CommandSuggestions.mouseScrolled port crates/horizon-client/src/chat.rs::ChatScreen::scroll wheel over the suggestion list, clamped to the list
38 CommandSuggestions.mouseClicked port crates/horizon-client/src/chat.rs::ChatScreen::click click on a suggestion row uses it, else the input box
39 CommandSuggestions.getUsageNarration skip:other narration text; no narrator in Horizon
40 CommandSuggestions.sortSuggestions port crates/horizon-client/src/chat.rs::ChatScreen::show_suggestions suggestions starting with the typed word first, including the minecraft: prefix
41 CommandSuggestions.hasMessageArguments missing minor: a /say or /msg style command with a message argument counts as a command here; Horizon's parse keeps no argument kinds (see update_usage_info comment)
42 CommandSuggestions.getExceptionMessage port crates/horizon-client/src/chat.rs::ChatScreen::update_usage_info parse errors shown with their context (e.with_context)
43 CommandSuggestions.fillNodeUsage port crates/horizon-client/src/chat.rs::ChatScreen::update_usage_info smart usage lines, without the literal nodes
44 CommandSuggestions.recomputeUsageBoxWidth port crates/horizon-client/src/chat.rs::ChatScreen::update_usage_info usage width is the widest line
45 CommandSuggestions.formatChat port crates/horizon-client/src/chat.rs::ChatScreen::format argument colours over the input
46 CommandSuggestions.calculateSuggestionSuffix port crates/horizon-client/src/chat.rs::ChatScreen::select the grey suffix for the highlighted suggestion (strip the typed prefix)
47 CommandSuggestions.extractSuggestions port crates/horizon-client/src/chat.rs::ChatScreen::draw the suggestion list drawn when it is open
48 CommandSuggestions.extractUsage port crates/horizon-client/src/chat.rs::ChatScreen::draw usage lines drawn upward from the bottom, as vanilla's bottom anchor
49 CommandSuggestions.getNarrationMessage skip:other narration text; no narrator in Horizon
50 CommandSuggestions.hasAllowedInput port crates/horizon-client/src/chat.rs::ChatAbilities::allows gap: minor: a /say style command is judged as a command, not a message (see hasMessageArguments)
51 CommandSuggestions.SuggestionsList.extractRenderState port crates/horizon-client/src/chat.rs::ChatScreen::draw_list rows, scroll marks, highlight and tooltip; gap: minor: no pointing-hand cursor over the rows
52 CommandSuggestions.SuggestionsList.mouseClicked port crates/horizon-client/src/chat.rs::ChatScreen::click row click selects and uses the suggestion
53 CommandSuggestions.SuggestionsList.keyPressed port crates/horizon-client/src/chat.rs::ChatScreen::key up, down and tab cycle and use the suggestion
54 CommandSuggestions.SuggestionsList.cycle port crates/horizon-client/src/chat.rs::ChatScreen::cycle moves the selection and the scroll offset
55 CommandSuggestions.SuggestionsList.getNarrationMessage skip:other narration text; no narrator in Horizon
56 ComponentRenderUtils.stripColor port crates/horizon-client/src/chat.rs::Chat::displayed with Chat Colors off the section codes are stripped before wrapping
57 ContainerObjectSelectionList.nextFocusPath port crates/horizon-client-input/src/gamepad.rs::focus_step gap: minor: picks the nearest target by geometry, not row by row with a wrap to the next entry
58 ContainerObjectSelectionList.setFocused missing minor: unsure: no list focus model beyond gamepad focus_step; losing focus does not clear a selection here
59 ContainerObjectSelectionList.updateWidgetNarration skip:other narration text; no narrator in Horizon
60 ContainerObjectSelectionList.Entry.setFocused missing minor: unsure: focus inside a row is not tracked; focus_step works on target rectangles
61 ContainerObjectSelectionList.Entry.focusPathAtIndex missing minor: unsure: no per-row focus path; see focus_step
62 ContainerObjectSelectionList.Entry.nextFocusPath port crates/horizon-client-input/src/gamepad.rs::focus_step gap: minor: moves by nearest target rectangle, not by child index within the row
63 ContainerObjectSelectionList.Entry.updateNarration skip:other narration text; no narrator in Horizon
64 CycleButton.extractContents port crates/horizon-client/src/options_ui.rs::OptionsUi::draw option button sprite and its label
65 CycleButton.onPress port crates/horizon-client/src/options_ui.rs::Opt::cycle click cycles forward; the back flag comes from the caller
66 CycleButton.getCycledValue skip:other only feeds the narration of the next value
67 CycleButton.mouseScrolled missing player: the mouse wheel over an option button does not change its value; OptionsUi::scroll_at only scrolls the list
68 CycleButton.updateValue inline crates/horizon-client/src/options_ui.rs::Opt::cycle labels are read live from Settings (Opt::label), so no cached message needs updating
69 CycleButton.createLabelForValue port crates/horizon-client/src/options_ui.rs::Opt::label value label or full name, from the setting
70 CycleButton.updateWidgetNarration skip:other narration text; no narrator in Horizon
71 CycleButton.createDefaultNarrationMessage skip:other narration text; no narrator in Horizon
72 CycleButton.builder skip:java builder
73 CycleButton.booleanBuilder skip:java builder
74 CycleButton.onOffBuilder skip:java builder
75 CycleButton.Builder.withValues skip:java builder
76 CycleButton.Builder.create skip:java builder: makes the cycle button and its initial value
77 CycleButton.ValueListSupplier.create skip:java value list copy
78 DebugScreenOverlay.<init> skip:java constructs the chart objects; Horizon's DebugCharts is plain state
79 DebugScreenOverlay.formatChart port crates/horizon-client/src/game/debug_keys.rs::Game::debug_chart_lines the [key] name visible or hidden line
80 DebugScreenOverlay.formatKeybind inline crates/horizon-client/src/game/debug_keys.rs::Game::debug_chart_lines the key closure inside debug_chart_lines
81 DebugScreenOverlay.getServerLevel missing minor: F3 draws no chunk or level lines; draw_debug_overlay has no chunk data
82 DebugScreenOverlay.getLevel missing minor: F3 draws no chunk or level lines; draw_debug_overlay has no chunk data
83 DebugScreenOverlay.getServerChunk missing minor: F3 draws no server chunk line
84 DebugScreenOverlay.getClientChunk missing minor: F3 draws no client chunk line
85 DebugScreenOverlay.showDebugScreen port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay debug on and (HUD shown or a screen open)
86 DebugScreenOverlay.showProfilerChart missing minor: no profiler chart; the profiling chart key is used up and draws nothing (debug_keys.rs:662)
87 DebugScreenOverlay.showNetworkCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::draw network chart drawn when its flag is set
88 DebugScreenOverlay.showFpsCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::draw fps chart drawn when its flag is set
89 DebugScreenOverlay.showLightmapTexture port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay lightmap drawn when its flag is set (debug_keys.rs:473)
90 DebugScreenOverlay.toggleNetworkCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::toggle_network toggles the network chart and clears the others
91 DebugScreenOverlay.toggleFpsCharts port crates/horizon-client/src/debug_chart.rs::DebugCharts::toggle_fps toggles the fps chart and clears the others
92 DebugScreenOverlay.toggleLightmapTexture port crates/horizon-client/src/debug_chart.rs::DebugCharts::toggle_lightmap toggles the lightmap and clears the others
93 DebugScreenOverlay.toggleProfilerChart missing minor: no profiler chart (see showProfilerChart)
94 DebugScreenOverlay.logRemoteSample missing minor: unsure: the debug_sample packet is only named in horizon-protocol/src/ids.rs, so a server's samples are not logged
95 EditBox.createNarrationMessage skip:other narration text; no narrator in Horizon
96 EditBox.getHighlighted port crates/horizon-client/src/ui.rs::EditBox::selected_text the text between cursor and highlight
97 EditBox.moveCursorTo port crates/horizon-client/src/ui.rs::EditBox::set_cursor sets the cursor and keeps the highlight unless extending
98 EditBox.setCursorPosition port crates/horizon-client/src/ui.rs::EditBox::set_cursor clamps and scrolls to the cursor
99 EditBox.canConsumeInput missing minor: unsure: no editable flag on the box; whether a box takes typed input is the caller's focus routing
100 EditBox.preeditUpdated missing minor: no IME composition; Horizon has no preedit input
101 EditBox.selectWord port crates/horizon-client/src/ui.rs::EditBox::click a double click selects the word (the double flag)
102 EditBox.applyFormat port crates/horizon-client/src/ui.rs::EditBox::draw the format text passed to draw
103 EditBox.updateTextPosition port crates/horizon-client/src/ui.rs::EditBox::text_x text_x of the shown part; text_y is its sibling
104 EditBox.setMaxLength port crates/horizon-client/src/ui.rs::Caret::sync gap: minor: sets the limit only; a longer value is not cut to it
105 EditBox.setFocused port crates/horizon-client/src/ui.rs::Caret::draw focus restarts the blink clock here; gap: minor: no IME or narration side effects
106 EditBox.setEditable missing minor: unsure: no read-only flag on the box in ui.rs; a box vanilla locks would accept typing
107 EditBox.setHighlightPos port crates/horizon-client/src/ui.rs::EditBox::set_cursor sets the highlight and scrolls
108 EditBox.setHint inline crates/horizon-client/src/title/create_world.rs::Title::create_field the hint is passed when the box is made and drawn while it is empty and unfocused
109 FittingMultiLineTextWidget.setWidth skip:ui layout: wrap width
110 FittingMultiLineTextWidget.minimizeHeight skip:ui layout: height to content
111 FittingMultiLineTextWidget.extractContents port crates/horizon-client/src/game/dialogs.rs::Game::draw_dialog message lines drawn as text parts
112 FocusableTextWidget.updateWidgetNarration skip:other narration text; no narrator in Horizon
113 FocusableTextWidget.extractWidgetRenderState port crates/horizon-client/src/game/lan_screen.rs::Game::draw_restrictions gap: minor: text only; no focus outline or background fill
114 FocusableTextWidget.updateWidth skip:ui layout: width from the message
115 FocusableTextWidget.updateHeight skip:ui layout: height from the wrapped lines
116 FocusableTextWidget.setMessage skip:ui layout: size follows the message
117 FocusableTextWidget.keyPressed missing minor: unsure: keyboard does not activate a clickable style in a focused text line; no such focus in Horizon
118 FocusableTextWidget.builder skip:java builder
119 FriendsButton.refreshIncomingRequestCount skip:service Microsoft friend requests; Horizon's friends use its own invite codes (multiplayer.rs:90)
120 FriendsButton.extractContents skip:service draws the request badge; Horizon has no incoming request count
121 IMEPreeditOverlay.extractRenderState missing minor: no IME composition overlay; Horizon has no preedit input
122 ImageButton.extractContents port crates/horizon-client/src/game/recipe_book.rs::Game::draw_book_panel tab buttons drawn with their sprite; the other vanilla ImageButton screens are not in Horizon
123 ImageWidget.texture skip:java factory
124 ImageWidget.Sprite.extractWidgetRenderState skip:other picture of a popup or social tab; Horizon's lock popup has no picture
125 ImageWidget.Texture.extractWidgetRenderState skip:other picture of a popup or social tab; Horizon's lock popup has no picture
126 ItemDisplayWidget.extractWidgetRenderState missing player: a dialog's item body is not drawn (dialog_screen.rs Body::Item gives no element)
127 ItemDisplayWidget.updateWidgetNarration skip:other narration text; no narrator in Horizon
128 LoadingDotsWidget.extractWidgetRenderState port crates/horizon-client/src/multiplayer.rs::Screen::draw the scanning label and the animated dots under it on the LAN row
129 LockIconButton.createNarrationMessage skip:other narration text; no narrator in Horizon
130 LockIconButton.extractContents port crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view lock or unlock sprite by state
131 LogoRenderer.extractRenderState port crates/horizon-client/src/title.rs::Title::draw logo top 44 rows and edition banner; gap: minor: no easter-egg logo variant
132 MultiLineEditBox.updateWidgetNarration skip:other narration text; no narrator in Horizon
133 MultiLineEditBox.onClick port crates/horizon-client/src/screen_draw.rs::TextField::click click places the cursor; gap: minor: no double-click word select
134 MultiLineEditBox.onDrag missing minor: unsure: TextField has no drag selection in screen_draw.rs
135 MultiLineEditBox.charTyped port crates/horizon-client/src/screen_draw.rs::TextField::insert_text typed text replaces the selection or goes at the cursor
136 MultiLineEditBox.preeditUpdated missing minor: no IME composition; Horizon has no preedit input
137 MultiLineEditBox.extractContents port crates/horizon-client/src/screen_draw.rs::TextField::draw placeholder, lines, caret and selection highlight
138 MultiLineEditBox.extractDecorations missing minor: no character count under a limited box; TextField has no limit
139 MultiLineEditBox.scrollToCursor port crates/horizon-client/src/screen_draw.rs::TextField::scroll_to keeps the cursor line in view
140 MultiLineEditBox.seekCursorScreen port crates/horizon-client/src/screen_draw.rs::TextField::click maps the pointer to a cursor position
141 MultiLineEditBox.setFocused inline crates/horizon-client/src/screen_draw.rs::TextField::draw gap: minor: focus does not restart the caret blink here; the caller passes the blink clock
142 MultiLineEditBox.Builder.build skip:java builder
143 MultiLineTextWidget.getHeight skip:ui layout: wrapped line count times 9; Measure::split does the wrap when drawing
144 MultiLineTextWidget.getFreshCacheKey skip:java cache key for the wrapped lines
+144
View File
@@ -0,0 +1,144 @@
MultilineTextField.setCharacterLimit port crates/horizon-client/src/game/books.rs::book_page_box gap: minor: only the book page sets a character limit (PAGE_CHARS); other MultiLineEditBox users are not ported
MultilineTextField.setLineLimit inline crates/horizon-client/src/game/books.rs::Game::page_keep the 14-line limit (LINES) is checked in page_keep; there is no limit field
MultilineTextField.setValue port crates/horizon-client/src/ui.rs::EditBox::set_value gap: minor: no line-limit check when the text is set (allowOverflowLineLimit path)
MultilineTextField.insertText port crates/horizon-client/src/ui.rs::EditBox::insert_text the line limit is checked by Game::page_keep, not here
MultilineTextField.deleteText port crates/horizon-client/src/ui.rs::EditBox::delete_chars
MultilineTextField.getSelected port crates/horizon-client/src/ui.rs::EditBox::selected
MultilineTextField.getLineAtCursor port crates/horizon-client/src/game/books.rs::Game::caret_on the visual row holding the caret, with its x
MultilineTextField.getLineView port crates/horizon-client/src/game/books.rs::Game::page_rows visual rows as character ranges
MultilineTextField.seekCursor port crates/horizon-client/src/ui.rs::EditBox::set_cursor
MultilineTextField.seekCursorLine port crates/horizon-client/src/game/books.rs::Game::book_move_line gap: minor: column kept without vanilla's 2 px bias (LINE_SEEK_PIXEL_BIAS)
MultilineTextField.seekCursorToPoint port crates/horizon-client/src/game/books.rs::Game::page_index_at
MultilineTextField.selectWordAtCursor missing player: double-clicking a word on a book page does not select it; Game::book_page_click only sets the caret
MultilineTextField.keyPressed port crates/horizon-client/src/game/books.rs::Game::book_input gap: player: Home and End go to the start and end of the whole page, not of the visual line (EditBox::key); Enter, arrows and Ctrl keys are handled
MultilineTextField.getSelectedText port crates/horizon-client/src/ui.rs::EditBox::selected_text
MultilineTextField.getCursorLineView inline crates/horizon-client/src/game/books.rs::Game::book_move_line gap: player: Home and End do not use the caret's line range (see keyPressed)
MultilineTextField.getNextWord port crates/horizon-client/src/ui.rs::multiline_word_position start of the next word; Ctrl+Right and Ctrl+Delete reach it through EditBox::word_position
MultilineTextField.getWordEndPosition missing minor: the word end only feeds selectWordAtCursor, which is missing for book pages
MultilineTextField.onValueChange inline crates/horizon-client/src/game/books.rs::Game::page_keep the page text is stored there after the limit check; visual rows are computed on demand by page_rows
MultilineTextField.reflowDisplayLines port crates/horizon-client/src/game/books.rs::Game::page_rows same wrap breaks as font.split
MultilineTextField.truncateFullText port crates/horizon-client/src/ui.rs::EditBox::set_value truncates to max_length characters
MultilineTextField.truncateInsertionText inline crates/horizon-client/src/ui.rs::EditBox::insert_text room left under max_length
MultilineTextField.overflowsLineLimit port crates/horizon-client/src/game/books.rs::Game::page_keep counts page_rows, which adds the row after a trailing newline as vanilla does
ObjectSelectionList.nextFocusPath missing minor: no arrow-key focus or selection in the title, server or pack lists
ObjectSelectionList.updateWidgetNarration skip:other screen-reader narration; Horizon has no narration output
OptionsList.addBig port crates/horizon-client/src/options_ui.rs::OptionsUi::layout Row::Big: 310 wide at width/2 - 155
OptionsList.addHeader port crates/horizon-client/src/options_ui.rs::OptionsUi::layout gap: minor: the header is centred text, not a focusable widget
OptionsList.findOption skip:ui widget lookup only; rows are rebuilt from Settings in OptionsUi::layout each frame
OptionsList.applyUnsavedChanges inline crates/horizon-client/src/options_ui.rs::set_slider gap: minor: delayed sliders (render, simulation, biome blend distance, wheel sensitivity) apply on every step, not 600 ms after the last move or on close
OptionsList.resetOption inline crates/horizon-client/src/options_ui.rs::OptionsUi::slider_shown gap: minor: only sliders show the stored value at once; other options redraw from Settings each frame
OptionsList.Entry.big port crates/horizon-client/src/options_ui.rs::option_widget 310 wide; the row's place is OptionsUi::layout (Row::Big)
OptionsList.Entry.small port crates/horizon-client/src/options_ui.rs::option_widget pair placement at width/2 - 155 and + 5 in OptionsUi::layout (Row::Pair)
OptionsList.Entry.extractContent inline crates/horizon-client/src/options_ui.rs::OptionsUi::layout positions the row's widgets; OptionsUi::draw paints them
OptionsList.Entry.findOption skip:ui widget lookup only; rows are rebuilt from Settings each frame
OptionsList.HeaderEntry.extractContent inline crates/horizon-client/src/options_ui.rs::OptionsUi::layout header centred on the row (Row::Header)
PlainTextButton.extractContents missing player: the title's bottom copyright text that opens Credits is not a button; Horizon draws "Not affiliated with Mojang or Microsoft" there instead
PlayerFaceExtractor.extractHat port crates/horizon-client/src/tab_list.rs::face hat layer: UV 40, flipped for Dinnerbone and Grumm
PlayerFaceWidget.extractWidgetRenderState skip:service head in the friends list (AbstractFriendsEntryContainerWidget)
PlayerSkinWidget.extractWidgetRenderState skip:service skin preview on the chat report screen (SkinReportScreen)
PlayerSkinWidget.onDrag skip:service drag-to-rotate of the chat report skin preview
PlayerTabOverlay.extractTablistScore inline crates/horizon-client/src/tab_list.rs::TabList::layout the score column is drawn in layout; hearts go through TabList::hearts
PopupScreen.init port crates/horizon-client/src/game/lan_screen.rs::Popup::new gap: minor: only the lock question (title, message, Yes and No); images and extra buttons are not ported
PopupScreen.buildButtonRow inline crates/horizon-client/src/game/lan_screen.rs::Popup::new two buttons min((214 - 6) / 2, 150) wide, 6 apart
PopupScreen.repositionElements inline crates/horizon-client/src/game/lan_screen.rs::Popup::new centres the popup on the screen
PopupScreen.extractBackground port crates/horizon-client/src/game/lan_screen.rs::Game::draw_lock_question dimmed gradient, then the popup background sprite
PopupScreen.getNarrationMessage skip:other screen-reader text; Horizon has no narration output
PopupScreen.onClose port crates/horizon-client/src/game/lan_screen.rs::Game::world_options_escape Escape on the lock question returns to the options page
PopupScreen.Builder.addButton skip:java builder setter; Horizon's lock popup has fixed Yes and No buttons
PopupScreen.Builder.build skip:java builder; Horizon constructs the popup directly
RealmsButton.extractContents skip:service Realms button
ScrollableLayout.setMinWidth skip:ui sizing only; each screen sizes its own scroll area (dialog_screen.rs, server_links.rs, lan_screen.rs)
ScrollableLayout.setMinHeight skip:ui sizing only; same screens
ScrollableLayout.setMaxHeight skip:ui sizing only; same screens
ScrollableLayout.arrangeElements skip:ui scrollbar reserve and layout live in each screen's own code (10 px each side in dialog and LAN screens)
ScrollableLayout.Container.refreshChildren skip:ui children are laid out each frame
ScrollableLayout.Container.extractWidgetRenderState skip:ui each screen draws its own clipped list (server links, dialog, LAN)
ScrollableLayout.Container.getBorderForArrowNavigation missing minor: arrow-key focus moves across the list are not ported; Horizon lists have no keyboard focus
ScrollableLayout.Container.setFocused missing minor: focusing a row does not scroll it into view; Horizon lists have no keyboard focus
ScrollableLayout.Container.setX skip:ui positions set by each screen's layout
ScrollableLayout.Container.setY skip:ui positions set by each screen's layout
ScrollableLayout.Container.setScrollAmount inline crates/horizon-client/src/game/server_links.rs::Game::server_links_scroll gap: minor: clamps the server links list only; other scroll areas clamp in their own code
SelectableEntry.mouseOverIcon port crates/horizon-client/src/pack_screen.rs::PackScreen::entry_click 32 px icon of a pack row; the world row's icon uses the same test in Title::click_action
SelectableEntry.mouseOverLeftHalf port crates/horizon-client/src/pack_screen.rs::PackScreen::entry_click left 16 px of the pack icon (unselect)
SelectableEntry.mouseOverRightHalf port crates/horizon-client/src/multiplayer.rs::over_right_half join half of a server row
SelectableEntry.mouseOverTopRightQuarter port crates/horizon-client/src/pack_screen.rs::PackScreen::entry_click move-up arrow of a pack row
SelectableEntry.mouseOverBottomRightQuarter port crates/horizon-client/src/pack_screen.rs::PackScreen::entry_click move-down arrow of a pack row
SelectableEntry.mouseOverTopLeftQuarter port crates/horizon-client/src/multiplayer.rs::over_top_left move-up arrow of a server row
SelectableEntry.mouseOverBottomLeftQuarter port crates/horizon-client/src/multiplayer.rs::over_bottom_left move-down arrow of a server row
SplashRenderer.extractRenderState missing player: the random splash line on the title screen is not drawn; Title::draw has no splash
SpriteIconButton.setLoading skip:service the loading state is used only by the friends buttons (AddFriendWidget, FriendEntry)
SpriteIconButton.extractSprite port crates/horizon-client/src/title.rs::Title::draw draws the title's icon buttons (language, accessibility); the loading state is service-only
SpriteIconButton.extractLoadingStateIfLoading skip:service loading spinner only for the friends buttons
SpriteIconButton.Builder.sprite skip:java builder setter; Horizon draws its icon buttons with fixed sprites
SpriteIconButton.Builder.build skip:java builder; no object is needed
SpriteIconButton.CenteredIcon.extractContents skip:service FriendsButton (social)
SpriteIconButton.TextAndIcon.extractContents skip:other no caller in 26.3
StringWidget.setMaxWidth port crates/horizon-client/src/screen_draw.rs::string_widget clips at max_width (CLAMPED)
StringWidget.getWidth port crates/horizon-client/src/screen_draw.rs::label_width the smaller of max width and text width
StringWidget.visitLines port crates/horizon-client/src/screen_draw.rs::string_widget gap: minor: SCROLLING overflow (scrolling text) is not ported; CLAMPED draws "..."
TabButton.updateWidgetNarration skip:other screen-reader text; Horizon has no narration output
TextCursorUtils.extractInsertCursor port crates/horizon-client/src/ui.rs::EditBox::draw insert caret is a 1 px bar; blinks every 300 ms
Tooltip.create skip:java factory; Horizon passes the lines to ui::tooltip
Tooltip.toCharSequence port crates/horizon-client/src/screen_draw.rs::tooltip wraps at 170 px as splitTooltip does; no per-language cache
WidgetSprites.get port crates/horizon-client/src/ui.rs::button disabled and hovered pick the sprite; gap: minor: keyboard focus does not pick the highlighted sprite
WidgetTooltipHolder.refreshTooltipForNextRenderPass port crates/horizon-client/src/ui.rs::tooltip gap: minor: tooltips show only under the pointer, not for keyboard focus
WidgetTooltipHolder.createTooltipPositioner missing minor: a keyboard-focused widget gets no tooltip placed below or above it
DebugEntryBiome.display missing minor: F3 biome line not drawn
DebugEntryBiome.printBiome missing minor: biome id text for the F3 biome line
DebugEntryChunkGeneration.display missing minor: F3 chunk generation line (Blending: Old) not drawn
DebugEntryChunkGeneration.update missing minor: F3 chunk generation sampling not ported
DebugEntryChunkSourceStats.display missing minor: F3 chunk source stats line not drawn
DebugEntryDayCount.display missing minor: F3 "Day #" line not drawn
DebugEntryDetailedMemory.display skip:java JVM heap and non-heap readout (MemoryMXBean); Rust has no JVM heap
DebugEntryDetailedMemory.printMemoryUsage skip:java JVM memory format for the heap readout
DebugEntryFps.display port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay first line: fps, framerate cap (inf), present mode and refresh rate
DebugEntryFps.presentModeName port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay present mode suffix (immediate, mailbox, fifo)
DebugEntryGpuUtilization.display missing minor: F3 GPU utilisation percentage not drawn; Horizon shows the GPU name only
DebugEntryHeightmap.display missing minor: F3 heightmap line not drawn
DebugEntryLight.display missing minor: F3 client and server light line not drawn
DebugEntryLocalDifficulty.display missing minor: F3 local difficulty line not drawn
DebugEntryLookingAt.display missing minor: F3 targeted block line not drawn
DebugEntryLookingAt.addTagEntries missing minor: block tag lines of the targeted block (F3) not drawn
DebugEntryLookingAt.DebugEntryLookingAtState.extractInfo missing minor: targeted block state (F3) not drawn
DebugEntryLookingAt.DebugEntryLookingAtState.addStateProperties missing minor: targeted block state properties (F3) not drawn
DebugEntryLookingAt.DebugEntryLookingAtState.getPropertyValueString missing minor: property values of the targeted block state (F3) not drawn
DebugEntryLookingAtEntity.display missing minor: F3 targeted entity line not drawn
DebugEntryLookingAtEntityTags.display missing minor: entity tag lines of the targeted entity (F3) not drawn
DebugEntryMemory.display skip:java JVM heap and allocation counters (Runtime, GC); Rust has none
DebugEntryMemory.AllocationRateCalculator.bytesAllocatedPerSecond skip:java JVM allocation counter from GC data
DebugEntryMemory.AllocationRateCalculator.gcCounts skip:java JVM garbage collector counts
DebugEntryPlayerSpeed.display missing minor: F3 speed line (blocks per tick) not drawn
DebugEntryPosition.display port crates/horizon-client/src/debug_overlay.rs::position XYZ, block, chunk and facing lines
DebugEntryPostEffects.display missing minor: F3 post effect chain line not drawn
DebugEntrySectionPosition.display port crates/horizon-client/src/debug_overlay.rs::position section-relative line
DebugEntrySoundCache.display missing minor: F3 sound cache line not drawn
DebugEntrySoundMood.display missing minor: F3 sound mood line not drawn
DebugEntrySpawnCounts.display missing minor: F3 spawn counts line not drawn
DebugEntrySystemSpecs.getCpuInfo port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay CPU name line
DebugEntrySystemSpecs.display port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay gap: minor: no Java version line; CPU, display, window and GPU lines are drawn
DebugEntrySystemSpecs.typeName port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay GPU type suffix (iGPU, dGPU, vGPU, software)
DebugEntryTps.display port crates/horizon-client/src/game/debug_keys.rs::Game::draw_debug_overlay integrated or remote server line: tick ms against target, sprinting or frozen, tx and rx
DebugScreenEntries.register skip:debug registry of F3 entries; Horizon's overlay has a fixed profile
DebugScreenEntryList.load skip:debug reads the F3 profile file; F3 profile editing is developer tooling (Horizon's F3 hint says To edit but has no editor)
DebugScreenEntryList.setStatus skip:debug F3 profile editor (developer tooling)
DebugScreenEntryList.toggleStatus skip:debug F3 profile editor (developer tooling)
DebugScreenEntryList.rebuildCurrentList skip:debug F3 profile editor (developer tooling)
DebugScreenEntryList.save skip:debug F3 profile editor (developer tooling)
AbstractDebugChart.extractSampleBars port crates/horizon-client/src/debug_chart.rs::Chart::bars one bar per sample
AbstractDebugChart.extractMainSampleBar port crates/horizon-client/src/debug_chart.rs::Chart::bars the main value's bar (dimension 0)
BandwidthDebugChart.extractLabeledLineAtValue port crates/horizon-client/src/debug_chart.rs::Chart::lines_and_labels
BandwidthDebugChart.extractLineWithLabel port crates/horizon-client/src/debug_chart.rs::Chart::lines_and_labels
FpsDebugChart.extractAdditionalLinesAndLabels port crates/horizon-client/src/debug_chart.rs::Chart::lines_and_labels
FpsDebugChart.toDisplayString port crates/horizon-client/src/debug_chart.rs::Chart::display
FpsDebugChart.getSampleColor port crates/horizon-client/src/debug_chart.rs::Chart::color
PingDebugChart.extractAdditionalLinesAndLabels port crates/horizon-client/src/debug_chart.rs::Chart::lines_and_labels
PingDebugChart.toDisplayString port crates/horizon-client/src/debug_chart.rs::Chart::display
PingDebugChart.getSampleColor port crates/horizon-client/src/debug_chart.rs::Chart::color
ProfilerPieChart.extractRenderState missing minor: F3+1 profiler pie chart is not drawn; the chart toggle always reads hidden
ProfilerPieChart.splitNodeName missing minor: profiler node names for the pie chart not ported
ProfilerPieChart.profilerPieChartKeyPress missing minor: profiler pie keys are not handled
TpsDebugChart.extractAdditionalLinesAndLabels port crates/horizon-client/src/debug_chart.rs::Chart::lines_and_labels
TpsDebugChart.getValueForAggregation port crates/horizon-client/src/debug_chart.rs::Chart::aggregated tick time without its idle part
TpsDebugChart.toDisplayString port crates/horizon-client/src/debug_chart.rs::Chart::display
TpsDebugChart.getSampleHeight port crates/horizon-client/src/debug_chart.rs::Chart::height
TpsDebugChart.getSampleColor port crates/horizon-client/src/debug_chart.rs::Chart::color
Can't render this file because it contains an unexpected character in line 35 and column 134.
+150
View File
@@ -0,0 +1,150 @@
ContainerEventHandler.getChildAt port crates/horizon-client/src/pack_screen.rs::PackScreen::button_at gap: minor: says whether a button is under the pointer; list rows are hit-tested in PackScreen::click
ContainerEventHandler.mouseReleased port crates/horizon-client/src/pack_screen.rs::PackScreen::release gap: minor: only clears list scrollbar holds; no focused child gets the release
ContainerEventHandler.mouseDragged port crates/horizon-client/src/pack_screen.rs::PackScreen::drag drags a held list scrollbar
ContainerEventHandler.mouseScrolled port crates/horizon-client/src/pack_screen.rs::PackScreen::scroll list under the pointer scrolls 18 px per notch
ContainerEventHandler.keyPressed port crates/horizon-client/src/pack_screen.rs::PackScreen::shortcut gap: minor: only Ctrl+A/C/V/X here; Backspace is PackScreen::erase
ContainerEventHandler.keyReleased skip:other no widget in the pack screen acts on key release
ContainerEventHandler.charTyped port crates/horizon-client/src/pack_screen.rs::PackScreen::type_text typed text goes to the search box when it has focus
ContainerEventHandler.preeditUpdated missing minor: no IME composition (preedit) anywhere in Horizon
ContainerEventHandler.getBorderForArrowNavigation missing minor: arrow keys do not move focus; pack screen focus is set by clicks (PackScreen::set_focus)
ContainerEventHandler.getCurrentFocusPath missing minor: no focus path; PackScreen::focus is read only inside the screen
ContainerEventHandler.nextFocusPath missing minor: Tab and arrow keys do not move focus between search, lists and buttons
ContainerEventHandler.handleTabNavigation missing minor: Tab does not move focus (same gap as nextFocusPath)
ContainerEventHandler.handleArrowNavigation missing minor: arrow keys do not move focus (same gap)
ContainerEventHandler.nextFocusPathVaguelyInDirection missing minor: no directional focus search (same gap)
SpectatorGui.extractPage port crates/horizon-client/src/spectator_menu.rs::SpectatorGui::hotbar the nine-slot page with its frame and selection
SpectatorGui.extractSlot inline crates/horizon-client/src/spectator_menu.rs::SpectatorGui::hotbar icon and key label drawn in the hotbar loop
MenuTabBar.extractWidgetRenderState port crates/horizon-client/src/title/create_world.rs::Title::draw_create header separators and tab row drawn inside draw_create
MenuTabBar.Builder.addTab skip:java builder
MenuTabBar.Builder.addTabs skip:java builder
MenuTabBar.Builder.build skip:java builder
MenuTabBar.MenuTabButton.extractWidgetRenderState inline crates/horizon-client/src/title/create_world.rs::Title::draw_create tab loop: sprite by selected and hover state, underline, label
MenuTabBar.MenuTabButton.renderMenuBackground inline crates/horizon-client/src/title/create_world.rs::Title::draw_create menu background inside the selected tab
MenuTabBar.MenuTabButton.renderLabel inline crates/horizon-client/src/title/create_world.rs::Title::draw_create label centred, 3 px lower on unselected tabs
MenuTabBar.MenuTabButton.renderFocusUnderline inline crates/horizon-client/src/title/create_world.rs::Title::draw_create 1 px underline under the selected tab label
TabManager.setTabArea skip:ui tab area layout; create world computes the tab row on every draw (tabs())
TabManager.setCurrentTab port crates/horizon-client/src/title.rs::Title::click a click on a tab sets options.tab
TabNavigationBar.arrangeElements skip:ui layout of the tab row
TabNavigationBar.isMouseOver port crates/horizon-client/src/title/create_world.rs::tab_at pointer over a tab
TabNavigationBar.setFocused missing minor: the tab row cannot take keyboard focus
TabNavigationBar.nextFocusPath missing minor: the Tab key never reaches the tab row
TabNavigationBar.narrationPriority skip:other screen-reader narration; Horizon has no narrator
TabNavigationBar.updateWidgetNarration skip:other screen-reader narration; Horizon has no narrator
TabNavigationBar.narrateListElementPosition skip:other screen-reader narration; Horizon has no narrator
TabNavigationBar.extractWidgetRenderState port crates/horizon-client/src/title/create_world.rs::Title::draw_create tab row drawn in draw_create
TabNavigationBar.selectTab port crates/horizon-client/src/title.rs::Title::click gap: minor: only clicks pick a tab; no select by index (Ctrl+number, init)
TabNavigationBar.setTabActiveState missing minor: tabs cannot be disabled; vanilla StatsScreen.java:91-93 disables two tabs, Horizon's stats tabs stay clickable
TabNavigationBar.setTabTooltip missing minor: the tab row has no per-tab tooltip
TabNavigationBar.keyPressed missing minor: Ctrl+1 to 9 and Ctrl+Tab do not switch create-world tabs
TabNavigationBar.getNextTabIndex missing minor: index math for Ctrl+number and Ctrl+Tab, which Horizon lacks
TabNavigationBar.currentTabIndex skip:other accessor; Horizon keeps the open tab in options.tab
TabNavigationBar.currentTabButton skip:other accessor; Horizon draws the tabs from options.tab
TabNavigationBar.Builder.addTab skip:java builder
TabNavigationBar.Builder.build skip:java builder
AdvancementToast.update port crates/horizon-client/src/game/advancements.rs::Toast::wants_show 5 s visible, scaled by the notification time option
AdvancementToast.isChallengeAdvancement inline crates/horizon-client/src/game/advancements.rs::Game::draw_toasts challenge check for the sound when a toast enters a slot
AdvancementToast.extractRenderState port crates/horizon-client/src/game/advancements.rs::Game::draw_toast gap: player: a long title is one line; vanilla wraps it and fades the frame label into it over 1.5 s
FriendToast.update skip:service friend toasts: social, Horizon has no friends system
FriendToast.extractRenderState skip:service friend toasts: social, Horizon has no friends system
FriendToast.add skip:service friend toasts: social, Horizon has no friends system
FriendToast.showFriendRequestSent skip:service friend toasts: social, Horizon has no friends system
FriendToast.showFriendRequestReceived skip:service friend toasts: social, Horizon has no friends system
FriendToast.showFriendRequestAccepted skip:service friend toasts: social, Horizon has no friends system
FriendToast.showFriendAdded skip:service friend toasts: social, Horizon has no friends system
NowPlayingToast.extractToast missing player: no Now Playing toast is drawn; with Music Toast on (default Never) the song name never shows
NowPlayingToast.tickMusicNotes missing player: the music notes beside the Now Playing toast are never drawn
NowPlayingToast.showToast missing player: nothing shows the toast when a song starts (same gap as extractToast)
NowPlayingToast.update missing player: the toast is never shown, so it never times out (same gap)
RecipeToast.update port crates/horizon-client/src/game/advancements.rs::Toast::wants_show recipe toast visibility; the cycling index is Toast::displayed_recipe
RecipeToast.extractRenderState port crates/horizon-client/src/game/advancements.rs::Game::draw_toast recipe branch: station at 0.6 scale over the cycling result
SystemToast.height missing minor: no multi-line height; a system toast always takes one 32 px slot
SystemToast.extractRenderState port crates/horizon-client/src/toasts.rs::SystemToast::draw gap: minor: one line per title and message, no wrapping
SystemToast.extractTextLines inline crates/horizon-client/src/toasts.rs::SystemToast::draw text lines drawn in draw
SystemToast.recalculateWidth inline crates/horizon-client/src/toasts.rs::SystemToast::draw width from the widest line, at least 160, plus 30
SystemToast.onFileDropFailure missing minor: Horizon takes no dropped files, so this toast never shows
SystemToast.onChunkLoadFailure missing minor: no chunk load-failure toast; failures only log
SystemToast.onChunkSaveFailure missing minor: failed chunk saves only log (save.rs warn); no toast
ToastManager.findFreeSlotsIndex port crates/horizon-client/src/game/advancements.rs::Game::draw_toasts gap: minor: one 32 px slot per toast; no search for consecutive slots
ToastManager.getToast inline crates/horizon-client/src/game/recipe_book.rs::Game::recipe_toast only the recipe toast lookup (find is_recipe); system toasts are kept by their owners
ToastManager.showNowPlayingToast port crates/horizon-client/src/music.rs::MusicManager::show_now_playing_toast_if_needed gap: player: the request goes to toast_requests and nothing draws it
ToastManager.initializeMusicToast missing player: with Music Toast set to Pause or Pause and Toast (default Never) the Now Playing toast is never created
ToastManager.setMusicToastDisplayState missing player: the Music Toast setting does nothing in Horizon (same gap)
ToastManager.ToastInstance.resetToast port crates/horizon-client/src/toasts.rs::SystemToast::reset gap: minor: text and display timer restart; the slide-in does not
ToastManager.ToastInstance.calculateVisiblePortion port crates/horizon-client/src/toasts.rs::Slide::update 600 ms, squared ease in and out
ToastManager.ToastInstance.extractRenderState port crates/horizon-client/src/game/advancements.rs::Game::draw_toast slide x and slot y; system toasts slide in SystemToast::draw
TutorialToast.update missing player: new worlds show no movement or look tutorial toasts (vanilla tutorialStep defaults to movement)
TutorialToast.extractRenderState missing player: same gap; the tutorial toast is never drawn
AtlasGlyphProvider.Instance.renderSprite missing minor: sprite-font glyphs (atlas sprite objects in text) are not parsed
CodepointMap.get skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
CodepointMap.put skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
CodepointMap.computeIfAbsent skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
CodepointMap.remove skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
CodepointMap.forEach skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
CodepointMap.keySet skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
FontManager.createFontSet port crates/horizon-client/src/font.rs::Font::load_set a font's providers into a set
FontManager.reload port crates/horizon-client/src/hud.rs::HudAtlas::pack fonts are rebuilt with the atlas (Font::load at hud.rs:582); no async reload
FontManager.safeLoad inline crates/horizon-client/src/font.rs::Font::load_set a TrueType provider that fails to load is dropped; a bitmap sheet that fails warns
FontManager.resolveProviders port crates/horizon-client/src/font.rs::providers reference expansion in order, depth 8; no dependency sort
FontManager.finalizeProviderLoading skip:java prewarm of glyph lookups; the fallback is the missing box that Font::resolve gives
FontManager.getFontOptions port crates/horizon-client/src/game/options.rs::Game::apply_ui_settings force unicode and japanese flags read from settings
FontManager.apply port crates/horizon-client/src/hud.rs::HudAtlas::pack new font sets replace the old ones with the atlas
FontManager.updateOptions port crates/horizon-client/src/game/options.rs::Game::apply_ui_settings sets the Font uniform and japanese flags when they change (options.rs:299-301)
FontManager.loadResourceStack inline crates/horizon-client/src/font.rs::providers gap: minor: one fonts.json per font id from the resource root, not a stack of packs
FontManager.getSpriteFont missing minor: atlas sprite fonts (sprite objects in text) are not parsed; they draw the missing box
FontManager.close skip:java Rust drop frees the atlas, font sets and providers
FontManager.BuilderResult.resolve port crates/horizon-client/src/font.rs::providers reference builders expanded in place
FontManager.BuilderResult.mergeFilters inline crates/horizon-client/src/font.rs::providers the reference's filter merged onto each expanded provider
FontManager.CachedFontProvider.getGlyphSource port crates/horizon-client/src/font.rs::Font::glyph_in gap: minor: atlas sprite and player descriptions fall back to the missing glyph
FontManager.CachedFontProvider.glyphs skip:java one-entry lookup cache
FontManager.CachedFontProvider.effect port crates/horizon-client/src/font.rs::Font::white the white glyph under underline and strikethrough
FontManager.UnresolvedBuilderBundle.add skip:java collects builders; providers() reads them directly
FontManager.UnresolvedBuilderBundle.listBuilders skip:java collects builders
FontManager.UnresolvedBuilderBundle.resolve port crates/horizon-client/src/font.rs::providers reference expansion for the bundle
FontOption.Filter.apply port crates/horizon-client/src/font.rs::Filter::passes option match per provider
FontOption.Filter.merge inline crates/horizon-client/src/font.rs::providers filter merge while expanding references
FontSet.reload port crates/horizon-client/src/font.rs::Font::load_set providers into the font set
FontSet.resetTextures port crates/horizon-client/src/font.rs::Font::reset_cache glyph cache and atlas cursor cleared
FontSet.selectProviders port crates/horizon-client/src/font.rs::Font::glyphs_by_width gap: minor: width buckets hold only Space and atlas bitmap glyphs, so TrueType and unihex never appear as obfuscated characters
FontSet.hasFishyAdvance missing minor: no check for advances under 0 or over 32
FontSet.computeGlyphInfo port crates/horizon-client/src/font.rs::Font::resolve gap: minor: no skip of a glyph with a fishy advance in favour of a later provider
FontSet.DelayedBake.get skip:java lazy bake into the atlas; Font::resolve bakes at once
FontTexture.dumpContents skip:debug writes the atlas to a PNG for debugging
GlyphRenderTypes.createForGrayscaleTexture skip:ui one textured quad path for all glyphs (hud.rs text_styled)
GlyphRenderTypes.createForColorTexture skip:ui one textured quad path for all glyphs (hud.rs text_styled)
GlyphRenderTypes.select port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry gap: minor: normal and see-through only; polygon-offset text has no draw path
GlyphStitcher.reset port crates/horizon-client/src/font.rs::Font::reset_cache atlas cursor rewound
GlyphStitcher.stitch port crates/horizon-client/src/font.rs::Region::place rectangle placed in the atlas region
PlainTextRenderable.render port crates/horizon-client/src/hud.rs::HudBatch::text_styled shadow pass first, then the front text
PlayerGlyphProvider.Instance.renderSprite missing minor: player-head text objects are not parsed
PlayerGlyphProvider.Instance.renderQuad missing minor: no player-head glyphs (same gap)
TextFieldHelper.charTyped inline crates/horizon-client/src/game/sign_edit.rs::Game::sign_input typed-text branch; EditBox::insert_text filters the text
TextFieldHelper.moveBy inline crates/horizon-client/src/ui.rs::EditBox::key arrow keys; Ctrl moves by word
TextFieldHelper.moveByChars inline crates/horizon-client/src/ui.rs::EditBox::key arrow keys, Home and End
TextFieldHelper.moveByWords inline crates/horizon-client/src/ui.rs::EditBox::key Ctrl+arrow word moves
TextFieldHelper.removeFromCursor inline crates/horizon-client/src/ui.rs::EditBox::key Backspace and Delete
TextFieldHelper.removeWordsFromCursor inline crates/horizon-client/src/ui.rs::EditBox::key Ctrl+Backspace and Ctrl+Delete
TextFieldHelper.removeCharsFromCursor port crates/horizon-client/src/ui.rs::EditBox::delete_chars deletes the selection or n characters
TextFieldHelper.cut port crates/horizon-client-input/src/clipboard.rs::apply Cut arm: copy the selection, then clear it
TextFieldHelper.paste port crates/horizon-client-input/src/clipboard.rs::apply Paste arm: insert the clipboard text
TextFieldHelper.getSelected port crates/horizon-client/src/ui.rs::EditBox::selected_text
TextFieldHelper.deleteSelection inline crates/horizon-client/src/ui.rs::EditBox::delete_chars selection branch
TextFieldHelper.setCursorToEnd port crates/horizon-client/src/ui.rs::EditBox::move_cursor_to_end
TextFieldHelper.setCursorPos port crates/horizon-client/src/ui.rs::EditBox::set_cursor no vanilla caller (callers 0)
TextFieldHelper.setSelectionRange skip:other no vanilla caller; Horizon sets cursor and highlight separately (EditBox::set_cursor)
BakedSheetGlyph.left inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
BakedSheetGlyph.top inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
BakedSheetGlyph.right inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
BakedSheetGlyph.bottom inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
BakedSheetGlyph.renderChar inline crates/horizon-client/src/hud.rs::HudBatch::text_styled shadow pass, bold double draw, italic shear
BakedSheetGlyph.render inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph quad with shear and bold
BakedSheetGlyph.renderEffect inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline and strikethrough rectangles
BakedSheetGlyph.buildEffect inline crates/horizon-client/src/hud.rs::HudBatch::text_styled rectangle quad of an effect
BakedSheetGlyph.createGlyph skip:java factory for a glyph instance
BakedSheetGlyph.createEffect skip:java factory for an effect instance
BakedSheetGlyph.EffectInstance.right inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline end: pen x plus advance
BakedSheetGlyph.EffectInstance.bottom inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline row, 1 px at pen y plus 8
BakedSheetGlyph.GlyphInstance.activeRight inline crates/horizon-client/src/hud.rs::HudBatch::text_styled advance including the bold offset
SpecialGlyphs.generate port crates/horizon-client/src/font.rs::Font::white gap: minor: white texel only; the missing-box outline is drawn in HudBatch::text_styled, not generated
BitmapProvider.Definition.validateDimensions missing minor: no check of the bitmap grid; a ragged grid loads
BitmapProvider.Definition.validate missing minor: no check that ascent is at most height
BitmapProvider.Definition.getActualGlyphWidth port crates/horizon-client/src/font.rs::used_width rightmost column with any visible pixel
1 ContainerEventHandler.getChildAt port crates/horizon-client/src/pack_screen.rs::PackScreen::button_at gap: minor: says whether a button is under the pointer; list rows are hit-tested in PackScreen::click
2 ContainerEventHandler.mouseReleased port crates/horizon-client/src/pack_screen.rs::PackScreen::release gap: minor: only clears list scrollbar holds; no focused child gets the release
3 ContainerEventHandler.mouseDragged port crates/horizon-client/src/pack_screen.rs::PackScreen::drag drags a held list scrollbar
4 ContainerEventHandler.mouseScrolled port crates/horizon-client/src/pack_screen.rs::PackScreen::scroll list under the pointer scrolls 18 px per notch
5 ContainerEventHandler.keyPressed port crates/horizon-client/src/pack_screen.rs::PackScreen::shortcut gap: minor: only Ctrl+A/C/V/X here; Backspace is PackScreen::erase
6 ContainerEventHandler.keyReleased skip:other no widget in the pack screen acts on key release
7 ContainerEventHandler.charTyped port crates/horizon-client/src/pack_screen.rs::PackScreen::type_text typed text goes to the search box when it has focus
8 ContainerEventHandler.preeditUpdated missing minor: no IME composition (preedit) anywhere in Horizon
9 ContainerEventHandler.getBorderForArrowNavigation missing minor: arrow keys do not move focus; pack screen focus is set by clicks (PackScreen::set_focus)
10 ContainerEventHandler.getCurrentFocusPath missing minor: no focus path; PackScreen::focus is read only inside the screen
11 ContainerEventHandler.nextFocusPath missing minor: Tab and arrow keys do not move focus between search, lists and buttons
12 ContainerEventHandler.handleTabNavigation missing minor: Tab does not move focus (same gap as nextFocusPath)
13 ContainerEventHandler.handleArrowNavigation missing minor: arrow keys do not move focus (same gap)
14 ContainerEventHandler.nextFocusPathVaguelyInDirection missing minor: no directional focus search (same gap)
15 SpectatorGui.extractPage port crates/horizon-client/src/spectator_menu.rs::SpectatorGui::hotbar the nine-slot page with its frame and selection
16 SpectatorGui.extractSlot inline crates/horizon-client/src/spectator_menu.rs::SpectatorGui::hotbar icon and key label drawn in the hotbar loop
17 MenuTabBar.extractWidgetRenderState port crates/horizon-client/src/title/create_world.rs::Title::draw_create header separators and tab row drawn inside draw_create
18 MenuTabBar.Builder.addTab skip:java builder
19 MenuTabBar.Builder.addTabs skip:java builder
20 MenuTabBar.Builder.build skip:java builder
21 MenuTabBar.MenuTabButton.extractWidgetRenderState inline crates/horizon-client/src/title/create_world.rs::Title::draw_create tab loop: sprite by selected and hover state, underline, label
22 MenuTabBar.MenuTabButton.renderMenuBackground inline crates/horizon-client/src/title/create_world.rs::Title::draw_create menu background inside the selected tab
23 MenuTabBar.MenuTabButton.renderLabel inline crates/horizon-client/src/title/create_world.rs::Title::draw_create label centred, 3 px lower on unselected tabs
24 MenuTabBar.MenuTabButton.renderFocusUnderline inline crates/horizon-client/src/title/create_world.rs::Title::draw_create 1 px underline under the selected tab label
25 TabManager.setTabArea skip:ui tab area layout; create world computes the tab row on every draw (tabs())
26 TabManager.setCurrentTab port crates/horizon-client/src/title.rs::Title::click a click on a tab sets options.tab
27 TabNavigationBar.arrangeElements skip:ui layout of the tab row
28 TabNavigationBar.isMouseOver port crates/horizon-client/src/title/create_world.rs::tab_at pointer over a tab
29 TabNavigationBar.setFocused missing minor: the tab row cannot take keyboard focus
30 TabNavigationBar.nextFocusPath missing minor: the Tab key never reaches the tab row
31 TabNavigationBar.narrationPriority skip:other screen-reader narration; Horizon has no narrator
32 TabNavigationBar.updateWidgetNarration skip:other screen-reader narration; Horizon has no narrator
33 TabNavigationBar.narrateListElementPosition skip:other screen-reader narration; Horizon has no narrator
34 TabNavigationBar.extractWidgetRenderState port crates/horizon-client/src/title/create_world.rs::Title::draw_create tab row drawn in draw_create
35 TabNavigationBar.selectTab port crates/horizon-client/src/title.rs::Title::click gap: minor: only clicks pick a tab; no select by index (Ctrl+number, init)
36 TabNavigationBar.setTabActiveState missing minor: tabs cannot be disabled; vanilla StatsScreen.java:91-93 disables two tabs, Horizon's stats tabs stay clickable
37 TabNavigationBar.setTabTooltip missing minor: the tab row has no per-tab tooltip
38 TabNavigationBar.keyPressed missing minor: Ctrl+1 to 9 and Ctrl+Tab do not switch create-world tabs
39 TabNavigationBar.getNextTabIndex missing minor: index math for Ctrl+number and Ctrl+Tab, which Horizon lacks
40 TabNavigationBar.currentTabIndex skip:other accessor; Horizon keeps the open tab in options.tab
41 TabNavigationBar.currentTabButton skip:other accessor; Horizon draws the tabs from options.tab
42 TabNavigationBar.Builder.addTab skip:java builder
43 TabNavigationBar.Builder.build skip:java builder
44 AdvancementToast.update port crates/horizon-client/src/game/advancements.rs::Toast::wants_show 5 s visible, scaled by the notification time option
45 AdvancementToast.isChallengeAdvancement inline crates/horizon-client/src/game/advancements.rs::Game::draw_toasts challenge check for the sound when a toast enters a slot
46 AdvancementToast.extractRenderState port crates/horizon-client/src/game/advancements.rs::Game::draw_toast gap: player: a long title is one line; vanilla wraps it and fades the frame label into it over 1.5 s
47 FriendToast.update skip:service friend toasts: social, Horizon has no friends system
48 FriendToast.extractRenderState skip:service friend toasts: social, Horizon has no friends system
49 FriendToast.add skip:service friend toasts: social, Horizon has no friends system
50 FriendToast.showFriendRequestSent skip:service friend toasts: social, Horizon has no friends system
51 FriendToast.showFriendRequestReceived skip:service friend toasts: social, Horizon has no friends system
52 FriendToast.showFriendRequestAccepted skip:service friend toasts: social, Horizon has no friends system
53 FriendToast.showFriendAdded skip:service friend toasts: social, Horizon has no friends system
54 NowPlayingToast.extractToast missing player: no Now Playing toast is drawn; with Music Toast on (default Never) the song name never shows
55 NowPlayingToast.tickMusicNotes missing player: the music notes beside the Now Playing toast are never drawn
56 NowPlayingToast.showToast missing player: nothing shows the toast when a song starts (same gap as extractToast)
57 NowPlayingToast.update missing player: the toast is never shown, so it never times out (same gap)
58 RecipeToast.update port crates/horizon-client/src/game/advancements.rs::Toast::wants_show recipe toast visibility; the cycling index is Toast::displayed_recipe
59 RecipeToast.extractRenderState port crates/horizon-client/src/game/advancements.rs::Game::draw_toast recipe branch: station at 0.6 scale over the cycling result
60 SystemToast.height missing minor: no multi-line height; a system toast always takes one 32 px slot
61 SystemToast.extractRenderState port crates/horizon-client/src/toasts.rs::SystemToast::draw gap: minor: one line per title and message, no wrapping
62 SystemToast.extractTextLines inline crates/horizon-client/src/toasts.rs::SystemToast::draw text lines drawn in draw
63 SystemToast.recalculateWidth inline crates/horizon-client/src/toasts.rs::SystemToast::draw width from the widest line, at least 160, plus 30
64 SystemToast.onFileDropFailure missing minor: Horizon takes no dropped files, so this toast never shows
65 SystemToast.onChunkLoadFailure missing minor: no chunk load-failure toast; failures only log
66 SystemToast.onChunkSaveFailure missing minor: failed chunk saves only log (save.rs warn); no toast
67 ToastManager.findFreeSlotsIndex port crates/horizon-client/src/game/advancements.rs::Game::draw_toasts gap: minor: one 32 px slot per toast; no search for consecutive slots
68 ToastManager.getToast inline crates/horizon-client/src/game/recipe_book.rs::Game::recipe_toast only the recipe toast lookup (find is_recipe); system toasts are kept by their owners
69 ToastManager.showNowPlayingToast port crates/horizon-client/src/music.rs::MusicManager::show_now_playing_toast_if_needed gap: player: the request goes to toast_requests and nothing draws it
70 ToastManager.initializeMusicToast missing player: with Music Toast set to Pause or Pause and Toast (default Never) the Now Playing toast is never created
71 ToastManager.setMusicToastDisplayState missing player: the Music Toast setting does nothing in Horizon (same gap)
72 ToastManager.ToastInstance.resetToast port crates/horizon-client/src/toasts.rs::SystemToast::reset gap: minor: text and display timer restart; the slide-in does not
73 ToastManager.ToastInstance.calculateVisiblePortion port crates/horizon-client/src/toasts.rs::Slide::update 600 ms, squared ease in and out
74 ToastManager.ToastInstance.extractRenderState port crates/horizon-client/src/game/advancements.rs::Game::draw_toast slide x and slot y; system toasts slide in SystemToast::draw
75 TutorialToast.update missing player: new worlds show no movement or look tutorial toasts (vanilla tutorialStep defaults to movement)
76 TutorialToast.extractRenderState missing player: same gap; the tutorial toast is never drawn
77 AtlasGlyphProvider.Instance.renderSprite missing minor: sprite-font glyphs (atlas sprite objects in text) are not parsed
78 CodepointMap.get skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
79 CodepointMap.put skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
80 CodepointMap.computeIfAbsent skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
81 CodepointMap.remove skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
82 CodepointMap.forEach skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
83 CodepointMap.keySet skip:java codepoint lookup table; Horizon uses HashMap and BTreeSet
84 FontManager.createFontSet port crates/horizon-client/src/font.rs::Font::load_set a font's providers into a set
85 FontManager.reload port crates/horizon-client/src/hud.rs::HudAtlas::pack fonts are rebuilt with the atlas (Font::load at hud.rs:582); no async reload
86 FontManager.safeLoad inline crates/horizon-client/src/font.rs::Font::load_set a TrueType provider that fails to load is dropped; a bitmap sheet that fails warns
87 FontManager.resolveProviders port crates/horizon-client/src/font.rs::providers reference expansion in order, depth 8; no dependency sort
88 FontManager.finalizeProviderLoading skip:java prewarm of glyph lookups; the fallback is the missing box that Font::resolve gives
89 FontManager.getFontOptions port crates/horizon-client/src/game/options.rs::Game::apply_ui_settings force unicode and japanese flags read from settings
90 FontManager.apply port crates/horizon-client/src/hud.rs::HudAtlas::pack new font sets replace the old ones with the atlas
91 FontManager.updateOptions port crates/horizon-client/src/game/options.rs::Game::apply_ui_settings sets the Font uniform and japanese flags when they change (options.rs:299-301)
92 FontManager.loadResourceStack inline crates/horizon-client/src/font.rs::providers gap: minor: one fonts.json per font id from the resource root, not a stack of packs
93 FontManager.getSpriteFont missing minor: atlas sprite fonts (sprite objects in text) are not parsed; they draw the missing box
94 FontManager.close skip:java Rust drop frees the atlas, font sets and providers
95 FontManager.BuilderResult.resolve port crates/horizon-client/src/font.rs::providers reference builders expanded in place
96 FontManager.BuilderResult.mergeFilters inline crates/horizon-client/src/font.rs::providers the reference's filter merged onto each expanded provider
97 FontManager.CachedFontProvider.getGlyphSource port crates/horizon-client/src/font.rs::Font::glyph_in gap: minor: atlas sprite and player descriptions fall back to the missing glyph
98 FontManager.CachedFontProvider.glyphs skip:java one-entry lookup cache
99 FontManager.CachedFontProvider.effect port crates/horizon-client/src/font.rs::Font::white the white glyph under underline and strikethrough
100 FontManager.UnresolvedBuilderBundle.add skip:java collects builders; providers() reads them directly
101 FontManager.UnresolvedBuilderBundle.listBuilders skip:java collects builders
102 FontManager.UnresolvedBuilderBundle.resolve port crates/horizon-client/src/font.rs::providers reference expansion for the bundle
103 FontOption.Filter.apply port crates/horizon-client/src/font.rs::Filter::passes option match per provider
104 FontOption.Filter.merge inline crates/horizon-client/src/font.rs::providers filter merge while expanding references
105 FontSet.reload port crates/horizon-client/src/font.rs::Font::load_set providers into the font set
106 FontSet.resetTextures port crates/horizon-client/src/font.rs::Font::reset_cache glyph cache and atlas cursor cleared
107 FontSet.selectProviders port crates/horizon-client/src/font.rs::Font::glyphs_by_width gap: minor: width buckets hold only Space and atlas bitmap glyphs, so TrueType and unihex never appear as obfuscated characters
108 FontSet.hasFishyAdvance missing minor: no check for advances under 0 or over 32
109 FontSet.computeGlyphInfo port crates/horizon-client/src/font.rs::Font::resolve gap: minor: no skip of a glyph with a fishy advance in favour of a later provider
110 FontSet.DelayedBake.get skip:java lazy bake into the atlas; Font::resolve bakes at once
111 FontTexture.dumpContents skip:debug writes the atlas to a PNG for debugging
112 GlyphRenderTypes.createForGrayscaleTexture skip:ui one textured quad path for all glyphs (hud.rs text_styled)
113 GlyphRenderTypes.createForColorTexture skip:ui one textured quad path for all glyphs (hud.rs text_styled)
114 GlyphRenderTypes.select port crates/horizon-client/src/game/names.rs::Game::name_tag_geometry gap: minor: normal and see-through only; polygon-offset text has no draw path
115 GlyphStitcher.reset port crates/horizon-client/src/font.rs::Font::reset_cache atlas cursor rewound
116 GlyphStitcher.stitch port crates/horizon-client/src/font.rs::Region::place rectangle placed in the atlas region
117 PlainTextRenderable.render port crates/horizon-client/src/hud.rs::HudBatch::text_styled shadow pass first, then the front text
118 PlayerGlyphProvider.Instance.renderSprite missing minor: player-head text objects are not parsed
119 PlayerGlyphProvider.Instance.renderQuad missing minor: no player-head glyphs (same gap)
120 TextFieldHelper.charTyped inline crates/horizon-client/src/game/sign_edit.rs::Game::sign_input typed-text branch; EditBox::insert_text filters the text
121 TextFieldHelper.moveBy inline crates/horizon-client/src/ui.rs::EditBox::key arrow keys; Ctrl moves by word
122 TextFieldHelper.moveByChars inline crates/horizon-client/src/ui.rs::EditBox::key arrow keys, Home and End
123 TextFieldHelper.moveByWords inline crates/horizon-client/src/ui.rs::EditBox::key Ctrl+arrow word moves
124 TextFieldHelper.removeFromCursor inline crates/horizon-client/src/ui.rs::EditBox::key Backspace and Delete
125 TextFieldHelper.removeWordsFromCursor inline crates/horizon-client/src/ui.rs::EditBox::key Ctrl+Backspace and Ctrl+Delete
126 TextFieldHelper.removeCharsFromCursor port crates/horizon-client/src/ui.rs::EditBox::delete_chars deletes the selection or n characters
127 TextFieldHelper.cut port crates/horizon-client-input/src/clipboard.rs::apply Cut arm: copy the selection, then clear it
128 TextFieldHelper.paste port crates/horizon-client-input/src/clipboard.rs::apply Paste arm: insert the clipboard text
129 TextFieldHelper.getSelected port crates/horizon-client/src/ui.rs::EditBox::selected_text
130 TextFieldHelper.deleteSelection inline crates/horizon-client/src/ui.rs::EditBox::delete_chars selection branch
131 TextFieldHelper.setCursorToEnd port crates/horizon-client/src/ui.rs::EditBox::move_cursor_to_end
132 TextFieldHelper.setCursorPos port crates/horizon-client/src/ui.rs::EditBox::set_cursor no vanilla caller (callers 0)
133 TextFieldHelper.setSelectionRange skip:other no vanilla caller; Horizon sets cursor and highlight separately (EditBox::set_cursor)
134 BakedSheetGlyph.left inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
135 BakedSheetGlyph.top inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
136 BakedSheetGlyph.right inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
137 BakedSheetGlyph.bottom inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph edge with bold thickness and italic shear
138 BakedSheetGlyph.renderChar inline crates/horizon-client/src/hud.rs::HudBatch::text_styled shadow pass, bold double draw, italic shear
139 BakedSheetGlyph.render inline crates/horizon-client/src/hud.rs::HudBatch::text_styled glyph quad with shear and bold
140 BakedSheetGlyph.renderEffect inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline and strikethrough rectangles
141 BakedSheetGlyph.buildEffect inline crates/horizon-client/src/hud.rs::HudBatch::text_styled rectangle quad of an effect
142 BakedSheetGlyph.createGlyph skip:java factory for a glyph instance
143 BakedSheetGlyph.createEffect skip:java factory for an effect instance
144 BakedSheetGlyph.EffectInstance.right inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline end: pen x plus advance
145 BakedSheetGlyph.EffectInstance.bottom inline crates/horizon-client/src/hud.rs::HudBatch::text_styled underline row, 1 px at pen y plus 8
146 BakedSheetGlyph.GlyphInstance.activeRight inline crates/horizon-client/src/hud.rs::HudBatch::text_styled advance including the bold offset
147 SpecialGlyphs.generate port crates/horizon-client/src/font.rs::Font::white gap: minor: white texel only; the missing-box outline is drawn in HudBatch::text_styled, not generated
148 BitmapProvider.Definition.validateDimensions missing minor: no check of the bitmap grid; a ragged grid loads
149 BitmapProvider.Definition.validate missing minor: no check that ascent is at most height
150 BitmapProvider.Definition.getActualGlyphWidth port crates/horizon-client/src/font.rs::used_width rightmost column with any visible pixel
+109
View File
@@ -0,0 +1,109 @@
BitmapProvider.ImageDataHolder.gpuData skip:other GPU staging buffer for a sheet; Horizon copies the sheet pixels into its atlas at load (font.rs load_bitmap)
FreeTypeUtil skip:other FreeType library wrapper (getLibrary, error helpers, setVector, destroy); Horizon rasterizes TrueType with ab_glyph (font.rs load_true_type)
UnihexProvider.unpackBitsToBytes port crates/horizon-client/src/font.rs::Font::rasterize_hex gap: minor: rows are written as RGBA into the atlas region, not an IntBuffer; same glyph columns
UnihexProvider.decodeHex port crates/horizon-client/src/font.rs::parse_hex_digit gap: minor: a bad digit skips the whole glyph line (vanilla throws and fails the load)
UnihexProvider.copyUntil inline crates/horizon-client/src/font.rs::parse_hex line splitting on newline and CR; the .hex text is parsed in one pass
UnihexProvider.ByteContents.read inline crates/horizon-client/src/font.rs::parse_hex 8 px rows (32 hex digits) read by parse_hex
UnihexProvider.Definition.loadData port crates/horizon-client/src/font.rs::load_hex reads every .hex entry of the zip and applies size_overrides
UnihexProvider.Dimensions.pack skip:java packs left and right into one int as a map value; Horizon keeps two fields on HexGlyph
UnihexProvider.IntContents.read24 port crates/horizon-client/src/font.rs::parse_hex 6-digit rows (24 bit) handled by parse_hex
UnihexProvider.IntContents.read32 port crates/horizon-client/src/font.rs::parse_hex 8-digit rows (32 bit) handled by parse_hex
UnihexProvider.LineData.mask inline crates/horizon-client/src/font.rs::parse_hex the OR of the rows, used for the glyph width (mask |= row)
UnihexProvider.ShortContents.read port crates/horizon-client/src/font.rs::parse_hex 4-digit rows (16 bit) handled by parse_hex
AbstractLayout.setX skip:ui moves a layout's children with it; Horizon computes positions each frame (dialog_screen.rs Layout::new)
AbstractLayout.setY skip:ui moves a layout's children with it; Horizon computes positions each frame (dialog_screen.rs Layout::new)
AbstractLayout.AbstractChildWrapper.getHeight skip:ui padded child height, layout bookkeeping only
AbstractLayout.AbstractChildWrapper.getWidth skip:ui padded child width, layout bookkeeping only
AbstractLayout.AbstractChildWrapper.setX inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: only centred alignment (0.5) is modelled; xAlignment and per-child padding are not
AbstractLayout.AbstractChildWrapper.setY inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: only centred alignment (0.5) is modelled; yAlignment and per-child padding are not
EqualSpacingLayout skip:ui equal-gap layout; its only user is WorldOptionsScreen, placing its buttons; layout only, no behaviour
EqualSpacingLayout.Orientation skip:ui horizontal or vertical helpers of EqualSpacingLayout; layout only
FrameLayout.arrangeElements inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: frame centring is done for the header title and the footer buttons only; no general minimum size
FrameLayout.addChild skip:ui adds a child to the frame's list; no behaviour of its own
FrameLayout.visitChildren skip:ui visits children for layout; no behaviour of its own
FrameLayout.centerInRectangle port crates/horizon-client/src/dialog_screen.rs::centre gap: minor: one axis at a time through centre; the 2D call is not a separate fn
FrameLayout.alignInRectangle inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: only the centre alignment (0.5); PauseScreen's 0.25 vertical alignment is not modelled
GridLayout.arrangeElements port crates/horizon-client/src/dialog_screen.rs::columns gap: minor: only the dialog button grids (2 px apart, 22 px rows); general row and column spans and spacing are not modelled
GridLayout.addChild skip:ui adds a cell to the grid's list; no behaviour of its own
GridLayout.visitChildren skip:ui visits children for layout; no behaviour of its own
GridLayout.RowHelper.addChild inline crates/horizon-client/src/dialog_screen.rs::columns gap: minor: rows fill left to right and a full row is cut from the list by columns(); a row that does not fit moves down, as RowHelper does
HeaderAndFooterLayout.visitChildren skip:ui visits children for layout; no behaviour of its own
HeaderAndFooterLayout.arrangeElements port crates/horizon-client/src/dialog_screen.rs::Layout::new header 33 high, body at header + 30 clamped above the footer, footer at the bottom; server_links.rs list_top and lan_screen.rs WorldOptions::top do the same for their screens
HeaderAndFooterLayout.addToHeader skip:ui adds to the header frame; no behaviour of its own
HeaderAndFooterLayout.addToFooter skip:ui adds to the footer frame; no behaviour of its own
HeaderAndFooterLayout.addToContents skip:ui adds to the contents frame; no behaviour of its own
Layout.arrangeElements skip:ui default recursive layout pass; Horizon places each screen's parts directly
LayoutElement.getRectangle skip:ui builds a rectangle from position and size; Horizon uses [f32; 4] arrays
LayoutSettings.LayoutSettingsImpl.padding skip:java builder method for padding values
LinearLayout.addChild skip:ui queues a child into a GridLayout; positions come from the layout pass (dialog_screen.rs Layout::new body column)
LinearLayout.Orientation.setSpacing skip:ui sets the grid spacing of a linear layout; layout only
LinearLayout.Orientation.addChild skip:ui places a child in the grid row or column; layout only
NarrationElementOutput skip:other screen-reader narration; Horizon has no narration output
NarrationThunk skip:other screen-reader narration text; Horizon has no narration output
ScreenNarrationCollector skip:other screen-reader narration collection; Horizon has no narration output
ScreenNarrationCollector.NarrationEntry skip:other screen-reader narration entries; Horizon has no narration output
ScreenNarrationCollector.Output skip:other screen-reader narration output; Horizon has no narration output
ScreenAxis missing minor: keyboard focus moves along the axis (arrow keys, Tab) between widgets; Horizon's menus have no widget focus navigation, Tab only moves between title fields (title.rs tab)
ScreenDirection missing minor: keyboard focus navigation by direction (arrow keys); Horizon's menus have no widget focus navigation
ScreenPosition missing minor: grid position stepping for keyboard focus navigation; not in Horizon's menus
ScreenRectangle.of skip:java builds a rectangle from an axis-ordered index; Horizon uses x and y directly
ScreenRectangle.step missing minor: moves a rectangle one step for keyboard focus navigation; not in Horizon's menus
ScreenRectangle.getLength skip:java width or height accessor
ScreenRectangle.getBoundInDirection missing minor: edge coordinate for keyboard focus navigation; not in Horizon's menus
ScreenRectangle.getBorder missing minor: border strip used by keyboard focus navigation to find the next widget; not in Horizon's menus
ScreenRectangle.overlaps missing minor: overlap test used by keyboard focus navigation; not in Horizon's menus
ScreenRectangle.overlapsInAxis missing minor: per-axis overlap used by keyboard focus navigation; not in Horizon's menus
ScreenRectangle.getCenterInAxis missing minor: centre along one axis for keyboard focus navigation; not in Horizon's menus
ScreenRectangle.intersection missing minor: a nested GUI clip is not intersected with the outer one; paint (screen_draw.rs) replaces the clip on each Scissor draw
ScreenRectangle.intersects skip:other no caller in the 26.3 client GUI code; pure geometry predicate
ScreenRectangle.encompasses skip:other used by GuiRenderState for element batching bounds; Horizon appends quads to the HUD batch without it
ScreenRectangle.containsPoint port crates/horizon-client/src/screen_draw.rs::inside the same half-open point-in-rectangle test
ScreenRectangle.transformAxisAligned skip:other bounds of a rectangle under a GUI pose, for the GUI scissor; Horizon clips the quads themselves (hud.rs HudBatch::clip_since)
ScreenRectangle.transformMaxBounds skip:other bounds of a rotated rectangle under a GUI pose; Horizon clips the quads themselves (hud.rs HudBatch::clip_since)
DynamicAtlasAllocator skip:other slot allocator for the GUI item atlas; Horizon has no item atlas and draws items into the HUD batch (item_render/gui.rs)
GuiItemAtlas.computeTextureSizeFor skip:other atlas texture sizing; Horizon has no item atlas
GuiItemAtlas.tryPrepareFor skip:other atlas space check; Horizon has no item atlas
GuiItemAtlas.getOrUpdate inline crates/horizon-client/src/item_render/gui.rs::draw gap: minor: vanilla draws each item once into an atlas slot and blits it; Horizon re-submits the item and caches its vertices by position (gui_drawn, DrawnKey)
GuiItemAtlas.drawToSlot port crates/horizon-client/src/item_render/gui.rs::draw_now the item is clipped to its 16x16 slot unless oversized
GuiItemAtlas.close skip:other GPU texture release; Horizon has no item atlas
GuiRenderer.render inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: paint has no panorama, blur or GPU upload pass; the frame is one ordered list of draws
GuiRenderer.clearUnusedOversizedItemRenderers skip:other GPU renderer cache cleanup; Horizon's gui_drawn cache is bounded (DRAWN_LIMIT)
GuiRenderer.prepare inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: the prepare step is folded into paint's single pass; no separate mesh build
GuiRenderer.addElementsToMeshes skip:other vertex batching by pipeline and scissor; HudBatch appends quads in order
GuiRenderer.executeDrawRange port crates/horizon-client/src/hud.rs::HudRenderer::draw_range draws a range of the batch with its blend, depth and scissor state
GuiRenderer.addElementToMesh skip:other vertex batching by pipeline and scissor; HudBatch appends quads in order
GuiRenderer.prepareText inline crates/horizon-client/src/screen_draw.rs::paint text is drawn at its own pose through Draw::Text (batch.text_styled)
GuiRenderer.prepareItemElements port crates/horizon-client/src/item_render/gui.rs::draw gap: minor: oversized items are drawn unclipped into the HUD batch, not into a picture-in-picture texture
GuiRenderer.preparePictureInPicture skip:other Horizon calls each picture drawer directly (game/perspective.rs draw_player_preview, item_render/gui.rs draw_banner_result); no pool dispatch
GuiRenderer.preparePictureInPictureState skip:other picture-in-picture pool dispatch; Horizon calls each drawer directly
GuiRenderer.submitBlitFromItemAtlas inline crates/horizon-client/src/item_render/gui.rs::draw the atlas slot blit is the item drawn at its GUI position
GuiRenderer.prepareItemAtlas skip:other item atlas creation and resize; Horizon has no item atlas
GuiRenderer.getGuiScaleInvalidatingItemAtlasIfChanged skip:other item atlas invalidation on GUI scale change; Horizon has no item atlas
GuiRenderer.executeDraw port crates/horizon-client/src/hud.rs::HudRenderer::draw_range one pipeline, vertex buffer, scissor and index range draw
GuiRenderer.scissorChanged skip:other batching compare of scissor rectangles
GuiRenderer.enableScissor port crates/horizon-client/src/hud.rs::HudBatch::clip_since gap: minor: the rectangle arrives already intersected with the outer scissor (GuiGraphicsExtractor); a nested clip replaces the outer one in paint
GuiRenderer.close skip:other GPU resource release
TextureSetup.singleTextureWithLightmap skip:other GPU texture binding with the lightmap; Horizon's lighting is in the mesh
TextureSetup.getSortKey skip:other draw sort key for batching; Horizon appends in order
GuiBookModelRenderer.renderToTexture skip:other no GUI caller in the 26.3 sources (graphics.bookModel is never called)
GuiEntityRenderer.renderToTexture port crates/horizon-client/src/game/perspective.rs::Game::draw_player_preview gap: player: the smithing-table armor stand preview (SmithingScreen) is not drawn; only the player model
GuiProfilerChartRenderer.renderToTexture skip:debug the profiler pie chart (F3 profiler screen)
GuiSkinRenderer.renderToTexture missing player: Options > Skin Customisation has no rotating player model; options_ui.rs lists that entry without a page
OversizedItemRenderer.renderToTexture port crates/horizon-client/src/item_render/gui.rs::draw gap: minor: oversized items are drawn unclipped into the HUD batch, not via a picture-in-picture texture
OversizedItemRenderer.textureIsReadyToBlit skip:other cache check for the picture-in-picture texture; Horizon redraws from the item model
PictureInPictureRenderer.blitTexture skip:other picture-in-picture texture blit; Horizon draws each preview into the batch directly (draw_player_preview, draw_banner_result)
PictureInPictureRenderer.prepareTexturesAndProjection skip:other GPU texture allocation for a picture-in-picture
PictureInPictureRenderer.close skip:other GPU texture release
AccessibilityOnboardingScreen.init missing player: first launch shows the accessibility onboarding (onboardAccessibility defaults to true in options_file.rs) with narrator, Sounds, Accessibility, Language and Continue; Horizon has no such screen (options_fixes.rs only turns it off for old files)
AccessibilityOnboardingScreen.setInitialFocus missing minor: keyboard focus starts on the narrator button; part of the missing onboarding screen
AccessibilityOnboardingScreen.closeAndSetScreen missing player: the Sounds, Accessibility and Language buttons on the onboarding screen; part of the missing screen
AccessibilityOnboardingScreen.extractRenderState missing player: the onboarding screen fades in over 2 s, fades out on Continue, and draws the logo
AccessibilityOnboardingScreen.handleInitialNarrationDelay skip:other screen-reader narration; Horizon has no narration output
AlertScreen missing unsure: no alert screen (title, message, OK) found in Horizon; vanilla callers are world-open, recovery and pack errors (WorldOpenFlows.java, RecoverWorldDataScreen.java, PackSelectionScreen.java)
BackupConfirmScreen missing unsure: no backup question before opening a world that needs one (WorldOpenFlows.java:375, EditWorldScreen.java:111); Horizon's backup is only Make Backup (title.rs)
BanNoticeScreens missing unsure: no ban or suspension notice for a multiplayer ban, forced name change or banned skin; Horizon reads no BanDetails or profile action (Gui.java addInitialScreens)
ChatScreen.removed missing player: unfinished chat text is kept when the chat is interrupted or with Save Chat Drafts on; Horizon's close_chat (game/chat.rs) drops it
ChatScreen.shouldDiscardDraft missing player: decides whether closing chat keeps the typed text as a draft; Horizon has no draft state
ChatScreen.insertText port crates/horizon-client/src/chat.rs::ChatScreen::type_text insert at the cursor; replace=true (setValue) is ChatScreen::suggest_command in Horizon
ChatScreen.formatChat missing minor: a restored draft is drawn grey italic; Horizon has no draft state (see ChatScreen.removed)
ChatScreen.updateNarrationState skip:other screen-reader narration; Horizon has no narration output
1 BitmapProvider.ImageDataHolder.gpuData skip:other GPU staging buffer for a sheet; Horizon copies the sheet pixels into its atlas at load (font.rs load_bitmap)
2 FreeTypeUtil skip:other FreeType library wrapper (getLibrary, error helpers, setVector, destroy); Horizon rasterizes TrueType with ab_glyph (font.rs load_true_type)
3 UnihexProvider.unpackBitsToBytes port crates/horizon-client/src/font.rs::Font::rasterize_hex gap: minor: rows are written as RGBA into the atlas region, not an IntBuffer; same glyph columns
4 UnihexProvider.decodeHex port crates/horizon-client/src/font.rs::parse_hex_digit gap: minor: a bad digit skips the whole glyph line (vanilla throws and fails the load)
5 UnihexProvider.copyUntil inline crates/horizon-client/src/font.rs::parse_hex line splitting on newline and CR; the .hex text is parsed in one pass
6 UnihexProvider.ByteContents.read inline crates/horizon-client/src/font.rs::parse_hex 8 px rows (32 hex digits) read by parse_hex
7 UnihexProvider.Definition.loadData port crates/horizon-client/src/font.rs::load_hex reads every .hex entry of the zip and applies size_overrides
8 UnihexProvider.Dimensions.pack skip:java packs left and right into one int as a map value; Horizon keeps two fields on HexGlyph
9 UnihexProvider.IntContents.read24 port crates/horizon-client/src/font.rs::parse_hex 6-digit rows (24 bit) handled by parse_hex
10 UnihexProvider.IntContents.read32 port crates/horizon-client/src/font.rs::parse_hex 8-digit rows (32 bit) handled by parse_hex
11 UnihexProvider.LineData.mask inline crates/horizon-client/src/font.rs::parse_hex the OR of the rows, used for the glyph width (mask |= row)
12 UnihexProvider.ShortContents.read port crates/horizon-client/src/font.rs::parse_hex 4-digit rows (16 bit) handled by parse_hex
13 AbstractLayout.setX skip:ui moves a layout's children with it; Horizon computes positions each frame (dialog_screen.rs Layout::new)
14 AbstractLayout.setY skip:ui moves a layout's children with it; Horizon computes positions each frame (dialog_screen.rs Layout::new)
15 AbstractLayout.AbstractChildWrapper.getHeight skip:ui padded child height, layout bookkeeping only
16 AbstractLayout.AbstractChildWrapper.getWidth skip:ui padded child width, layout bookkeeping only
17 AbstractLayout.AbstractChildWrapper.setX inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: only centred alignment (0.5) is modelled; xAlignment and per-child padding are not
18 AbstractLayout.AbstractChildWrapper.setY inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: only centred alignment (0.5) is modelled; yAlignment and per-child padding are not
19 EqualSpacingLayout skip:ui equal-gap layout; its only user is WorldOptionsScreen, placing its buttons; layout only, no behaviour
20 EqualSpacingLayout.Orientation skip:ui horizontal or vertical helpers of EqualSpacingLayout; layout only
21 FrameLayout.arrangeElements inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: frame centring is done for the header title and the footer buttons only; no general minimum size
22 FrameLayout.addChild skip:ui adds a child to the frame's list; no behaviour of its own
23 FrameLayout.visitChildren skip:ui visits children for layout; no behaviour of its own
24 FrameLayout.centerInRectangle port crates/horizon-client/src/dialog_screen.rs::centre gap: minor: one axis at a time through centre; the 2D call is not a separate fn
25 FrameLayout.alignInRectangle inline crates/horizon-client/src/dialog_screen.rs::Layout::new gap: minor: only the centre alignment (0.5); PauseScreen's 0.25 vertical alignment is not modelled
26 GridLayout.arrangeElements port crates/horizon-client/src/dialog_screen.rs::columns gap: minor: only the dialog button grids (2 px apart, 22 px rows); general row and column spans and spacing are not modelled
27 GridLayout.addChild skip:ui adds a cell to the grid's list; no behaviour of its own
28 GridLayout.visitChildren skip:ui visits children for layout; no behaviour of its own
29 GridLayout.RowHelper.addChild inline crates/horizon-client/src/dialog_screen.rs::columns gap: minor: rows fill left to right and a full row is cut from the list by columns(); a row that does not fit moves down, as RowHelper does
30 HeaderAndFooterLayout.visitChildren skip:ui visits children for layout; no behaviour of its own
31 HeaderAndFooterLayout.arrangeElements port crates/horizon-client/src/dialog_screen.rs::Layout::new header 33 high, body at header + 30 clamped above the footer, footer at the bottom; server_links.rs list_top and lan_screen.rs WorldOptions::top do the same for their screens
32 HeaderAndFooterLayout.addToHeader skip:ui adds to the header frame; no behaviour of its own
33 HeaderAndFooterLayout.addToFooter skip:ui adds to the footer frame; no behaviour of its own
34 HeaderAndFooterLayout.addToContents skip:ui adds to the contents frame; no behaviour of its own
35 Layout.arrangeElements skip:ui default recursive layout pass; Horizon places each screen's parts directly
36 LayoutElement.getRectangle skip:ui builds a rectangle from position and size; Horizon uses [f32; 4] arrays
37 LayoutSettings.LayoutSettingsImpl.padding skip:java builder method for padding values
38 LinearLayout.addChild skip:ui queues a child into a GridLayout; positions come from the layout pass (dialog_screen.rs Layout::new body column)
39 LinearLayout.Orientation.setSpacing skip:ui sets the grid spacing of a linear layout; layout only
40 LinearLayout.Orientation.addChild skip:ui places a child in the grid row or column; layout only
41 NarrationElementOutput skip:other screen-reader narration; Horizon has no narration output
42 NarrationThunk skip:other screen-reader narration text; Horizon has no narration output
43 ScreenNarrationCollector skip:other screen-reader narration collection; Horizon has no narration output
44 ScreenNarrationCollector.NarrationEntry skip:other screen-reader narration entries; Horizon has no narration output
45 ScreenNarrationCollector.Output skip:other screen-reader narration output; Horizon has no narration output
46 ScreenAxis missing minor: keyboard focus moves along the axis (arrow keys, Tab) between widgets; Horizon's menus have no widget focus navigation, Tab only moves between title fields (title.rs tab)
47 ScreenDirection missing minor: keyboard focus navigation by direction (arrow keys); Horizon's menus have no widget focus navigation
48 ScreenPosition missing minor: grid position stepping for keyboard focus navigation; not in Horizon's menus
49 ScreenRectangle.of skip:java builds a rectangle from an axis-ordered index; Horizon uses x and y directly
50 ScreenRectangle.step missing minor: moves a rectangle one step for keyboard focus navigation; not in Horizon's menus
51 ScreenRectangle.getLength skip:java width or height accessor
52 ScreenRectangle.getBoundInDirection missing minor: edge coordinate for keyboard focus navigation; not in Horizon's menus
53 ScreenRectangle.getBorder missing minor: border strip used by keyboard focus navigation to find the next widget; not in Horizon's menus
54 ScreenRectangle.overlaps missing minor: overlap test used by keyboard focus navigation; not in Horizon's menus
55 ScreenRectangle.overlapsInAxis missing minor: per-axis overlap used by keyboard focus navigation; not in Horizon's menus
56 ScreenRectangle.getCenterInAxis missing minor: centre along one axis for keyboard focus navigation; not in Horizon's menus
57 ScreenRectangle.intersection missing minor: a nested GUI clip is not intersected with the outer one; paint (screen_draw.rs) replaces the clip on each Scissor draw
58 ScreenRectangle.intersects skip:other no caller in the 26.3 client GUI code; pure geometry predicate
59 ScreenRectangle.encompasses skip:other used by GuiRenderState for element batching bounds; Horizon appends quads to the HUD batch without it
60 ScreenRectangle.containsPoint port crates/horizon-client/src/screen_draw.rs::inside the same half-open point-in-rectangle test
61 ScreenRectangle.transformAxisAligned skip:other bounds of a rectangle under a GUI pose, for the GUI scissor; Horizon clips the quads themselves (hud.rs HudBatch::clip_since)
62 ScreenRectangle.transformMaxBounds skip:other bounds of a rotated rectangle under a GUI pose; Horizon clips the quads themselves (hud.rs HudBatch::clip_since)
63 DynamicAtlasAllocator skip:other slot allocator for the GUI item atlas; Horizon has no item atlas and draws items into the HUD batch (item_render/gui.rs)
64 GuiItemAtlas.computeTextureSizeFor skip:other atlas texture sizing; Horizon has no item atlas
65 GuiItemAtlas.tryPrepareFor skip:other atlas space check; Horizon has no item atlas
66 GuiItemAtlas.getOrUpdate inline crates/horizon-client/src/item_render/gui.rs::draw gap: minor: vanilla draws each item once into an atlas slot and blits it; Horizon re-submits the item and caches its vertices by position (gui_drawn, DrawnKey)
67 GuiItemAtlas.drawToSlot port crates/horizon-client/src/item_render/gui.rs::draw_now the item is clipped to its 16x16 slot unless oversized
68 GuiItemAtlas.close skip:other GPU texture release; Horizon has no item atlas
69 GuiRenderer.render inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: paint has no panorama, blur or GPU upload pass; the frame is one ordered list of draws
70 GuiRenderer.clearUnusedOversizedItemRenderers skip:other GPU renderer cache cleanup; Horizon's gui_drawn cache is bounded (DRAWN_LIMIT)
71 GuiRenderer.prepare inline crates/horizon-client/src/screen_draw.rs::paint gap: minor: the prepare step is folded into paint's single pass; no separate mesh build
72 GuiRenderer.addElementsToMeshes skip:other vertex batching by pipeline and scissor; HudBatch appends quads in order
73 GuiRenderer.executeDrawRange port crates/horizon-client/src/hud.rs::HudRenderer::draw_range draws a range of the batch with its blend, depth and scissor state
74 GuiRenderer.addElementToMesh skip:other vertex batching by pipeline and scissor; HudBatch appends quads in order
75 GuiRenderer.prepareText inline crates/horizon-client/src/screen_draw.rs::paint text is drawn at its own pose through Draw::Text (batch.text_styled)
76 GuiRenderer.prepareItemElements port crates/horizon-client/src/item_render/gui.rs::draw gap: minor: oversized items are drawn unclipped into the HUD batch, not into a picture-in-picture texture
77 GuiRenderer.preparePictureInPicture skip:other Horizon calls each picture drawer directly (game/perspective.rs draw_player_preview, item_render/gui.rs draw_banner_result); no pool dispatch
78 GuiRenderer.preparePictureInPictureState skip:other picture-in-picture pool dispatch; Horizon calls each drawer directly
79 GuiRenderer.submitBlitFromItemAtlas inline crates/horizon-client/src/item_render/gui.rs::draw the atlas slot blit is the item drawn at its GUI position
80 GuiRenderer.prepareItemAtlas skip:other item atlas creation and resize; Horizon has no item atlas
81 GuiRenderer.getGuiScaleInvalidatingItemAtlasIfChanged skip:other item atlas invalidation on GUI scale change; Horizon has no item atlas
82 GuiRenderer.executeDraw port crates/horizon-client/src/hud.rs::HudRenderer::draw_range one pipeline, vertex buffer, scissor and index range draw
83 GuiRenderer.scissorChanged skip:other batching compare of scissor rectangles
84 GuiRenderer.enableScissor port crates/horizon-client/src/hud.rs::HudBatch::clip_since gap: minor: the rectangle arrives already intersected with the outer scissor (GuiGraphicsExtractor); a nested clip replaces the outer one in paint
85 GuiRenderer.close skip:other GPU resource release
86 TextureSetup.singleTextureWithLightmap skip:other GPU texture binding with the lightmap; Horizon's lighting is in the mesh
87 TextureSetup.getSortKey skip:other draw sort key for batching; Horizon appends in order
88 GuiBookModelRenderer.renderToTexture skip:other no GUI caller in the 26.3 sources (graphics.bookModel is never called)
89 GuiEntityRenderer.renderToTexture port crates/horizon-client/src/game/perspective.rs::Game::draw_player_preview gap: player: the smithing-table armor stand preview (SmithingScreen) is not drawn; only the player model
90 GuiProfilerChartRenderer.renderToTexture skip:debug the profiler pie chart (F3 profiler screen)
91 GuiSkinRenderer.renderToTexture missing player: Options > Skin Customisation has no rotating player model; options_ui.rs lists that entry without a page
92 OversizedItemRenderer.renderToTexture port crates/horizon-client/src/item_render/gui.rs::draw gap: minor: oversized items are drawn unclipped into the HUD batch, not via a picture-in-picture texture
93 OversizedItemRenderer.textureIsReadyToBlit skip:other cache check for the picture-in-picture texture; Horizon redraws from the item model
94 PictureInPictureRenderer.blitTexture skip:other picture-in-picture texture blit; Horizon draws each preview into the batch directly (draw_player_preview, draw_banner_result)
95 PictureInPictureRenderer.prepareTexturesAndProjection skip:other GPU texture allocation for a picture-in-picture
96 PictureInPictureRenderer.close skip:other GPU texture release
97 AccessibilityOnboardingScreen.init missing player: first launch shows the accessibility onboarding (onboardAccessibility defaults to true in options_file.rs) with narrator, Sounds, Accessibility, Language and Continue; Horizon has no such screen (options_fixes.rs only turns it off for old files)
98 AccessibilityOnboardingScreen.setInitialFocus missing minor: keyboard focus starts on the narrator button; part of the missing onboarding screen
99 AccessibilityOnboardingScreen.closeAndSetScreen missing player: the Sounds, Accessibility and Language buttons on the onboarding screen; part of the missing screen
100 AccessibilityOnboardingScreen.extractRenderState missing player: the onboarding screen fades in over 2 s, fades out on Continue, and draws the logo
101 AccessibilityOnboardingScreen.handleInitialNarrationDelay skip:other screen-reader narration; Horizon has no narration output
102 AlertScreen missing unsure: no alert screen (title, message, OK) found in Horizon; vanilla callers are world-open, recovery and pack errors (WorldOpenFlows.java, RecoverWorldDataScreen.java, PackSelectionScreen.java)
103 BackupConfirmScreen missing unsure: no backup question before opening a world that needs one (WorldOpenFlows.java:375, EditWorldScreen.java:111); Horizon's backup is only Make Backup (title.rs)
104 BanNoticeScreens missing unsure: no ban or suspension notice for a multiplayer ban, forced name change or banned skin; Horizon reads no BanDetails or profile action (Gui.java addInitialScreens)
105 ChatScreen.removed missing player: unfinished chat text is kept when the chat is interrupted or with Save Chat Drafts on; Horizon's close_chat (game/chat.rs) drops it
106 ChatScreen.shouldDiscardDraft missing player: decides whether closing chat keeps the typed text as a draft; Horizon has no draft state
107 ChatScreen.insertText port crates/horizon-client/src/chat.rs::ChatScreen::type_text insert at the cursor; replace=true (setValue) is ChatScreen::suggest_command in Horizon
108 ChatScreen.formatChat missing minor: a restored draft is drawn grey italic; Horizon has no draft state (see ChatScreen.removed)
109 ChatScreen.updateNarrationState skip:other screen-reader narration; Horizon has no narration output
+150
View File
@@ -0,0 +1,150 @@
ConfirmLinkScreen.confirmMessage port crates/horizon-client/src/game/server_links.rs::confirm_link_layout gap: minor: no separate trusted text; the untrusted text is always used
ConfirmLinkScreen.addAdditionalText port crates/horizon-client/src/game/server_links.rs::confirm_link_layout gap: minor: the red warning is always drawn, vanilla draws it only for untrusted links
ConfirmLinkScreen.addButtons port crates/horizon-client/src/game/server_links.rs::Game::confirm_link_click Yes opens the browser, Copy Link copies, No goes back; 100 wide
ConfirmLinkScreen.confirmLinkNow port crates/horizon-client/src/game/server_links.rs::Game::click_link opens the prompt when Prompt on Links is on; gap: minor: the trusted flag is not passed
ConfirmLinkScreen.confirmLink inline crates/horizon-client/src/game/server_links.rs::Game::click_link the button's action, folded into click_link
ConfirmScreen.getNarrationMessage skip:other screen-reader narration; Horizon has no narrator
ConfirmScreen.addMessage port crates/horizon-client/src/confirm_screen.rs::Confirm::new message wrapped to width - 50, 15 rows at most, centred
ConfirmScreen.addButtons port crates/horizon-client/src/confirm_screen.rs::Confirm::answer_at Yes and No buttons; the answer comes from the click position
ConfirmScreen.tick inline crates/horizon-client/src/confirm_screen.rs::Confirm::draw_active the 20-tick delay is a 1000 ms timer kept by the caller; buttons are greyed while it runs
ConnectScreen.connect port crates/horizon-client/src/net.rs::Session::connect background connect on its own thread (Session::start)
ConnectScreen.tick port crates/horizon-client/src/game/remote.rs::Game::tick_remote ticks the pending session while it opens; game.rs tick sends remote sessions here
ConnectScreen.init missing player: no Cancel button while connecting, only the status line; unsure whether Escape aborts the join
ConnectScreen.extractRenderState port crates/horizon-client/src/game/remote.rs::Game::remote_overlay gap: minor: also draws the address line, vanilla draws only the status
CreateBuffetWorldScreen.init missing minor: the buffet biome picker is not in Horizon's create-world flow
CreateBuffetWorldScreen.repositionElements missing minor: layout of the buffet biome picker, which Horizon lacks
CreateBuffetWorldScreen.updateButtonValidity missing minor: Done needs a biome in the buffet picker, which Horizon lacks
CreateBuffetWorldScreen.BiomeList.filterEntries missing minor: biome search of the buffet picker, which Horizon lacks
CreateBuffetWorldScreen.BiomeList.setSelected missing minor: biome selection of the buffet picker, which Horizon lacks
CreateBuffetWorldScreen.BiomeList.Entry.extractContent missing minor: biome row of the buffet picker, which Horizon lacks
CreateFlatWorldScreen.setConfig port crates/horizon-client/src/title/flat.rs::State::apply_share applies the preset or typed share text as the layers; gap: minor: the rows are not rebuilt separately
CreateFlatWorldScreen.init port crates/horizon-client/src/title/flat.rs::buttons Remove Layer, Presets, Done and Cancel buttons
CreateFlatWorldScreen.repositionElements skip:ui layout only; the list is laid out each frame in flat.rs::list_area
CreateFlatWorldScreen.hasValidSelection inline crates/horizon-client/src/title/flat.rs::buttons Remove Layer is enabled only with a layer selected
CreateFlatWorldScreen.DetailsList.populateList inline crates/horizon-client/src/title/flat.rs::draw_layers the layer rows are read from the settings each frame
CreateFlatWorldScreen.DetailsList.resetRows inline crates/horizon-client/src/title/flat.rs::draw_layers nothing to rebuild; rows are drawn from the settings each frame
CreateFlatWorldScreen.DetailsList.deleteLayer port crates/horizon-client/src/title/flat.rs::State::remove_selected removes the selected layer; gap: minor: the next selection after a delete is not checked
CreateFlatWorldScreen.DetailsList.HeaderEntry.extractContent port crates/horizon-client/src/title/flat.rs::draw_layers Layer and Height column titles
CreateFlatWorldScreen.DetailsList.HeaderEntry.getNarration skip:other narration text; Horizon has no narrator
CreateFlatWorldScreen.DetailsList.LayerEntry.extractContent port crates/horizon-client/src/title/flat.rs::draw_layers slot, block name and the Top, Bottom or height label
CreateFlatWorldScreen.DetailsList.LayerEntry.getDisplayItem port crates/horizon-client/src/title/flat.rs::layer_icon water and lava use the bucket sprites
CreateFlatWorldScreen.DetailsList.LayerEntry.blitSlot port crates/horizon-client/src/title/flat.rs::slot slot frame and icon
CreditsAndAttributionScreen.init port crates/horizon-client/src/options_ui.rs::OptionsUi::layout Credits page: Credits, Attribution and Licenses buttons; gap: unsure whether Attribution and Licenses open links here
CreditsAndAttributionScreen.openCreditsScreen port crates/horizon-client/src/game/win.rs::Game::open_win_screen rolls the credits without the poem, then returns here
DatapackLoadFailureScreen.init missing minor: Horizon loads no data packs, so there is no datapack failure screen
DatapackLoadFailureScreen.extractRenderState missing minor: same as init, no datapack failure screen
DeathScreen.exitToTitleScreen port crates/horizon-client/src/game/screens.rs::Game::death_confirm_answer Yes leaves the world; gap: minor: the leave and title hand-off is one close_world call
DeathScreen.extractRenderState port crates/horizon-client/src/game/screens.rs::Game::draw_death_screen gap: minor: no draft-report badge on the title button (reporting service)
DeathScreen.visitText port crates/horizon-client/src/game/screens.rs::Game::draw_death_screen title at double size, cause and score lines
DeathScreen.mouseClicked port crates/horizon-client/src/game/screens.rs::Game::death_click buttons and the title confirm; gap: minor: a click on a link in the death text does nothing
DeathScreen.tick inline crates/horizon-client/src/game/screens.rs::Game::draw_death_screen the 20-tick delay is checked as 1000 ms since death, on draw and on click
DeathScreen.setButtonsActive inline crates/horizon-client/src/game/screens.rs::Game::draw_death_screen buttons are active once the 1000 ms delay has passed
DirectJoinServerScreen.keyPressed port crates/horizon-client/src/game/startup_menu.rs::StartupMenu::title_key gap: player: Enter in the Direct Connection field does not join; title_key only confirms a rename
DirectJoinServerScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons Direct Connection field with Join and Cancel (Screen::Direct arm)
DirectJoinServerScreen.resize skip:ui layout only; Screen::Direct keeps the typed address
DirectJoinServerScreen.onSelect port crates/horizon-client/src/multiplayer.rs::Screen::click Join returns the typed address as Outcome::Connect
DirectJoinServerScreen.removed port crates/horizon-client/src/title.rs::Title::remember_direct_address saves the address to last_server; gap: minor: the options file write is not in this fn
DirectJoinServerScreen.extractRenderState port crates/horizon-client/src/multiplayer.rs::Screen::draw title, label and address field (Screen::Direct arm)
DisconnectedScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons reason text and the disconnected buttons; gap: minor: no Report to Server or open-report-folder button
DisconnectedScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
ErrorScreen.init port crates/horizon-client/src/title.rs::Title::buttons Cancel button of the error mode (Mode::Error arm)
ErrorScreen.extractRenderState port crates/horizon-client/src/title.rs::Title::draw the error title and message (Mode::Error arm)
ErrorScreen.extractBackground port crates/horizon-client/src/title.rs::Title::draw gap: minor: the flat gradient is replaced by the title background
FaviconTexture.forWorld port crates/horizon-client/src/title.rs::Title::icon the world row's icon texture
FaviconTexture.forServer port crates/horizon-client/src/multiplayer.rs::ping_all server icon keyed by address, from the ping
FaviconTexture.clear inline crates/horizon-client/src/multiplayer.rs::ping_all icon dropped when the ping has no favicon
FileFixerAbortedScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
FileFixerAbortedScreen.init missing minor: no upgrade-aborted screen; Horizon has no world-fixer cancel flow
FileFixerAbortedScreen.addButtons missing minor: Back and Report Bug buttons of the aborted-upgrade screen
FileFixerAbortedScreen.keyPressed missing minor: Escape on the aborted-upgrade screen
GenericMessageScreen.init port crates/horizon-client/src/level_loading.rs::draw_progress centred message line while a world opens; gap: minor: no progress bar, the text is the loader's stage line
GenericMessageScreen.repositionElements skip:ui layout only
GenericMessageScreen.extractBackground port crates/horizon-client/src/ui.rs::menu_background the menu background behind the message
GenericWaitingScreen.createWaitingWithoutButton port crates/horizon-client/src/title.rs::Title::start_backup backup runs in the background; gap: minor: no waiting screen blocks input while it runs
GenericWaitingScreen.createWaiting skip:service waiting screen while a report is sent (reporting)
GenericWaitingScreen.createCompleted skip:service result screen after a report (reporting)
GenericWaitingScreen.init skip:service layout of the report waiting screen (reporting)
GenericWaitingScreen.tick skip:service the report button's delay (reporting)
GenericWaitingScreen.extractRenderState missing minor: no waiting text while a backup runs; Horizon shows a toast (title.rs::Title::update_toast)
GenericWaitingScreen.shouldCloseOnEsc skip:service Escape on the report waiting screen (reporting)
GenericWaitingScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
InBedChatScreen.init port crates/horizon-client/src/game/chat.rs::Game::draw_chat_screen Leave Bed button over the chat; its click is in chat_click
InBedChatScreen.onPlayerWokeUp port crates/horizon-client/src/game/chat.rs::Game::tick_in_bed_chat closes the chat, or turns it into the plain chat if text was typed; gap: minor: polled each tick, not on the wake event
LevelLoadingScreen.updateNarratedWidget skip:other narration text; Horizon has no narrator
LevelLoadingScreen.extractChunksForRendering port crates/horizon-client/src/level_loading.rs::draw chunk status colours; gap: minor: the debug red centre square is not drawn
LevelLoadingScreen.getNetherPortalSprite port crates/horizon-client/src/hud_overlays.rs::portal_overlay draws the block/nether_portal sprite
LoadingOverlay.extractRenderState port crates/horizon-client/src/game.rs::Game::render the reload screen's progress bar; gap: player: no Mojang logo and no fade in or out
LoadingOverlay.tick port crates/horizon-client/src/game/server_packs.rs::Game::tick_server_packs finishes the reload; gap: minor: no fade-out before it finishes
LoadingOverlay.isReadyToFadeOut missing minor: no one-second fade-in before the reload can finish
LoadingOverlay.extractProgressBar port crates/horizon-client/src/level_loading.rs::draw_progress 200 by 2 bar; gap: minor: no fade alpha
LoadingOverlay.LogoTexture.loadContents skip:other Horizon ships no Mojang logo (title_edition.rs)
ManageServerScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons name and address fields, resource packs cycle, Done and Cancel (Screen::Edit arm)
ManageServerScreen.resize skip:ui layout only; Screen::Edit keeps its fields
ManageServerScreen.onAdd port crates/horizon-client/src/multiplayer.rs::Screen::click Done saves the name (default if empty) and the address
ManageServerScreen.extractRenderState port crates/horizon-client/src/multiplayer.rs::Screen::draw labels and fields (Screen::Edit arm)
MenuScreens.create port crates/horizon-client/src/game/remote.rs::Game::remote_open_screen server-opened menus; gap: minor: the screen is built from the packet title
MenuScreens.register skip:data registry of menu types; Horizon reads them from tables
MenuScreens.selfTest skip:debug startup check that every menu has a screen
MenuScreens.ScreenConstructor.fromPacket port crates/horizon-client/src/game/remote.rs::Game::remote_open_screen builds the screen from the open-screen packet and sets the container menu
NoticeWithLinkScreen.init missing minor: no symlink warning when a world or pack folder is a symlink
NoticeWithLinkScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
OutOfMemoryScreen.init missing minor: unsure: no out-of-memory screen; Horizon does not handle allocation failures this way
PauseScreen.added skip:service friend list listener on the pause screen (social)
PauseScreen.init port crates/horizon-client/src/game/screens.rs::pause_buttons button layout; the title is drawn in draw_pause_menu
PauseScreen.createPauseMenu port crates/horizon-client/src/game/screens.rs::pause_buttons gap: player: Report Bugs, Feedback and Player Reporting icons are inactive, and no Mods button
PauseScreen.getCustomAdditions port crates/horizon-client/src/game/screens.rs::pause_buttons the server links row (links flag); gap: minor: only the server links dialog, the pause_screen_additions tag is not read
PauseScreen.addCustomDialogButtons port crates/horizon-client/src/game/screens.rs::Game::pause_click Server Links button (id 11) opens the links screen
PauseScreen.extractRenderState port crates/horizon-client/src/game/screens.rs::Game::draw_pause_menu gap: minor: no now-playing toast and no draft-report badge
PauseScreen.rendersNowPlayingToast missing minor: unsure: no check of the music-toast option on the pause screen
PauseScreen.openScreenButton inline crates/horizon-client/src/game/screens.rs::Game::pause_click the Advancements, Stats, Options and World Options actions
PresetFlatWorldScreen.getLayerInfoFromString inline crates/horizon-client/src/title/flat.rs::FlatSettings::parse one layer of the share text, parsed in the same loop
PresetFlatWorldScreen.getLayersInfoFromString port crates/horizon-client/src/title/flat.rs::FlatSettings::parse the share text's layers and biome; malformed text gives None
PresetFlatWorldScreen.save port crates/horizon-client/src/title/flat.rs::FlatSettings::to_share the share text
PresetFlatWorldScreen.init inline crates/horizon-client/src/title/flat.rs::buttons the share box and Select and Cancel buttons
PresetFlatWorldScreen.resize skip:ui layout only; the screen keeps its state
PresetFlatWorldScreen.extractRenderState port crates/horizon-client/src/title/flat.rs::draw_presets title, labels and share box
PresetFlatWorldScreen.updateButtonValidity inline crates/horizon-client/src/title/flat.rs::buttons Select is enabled with a preset or a share text longer than 1
PresetFlatWorldScreen.PresetsList.setSelected inline crates/horizon-client/src/title/flat.rs::State::select_preset selecting a preset fills the share text
PresetFlatWorldScreen.PresetsList.keyPressed missing minor: unsure: no keyboard selection of a preset found in title/flat.rs
PresetFlatWorldScreen.PresetsList.Entry.extractContent port crates/horizon-client/src/title/flat.rs::draw_presets preset icon and name
PresetFlatWorldScreen.PresetsList.Entry.select port crates/horizon-client/src/title/flat.rs::State::select_preset fills the share text with the preset's layers
PresetFlatWorldScreen.PresetsList.Entry.blitSlot port crates/horizon-client/src/title/flat.rs::slot slot frame and icon
PrivacyConfirmLinkScreen.init skip:service privacy link confirm from the friends and online settings (social)
PrivacyConfirmLinkScreen.addAdditionalText skip:service privacy link confirm from the friends and online settings (social)
PrivacyConfirmLinkScreen.confirmLinkNow skip:service opens privacy links from the friends and online settings (social)
ProgressScreen.extractRenderState port crates/horizon-client/src/game/saving.rs::Game::render_closing_save stage line and bar while the world saves; gap: minor: no header or percent text
RecoverWorldDataScreen.<init> missing minor: no Recover World screen; save.rs only reads level.dat_old as a fallback
RecoverWorldDataScreen.attemptRestore missing minor: no restore from level.dat_old in the menu
RecoverWorldDataScreen.buildInfo missing minor: no issue summary for level.dat and level.dat_old
RecoverWorldDataScreen.collectIssue missing minor: no issue check for level.dat and level.dat_old in the menu
RecoverWorldDataScreen.repositionElements missing minor: layout of the Recover World screen, which Horizon lacks
RecoverWorldDataScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
Screen.extractRenderStateWithTooltipAndSubtitles port crates/horizon-client/src/game.rs::Game::hud_layers draws the current screen's layer and tooltips; unsure about subtitles
Screen.setInitialFocus skip:ui keyboard focus starts on the first widget; Horizon draws its own focus
Screen.isInputCaptured port crates/horizon-client/src/title.rs::Title::has_caret_field gap: minor: only the title screen's text fields
Screen.addWidget skip:ui widget list plumbing; Horizon draws each screen from its own state
Screen.removeWidget skip:ui widget list plumbing; Horizon draws each screen from its own state
Screen.getTooltipFromItem port crates/horizon-client/src/item_tooltip.rs::lines tooltip lines for an item
Screen.defaultHandleGameClickEvent port crates/horizon-client/src/game/books.rs::Game::book_follow_link gap: minor: ShowDialog and custom click events are not handled here
Screen.fadeWidgets missing minor: unsure: no fade of widgets found in title.rs
Screen.extractPanorama port crates/horizon-client/src/gfx/panorama.rs::Panorama::draw the title panorama cube, drawn in the render pass
Screen.extractMenuBackground port crates/horizon-client/src/ui.rs::menu_background the dirt background with blur
Screen.extractMenuBackgroundTexture port crates/horizon-client/src/ui.rs::menu_background gap: minor: only the standard background texture
Screen.isValidCharacterForName missing minor: only the structure block name field uses it, and Horizon has no structure block editor
Screen.scheduleNarration skip:other narration timing; Horizon has no narrator
Screen.shouldRunNarration skip:other narration gate; Horizon has no narrator
Screen.handleDelayedNarration skip:other narration timing; Horizon has no narrator
Screen.runNarration skip:other narration output; Horizon has no narrator
Screen.updateNarratedWidget skip:other narration of widgets; Horizon has no narrator
Screen.findNarratableWidget skip:other narration focus search; Horizon has no narrator
Screen.updateNarratorStatus skip:other narrator option toggle only; Horizon has no narrator output
TitleScreen.tick skip:service Realms notifications and the friend request count (social)
TitleScreen.init port crates/horizon-client/src/title.rs::Title::buttons main menu buttons; the splash text is chosen at load (choose_splash)
TitleScreen.getHorizontalPosition skip:ui layout of the icon row only
TitleScreen.createNormalMenuOptions port crates/horizon-client/src/title.rs::Title::buttons gap: player: Minecraft Realms button is greyed out (service)
TitleScreen.getMultiplayerDisabledReason missing minor: unsure: no ban check; Multiplayer is always enabled in title.rs
TitleScreen.createDemoMenuOptions skip:other demo build only (isDemo); Horizon has no demo mode
TitleScreen.checkDemoWorldPresence skip:other demo world only
TitleScreen.extractRenderState port crates/horizon-client/src/title.rs::Title::draw version line and buttons
TitleScreen.mouseClicked port crates/horizon-client/src/title.rs::Title::click gap: minor: no Realms notification popup to click
TitleScreen.confirmDemo skip:other demo world reset only
1 ConfirmLinkScreen.confirmMessage port crates/horizon-client/src/game/server_links.rs::confirm_link_layout gap: minor: no separate trusted text; the untrusted text is always used
2 ConfirmLinkScreen.addAdditionalText port crates/horizon-client/src/game/server_links.rs::confirm_link_layout gap: minor: the red warning is always drawn, vanilla draws it only for untrusted links
3 ConfirmLinkScreen.addButtons port crates/horizon-client/src/game/server_links.rs::Game::confirm_link_click Yes opens the browser, Copy Link copies, No goes back; 100 wide
4 ConfirmLinkScreen.confirmLinkNow port crates/horizon-client/src/game/server_links.rs::Game::click_link opens the prompt when Prompt on Links is on; gap: minor: the trusted flag is not passed
5 ConfirmLinkScreen.confirmLink inline crates/horizon-client/src/game/server_links.rs::Game::click_link the button's action, folded into click_link
6 ConfirmScreen.getNarrationMessage skip:other screen-reader narration; Horizon has no narrator
7 ConfirmScreen.addMessage port crates/horizon-client/src/confirm_screen.rs::Confirm::new message wrapped to width - 50, 15 rows at most, centred
8 ConfirmScreen.addButtons port crates/horizon-client/src/confirm_screen.rs::Confirm::answer_at Yes and No buttons; the answer comes from the click position
9 ConfirmScreen.tick inline crates/horizon-client/src/confirm_screen.rs::Confirm::draw_active the 20-tick delay is a 1000 ms timer kept by the caller; buttons are greyed while it runs
10 ConnectScreen.connect port crates/horizon-client/src/net.rs::Session::connect background connect on its own thread (Session::start)
11 ConnectScreen.tick port crates/horizon-client/src/game/remote.rs::Game::tick_remote ticks the pending session while it opens; game.rs tick sends remote sessions here
12 ConnectScreen.init missing player: no Cancel button while connecting, only the status line; unsure whether Escape aborts the join
13 ConnectScreen.extractRenderState port crates/horizon-client/src/game/remote.rs::Game::remote_overlay gap: minor: also draws the address line, vanilla draws only the status
14 CreateBuffetWorldScreen.init missing minor: the buffet biome picker is not in Horizon's create-world flow
15 CreateBuffetWorldScreen.repositionElements missing minor: layout of the buffet biome picker, which Horizon lacks
16 CreateBuffetWorldScreen.updateButtonValidity missing minor: Done needs a biome in the buffet picker, which Horizon lacks
17 CreateBuffetWorldScreen.BiomeList.filterEntries missing minor: biome search of the buffet picker, which Horizon lacks
18 CreateBuffetWorldScreen.BiomeList.setSelected missing minor: biome selection of the buffet picker, which Horizon lacks
19 CreateBuffetWorldScreen.BiomeList.Entry.extractContent missing minor: biome row of the buffet picker, which Horizon lacks
20 CreateFlatWorldScreen.setConfig port crates/horizon-client/src/title/flat.rs::State::apply_share applies the preset or typed share text as the layers; gap: minor: the rows are not rebuilt separately
21 CreateFlatWorldScreen.init port crates/horizon-client/src/title/flat.rs::buttons Remove Layer, Presets, Done and Cancel buttons
22 CreateFlatWorldScreen.repositionElements skip:ui layout only; the list is laid out each frame in flat.rs::list_area
23 CreateFlatWorldScreen.hasValidSelection inline crates/horizon-client/src/title/flat.rs::buttons Remove Layer is enabled only with a layer selected
24 CreateFlatWorldScreen.DetailsList.populateList inline crates/horizon-client/src/title/flat.rs::draw_layers the layer rows are read from the settings each frame
25 CreateFlatWorldScreen.DetailsList.resetRows inline crates/horizon-client/src/title/flat.rs::draw_layers nothing to rebuild; rows are drawn from the settings each frame
26 CreateFlatWorldScreen.DetailsList.deleteLayer port crates/horizon-client/src/title/flat.rs::State::remove_selected removes the selected layer; gap: minor: the next selection after a delete is not checked
27 CreateFlatWorldScreen.DetailsList.HeaderEntry.extractContent port crates/horizon-client/src/title/flat.rs::draw_layers Layer and Height column titles
28 CreateFlatWorldScreen.DetailsList.HeaderEntry.getNarration skip:other narration text; Horizon has no narrator
29 CreateFlatWorldScreen.DetailsList.LayerEntry.extractContent port crates/horizon-client/src/title/flat.rs::draw_layers slot, block name and the Top, Bottom or height label
30 CreateFlatWorldScreen.DetailsList.LayerEntry.getDisplayItem port crates/horizon-client/src/title/flat.rs::layer_icon water and lava use the bucket sprites
31 CreateFlatWorldScreen.DetailsList.LayerEntry.blitSlot port crates/horizon-client/src/title/flat.rs::slot slot frame and icon
32 CreditsAndAttributionScreen.init port crates/horizon-client/src/options_ui.rs::OptionsUi::layout Credits page: Credits, Attribution and Licenses buttons; gap: unsure whether Attribution and Licenses open links here
33 CreditsAndAttributionScreen.openCreditsScreen port crates/horizon-client/src/game/win.rs::Game::open_win_screen rolls the credits without the poem, then returns here
34 DatapackLoadFailureScreen.init missing minor: Horizon loads no data packs, so there is no datapack failure screen
35 DatapackLoadFailureScreen.extractRenderState missing minor: same as init, no datapack failure screen
36 DeathScreen.exitToTitleScreen port crates/horizon-client/src/game/screens.rs::Game::death_confirm_answer Yes leaves the world; gap: minor: the leave and title hand-off is one close_world call
37 DeathScreen.extractRenderState port crates/horizon-client/src/game/screens.rs::Game::draw_death_screen gap: minor: no draft-report badge on the title button (reporting service)
38 DeathScreen.visitText port crates/horizon-client/src/game/screens.rs::Game::draw_death_screen title at double size, cause and score lines
39 DeathScreen.mouseClicked port crates/horizon-client/src/game/screens.rs::Game::death_click buttons and the title confirm; gap: minor: a click on a link in the death text does nothing
40 DeathScreen.tick inline crates/horizon-client/src/game/screens.rs::Game::draw_death_screen the 20-tick delay is checked as 1000 ms since death, on draw and on click
41 DeathScreen.setButtonsActive inline crates/horizon-client/src/game/screens.rs::Game::draw_death_screen buttons are active once the 1000 ms delay has passed
42 DirectJoinServerScreen.keyPressed port crates/horizon-client/src/game/startup_menu.rs::StartupMenu::title_key gap: player: Enter in the Direct Connection field does not join; title_key only confirms a rename
43 DirectJoinServerScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons Direct Connection field with Join and Cancel (Screen::Direct arm)
44 DirectJoinServerScreen.resize skip:ui layout only; Screen::Direct keeps the typed address
45 DirectJoinServerScreen.onSelect port crates/horizon-client/src/multiplayer.rs::Screen::click Join returns the typed address as Outcome::Connect
46 DirectJoinServerScreen.removed port crates/horizon-client/src/title.rs::Title::remember_direct_address saves the address to last_server; gap: minor: the options file write is not in this fn
47 DirectJoinServerScreen.extractRenderState port crates/horizon-client/src/multiplayer.rs::Screen::draw title, label and address field (Screen::Direct arm)
48 DisconnectedScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons reason text and the disconnected buttons; gap: minor: no Report to Server or open-report-folder button
49 DisconnectedScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
50 ErrorScreen.init port crates/horizon-client/src/title.rs::Title::buttons Cancel button of the error mode (Mode::Error arm)
51 ErrorScreen.extractRenderState port crates/horizon-client/src/title.rs::Title::draw the error title and message (Mode::Error arm)
52 ErrorScreen.extractBackground port crates/horizon-client/src/title.rs::Title::draw gap: minor: the flat gradient is replaced by the title background
53 FaviconTexture.forWorld port crates/horizon-client/src/title.rs::Title::icon the world row's icon texture
54 FaviconTexture.forServer port crates/horizon-client/src/multiplayer.rs::ping_all server icon keyed by address, from the ping
55 FaviconTexture.clear inline crates/horizon-client/src/multiplayer.rs::ping_all icon dropped when the ping has no favicon
56 FileFixerAbortedScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
57 FileFixerAbortedScreen.init missing minor: no upgrade-aborted screen; Horizon has no world-fixer cancel flow
58 FileFixerAbortedScreen.addButtons missing minor: Back and Report Bug buttons of the aborted-upgrade screen
59 FileFixerAbortedScreen.keyPressed missing minor: Escape on the aborted-upgrade screen
60 GenericMessageScreen.init port crates/horizon-client/src/level_loading.rs::draw_progress centred message line while a world opens; gap: minor: no progress bar, the text is the loader's stage line
61 GenericMessageScreen.repositionElements skip:ui layout only
62 GenericMessageScreen.extractBackground port crates/horizon-client/src/ui.rs::menu_background the menu background behind the message
63 GenericWaitingScreen.createWaitingWithoutButton port crates/horizon-client/src/title.rs::Title::start_backup backup runs in the background; gap: minor: no waiting screen blocks input while it runs
64 GenericWaitingScreen.createWaiting skip:service waiting screen while a report is sent (reporting)
65 GenericWaitingScreen.createCompleted skip:service result screen after a report (reporting)
66 GenericWaitingScreen.init skip:service layout of the report waiting screen (reporting)
67 GenericWaitingScreen.tick skip:service the report button's delay (reporting)
68 GenericWaitingScreen.extractRenderState missing minor: no waiting text while a backup runs; Horizon shows a toast (title.rs::Title::update_toast)
69 GenericWaitingScreen.shouldCloseOnEsc skip:service Escape on the report waiting screen (reporting)
70 GenericWaitingScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
71 InBedChatScreen.init port crates/horizon-client/src/game/chat.rs::Game::draw_chat_screen Leave Bed button over the chat; its click is in chat_click
72 InBedChatScreen.onPlayerWokeUp port crates/horizon-client/src/game/chat.rs::Game::tick_in_bed_chat closes the chat, or turns it into the plain chat if text was typed; gap: minor: polled each tick, not on the wake event
73 LevelLoadingScreen.updateNarratedWidget skip:other narration text; Horizon has no narrator
74 LevelLoadingScreen.extractChunksForRendering port crates/horizon-client/src/level_loading.rs::draw chunk status colours; gap: minor: the debug red centre square is not drawn
75 LevelLoadingScreen.getNetherPortalSprite port crates/horizon-client/src/hud_overlays.rs::portal_overlay draws the block/nether_portal sprite
76 LoadingOverlay.extractRenderState port crates/horizon-client/src/game.rs::Game::render the reload screen's progress bar; gap: player: no Mojang logo and no fade in or out
77 LoadingOverlay.tick port crates/horizon-client/src/game/server_packs.rs::Game::tick_server_packs finishes the reload; gap: minor: no fade-out before it finishes
78 LoadingOverlay.isReadyToFadeOut missing minor: no one-second fade-in before the reload can finish
79 LoadingOverlay.extractProgressBar port crates/horizon-client/src/level_loading.rs::draw_progress 200 by 2 bar; gap: minor: no fade alpha
80 LoadingOverlay.LogoTexture.loadContents skip:other Horizon ships no Mojang logo (title_edition.rs)
81 ManageServerScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons name and address fields, resource packs cycle, Done and Cancel (Screen::Edit arm)
82 ManageServerScreen.resize skip:ui layout only; Screen::Edit keeps its fields
83 ManageServerScreen.onAdd port crates/horizon-client/src/multiplayer.rs::Screen::click Done saves the name (default if empty) and the address
84 ManageServerScreen.extractRenderState port crates/horizon-client/src/multiplayer.rs::Screen::draw labels and fields (Screen::Edit arm)
85 MenuScreens.create port crates/horizon-client/src/game/remote.rs::Game::remote_open_screen server-opened menus; gap: minor: the screen is built from the packet title
86 MenuScreens.register skip:data registry of menu types; Horizon reads them from tables
87 MenuScreens.selfTest skip:debug startup check that every menu has a screen
88 MenuScreens.ScreenConstructor.fromPacket port crates/horizon-client/src/game/remote.rs::Game::remote_open_screen builds the screen from the open-screen packet and sets the container menu
89 NoticeWithLinkScreen.init missing minor: no symlink warning when a world or pack folder is a symlink
90 NoticeWithLinkScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
91 OutOfMemoryScreen.init missing minor: unsure: no out-of-memory screen; Horizon does not handle allocation failures this way
92 PauseScreen.added skip:service friend list listener on the pause screen (social)
93 PauseScreen.init port crates/horizon-client/src/game/screens.rs::pause_buttons button layout; the title is drawn in draw_pause_menu
94 PauseScreen.createPauseMenu port crates/horizon-client/src/game/screens.rs::pause_buttons gap: player: Report Bugs, Feedback and Player Reporting icons are inactive, and no Mods button
95 PauseScreen.getCustomAdditions port crates/horizon-client/src/game/screens.rs::pause_buttons the server links row (links flag); gap: minor: only the server links dialog, the pause_screen_additions tag is not read
96 PauseScreen.addCustomDialogButtons port crates/horizon-client/src/game/screens.rs::Game::pause_click Server Links button (id 11) opens the links screen
97 PauseScreen.extractRenderState port crates/horizon-client/src/game/screens.rs::Game::draw_pause_menu gap: minor: no now-playing toast and no draft-report badge
98 PauseScreen.rendersNowPlayingToast missing minor: unsure: no check of the music-toast option on the pause screen
99 PauseScreen.openScreenButton inline crates/horizon-client/src/game/screens.rs::Game::pause_click the Advancements, Stats, Options and World Options actions
100 PresetFlatWorldScreen.getLayerInfoFromString inline crates/horizon-client/src/title/flat.rs::FlatSettings::parse one layer of the share text, parsed in the same loop
101 PresetFlatWorldScreen.getLayersInfoFromString port crates/horizon-client/src/title/flat.rs::FlatSettings::parse the share text's layers and biome; malformed text gives None
102 PresetFlatWorldScreen.save port crates/horizon-client/src/title/flat.rs::FlatSettings::to_share the share text
103 PresetFlatWorldScreen.init inline crates/horizon-client/src/title/flat.rs::buttons the share box and Select and Cancel buttons
104 PresetFlatWorldScreen.resize skip:ui layout only; the screen keeps its state
105 PresetFlatWorldScreen.extractRenderState port crates/horizon-client/src/title/flat.rs::draw_presets title, labels and share box
106 PresetFlatWorldScreen.updateButtonValidity inline crates/horizon-client/src/title/flat.rs::buttons Select is enabled with a preset or a share text longer than 1
107 PresetFlatWorldScreen.PresetsList.setSelected inline crates/horizon-client/src/title/flat.rs::State::select_preset selecting a preset fills the share text
108 PresetFlatWorldScreen.PresetsList.keyPressed missing minor: unsure: no keyboard selection of a preset found in title/flat.rs
109 PresetFlatWorldScreen.PresetsList.Entry.extractContent port crates/horizon-client/src/title/flat.rs::draw_presets preset icon and name
110 PresetFlatWorldScreen.PresetsList.Entry.select port crates/horizon-client/src/title/flat.rs::State::select_preset fills the share text with the preset's layers
111 PresetFlatWorldScreen.PresetsList.Entry.blitSlot port crates/horizon-client/src/title/flat.rs::slot slot frame and icon
112 PrivacyConfirmLinkScreen.init skip:service privacy link confirm from the friends and online settings (social)
113 PrivacyConfirmLinkScreen.addAdditionalText skip:service privacy link confirm from the friends and online settings (social)
114 PrivacyConfirmLinkScreen.confirmLinkNow skip:service opens privacy links from the friends and online settings (social)
115 ProgressScreen.extractRenderState port crates/horizon-client/src/game/saving.rs::Game::render_closing_save stage line and bar while the world saves; gap: minor: no header or percent text
116 RecoverWorldDataScreen.<init> missing minor: no Recover World screen; save.rs only reads level.dat_old as a fallback
117 RecoverWorldDataScreen.attemptRestore missing minor: no restore from level.dat_old in the menu
118 RecoverWorldDataScreen.buildInfo missing minor: no issue summary for level.dat and level.dat_old
119 RecoverWorldDataScreen.collectIssue missing minor: no issue check for level.dat and level.dat_old in the menu
120 RecoverWorldDataScreen.repositionElements missing minor: layout of the Recover World screen, which Horizon lacks
121 RecoverWorldDataScreen.getNarrationMessage skip:other narration text; Horizon has no narrator
122 Screen.extractRenderStateWithTooltipAndSubtitles port crates/horizon-client/src/game.rs::Game::hud_layers draws the current screen's layer and tooltips; unsure about subtitles
123 Screen.setInitialFocus skip:ui keyboard focus starts on the first widget; Horizon draws its own focus
124 Screen.isInputCaptured port crates/horizon-client/src/title.rs::Title::has_caret_field gap: minor: only the title screen's text fields
125 Screen.addWidget skip:ui widget list plumbing; Horizon draws each screen from its own state
126 Screen.removeWidget skip:ui widget list plumbing; Horizon draws each screen from its own state
127 Screen.getTooltipFromItem port crates/horizon-client/src/item_tooltip.rs::lines tooltip lines for an item
128 Screen.defaultHandleGameClickEvent port crates/horizon-client/src/game/books.rs::Game::book_follow_link gap: minor: ShowDialog and custom click events are not handled here
129 Screen.fadeWidgets missing minor: unsure: no fade of widgets found in title.rs
130 Screen.extractPanorama port crates/horizon-client/src/gfx/panorama.rs::Panorama::draw the title panorama cube, drawn in the render pass
131 Screen.extractMenuBackground port crates/horizon-client/src/ui.rs::menu_background the dirt background with blur
132 Screen.extractMenuBackgroundTexture port crates/horizon-client/src/ui.rs::menu_background gap: minor: only the standard background texture
133 Screen.isValidCharacterForName missing minor: only the structure block name field uses it, and Horizon has no structure block editor
134 Screen.scheduleNarration skip:other narration timing; Horizon has no narrator
135 Screen.shouldRunNarration skip:other narration gate; Horizon has no narrator
136 Screen.handleDelayedNarration skip:other narration timing; Horizon has no narrator
137 Screen.runNarration skip:other narration output; Horizon has no narrator
138 Screen.updateNarratedWidget skip:other narration of widgets; Horizon has no narrator
139 Screen.findNarratableWidget skip:other narration focus search; Horizon has no narrator
140 Screen.updateNarratorStatus skip:other narrator option toggle only; Horizon has no narrator output
141 TitleScreen.tick skip:service Realms notifications and the friend request count (social)
142 TitleScreen.init port crates/horizon-client/src/title.rs::Title::buttons main menu buttons; the splash text is chosen at load (choose_splash)
143 TitleScreen.getHorizontalPosition skip:ui layout of the icon row only
144 TitleScreen.createNormalMenuOptions port crates/horizon-client/src/title.rs::Title::buttons gap: player: Minecraft Realms button is greyed out (service)
145 TitleScreen.getMultiplayerDisabledReason missing minor: unsure: no ban check; Multiplayer is always enabled in title.rs
146 TitleScreen.createDemoMenuOptions skip:other demo build only (isDemo); Horizon has no demo mode
147 TitleScreen.checkDemoWorldPresence skip:other demo world only
148 TitleScreen.extractRenderState port crates/horizon-client/src/title.rs::Title::draw version line and buttons
149 TitleScreen.mouseClicked port crates/horizon-client/src/title.rs::Title::click gap: minor: no Realms notification popup to click
150 TitleScreen.confirmDemo skip:other demo world reset only
+149
View File
@@ -0,0 +1,149 @@
WinScreen.wrapCreditsIO port crates/horizon-client/src/win_screen.rs::WinScreen::new reads the credits texts from the resource root; a failed read is logged and skipped
WinScreen.extractRenderState port crates/horizon-client/src/win_screen.rs::WinScreen::draw logo, lines scrolled up, last line stops mid-screen; background and vignette are drawn here too
WinScreen.extractVignette inline crates/horizon-client/src/win_screen.rs::WinScreen::draw credits_vignette sprite stretched over the screen
WinScreen.extractMenuBackground port crates/horizon-client/src/win_screen.rs::WinScreen::menu_background menu background tiled and scrolled at half the text speed
WorldOptionsScreen.init port crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options reads difficulty, lock, LAN port and command/force settings when opened; layout is WorldOptions::buttons
WorldOptionsScreen.createGameRulesButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click GameRules arm opens the rules view; enabled state is in WorldOptions::active
WorldOptionsScreen.createGameModeButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Default and Personal mode arms cycle the mode; enabled state is in WorldOptions::active
WorldOptionsScreen.createAllowCommandsButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Cheats arm toggles commands; the hardcore lock is in WorldOptions::active
WorldOptionsScreen.createRestrictionsButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Restrictions arm opens the restrictions view
WorldOptionsScreen.multiplayerOptions inline crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options LAN, port, guest command and force values are read at open; rows from WorldOptions::buttons; the LAN toggle is in world_options_click
WorldOptionsScreen.updateGuestCommandAccessButton port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::active command access is enabled only with LAN and commands; the shown value is derived in WorldOptions::label
WorldOptionsScreen.updateForceGameModeButton port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::active enabled only with LAN, no guest commands and not hardcore; gap: minor: vanilla forces the saved flag on when LAN is off or hardcore, Horizon keeps the stored flag and only shows it on
WorldOptionsScreen.hasChanges port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::changed Apply is enabled when a setting differs and the port is valid
WorldOptionsScreen.applyChanges port crates/horizon-client/src/game/lan_screen.rs::Game::apply_world_options sends difficulty and lock changes, applies modes, commands, guest and force settings, then opens or closes LAN
WorldOptionsScreen.repositionElements skip:ui layout only: scroll area and footer placement
WorldOptionsScreen.extractMenuBackground port crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view in-world background and the list background under the content
WorldOptionsScreen.extractRenderState port crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view header and footer separators and the widgets
WorldOptionsScreen.onGamemasterPermissionChanged port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_permission losing permission on a server closes the screen; gap: minor: the default and personal modes are not reset as updatePermissionDependentButtons does
WorldOptionsScreen.updatePermissionDependentButtons inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click the Cheats arm resets default and personal mode to the saved default when commands turn off; gap: minor: the remote permission path does not do this
WorldOptionsScreen.updatePersonalGameModeButton missing minor: a personal mode changed while the options are open is not shown; Horizon reads the modes once when the screen opens
WorldOptionsScreen.onDefaultGameModeChanged missing minor: a default mode changed while the options are open is not shown; Horizon reads the modes once when the screen opens
WorldOptionsScreen.hasSettingsChanges inline crates/horizon-client/src/game/lan_screen.rs::WorldOptions::changed compares every setting against the values read at open
WorldOptionsScreen.lanPortChanged inline crates/horizon-client/src/game/lan_screen.rs::WorldOptions::snapshot the port is part of the snapshot only while LAN is on
WorldOptionsScreen.changeMultiplayerScope inline crates/horizon-client/src/game/lan_screen.rs::Game::apply_world_options closes LAN and reopens it on the new port when the scope or port changed
WorldOptionsScreen.sendPublishMessage inline crates/horizon-client/src/game/lan_screen.rs::Game::apply_world_options publish started, failed or stopped line in chat via system_message
WorldOptionsScreen.updatePortControlsState inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Lan arm drops port focus; gap: minor: vanilla clears the port text when LAN is switched off and refills it from the saved port when on, Horizon keeps the typed text
WorldOptionsScreen.tryParsePort port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::parsed_port blank uses the suggested port; 1024 to 65535 accepted; gap: minor: no port-in-use check and no error message, only the red colour from draw_options_view
WorldOptionsScreen.setPortError inline crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view port text turns red when invalid; gap: minor: no error tooltip
WorldOptionsScreen.DifficultyButtons.create inline crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options difficulty read at open; the cycle and lock arms are in world_options_click
WorldOptionsScreen.DifficultyButtons.refresh port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::server_difficulty a server's difficulty and lock update the screen; gap: minor: it also resets the baseline, so Apply no longer sees the change
WorldOptionsScreen.DifficultyButtons.isDifficultyLocked inline crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options locked when the level is locked or hardcore; the lock button's enabled state is in WorldOptions::active
StatsScreen.onStatsUpdated inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats the lists are rebuilt from the stored values on every draw; the AwardStats arm in remote.rs only stores them
StatsScreen.setTabActiveStateAndTooltip missing player: an empty Items or Mobs tab stays selectable with no 'No statistics found' tooltip
StatsScreen.repositionElements skip:ui layout only: tab bar placement and header height
StatsScreen.keyPressed missing minor: no keyboard tab switching on the statistics screen; Escape still closes it
StatsScreen.extractRenderState inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats footer separator is drawn with the tab bar in draw_stats
StatsScreen.extractMenuBackground inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats background drawn at the start of draw_stats
StatsScreen.GeneralStatisticsList.Entry.getValueText port crates/horizon-client/src/game/stats_screen.rs::format value text by the stat's format (time, distance, tenths, plain)
StatsScreen.GeneralStatisticsList.Entry.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats General rows: name left, value right
StatsScreen.GeneralStatisticsList.Entry.getNarration skip:other narration text for screen readers; Horizon has no narrator output
StatsScreen.ItemStatisticsList.<init> port crates/horizon-client/src/game/stats_screen.rs::Game::stat_items items with a non-zero count in any column, block items included
StatsScreen.ItemStatisticsList.getColumn inline crates/horizon-client/src/game/stats_screen.rs::Game::stat_items the column index selects COLUMNS directly
StatsScreen.ItemStatisticsList.getColumnIndex inline crates/horizon-client/src/game/stats_screen.rs::Game::stats_click the sort state keeps the column index, so no reverse lookup is needed
StatsScreen.ItemStatisticsList.sortByColumn inline crates/horizon-client/src/game/stats_screen.rs::Game::stats_click header click cycles descending, ascending, then off
StatsScreen.ItemStatisticsList.sortItems inline crates/horizon-client/src/game/stats_screen.rs::Game::stat_items sorts by the chosen column; gap: minor: equal counts keep insertion order instead of item id order
StatsScreen.ItemStatisticsList.getItemRows skip:java copies the item rows out of the list widget
StatsScreen.ItemStatisticsList.HeaderEntry.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats column header row with the sort arrow on the sorted column
StatsScreen.ItemStatisticsList.HeaderEntry.StatSortButton.extractContents inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats slot background and column icon per header cell
StatsScreen.ItemStatisticsList.ItemRow.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats item slot and the block and item stat cells per row
StatsScreen.ItemStatisticsList.ItemRow.extractStat inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats cell value right-aligned in its column
StatsScreen.ItemStatisticsList.ItemRow.ItemRowWidget.extractWidgetRenderState inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats slot background and item icon
StatsScreen.ItemStatisticsList.ItemRow.ItemRowWidget.extractTooltip missing player: hovering an item in the Items tab shows no item tooltip
StatsScreen.ItemStatisticsList.ItemRowComparator.compare inline crates/horizon-client/src/game/stats_screen.rs::Game::stat_items orders by the sorted column; gap: minor: non-block items count as 0 in block columns (vanilla -1), and ties are not broken by item id
StatsScreen.MobsStatisticsList.MobRow.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats mob name, kills and killed-by lines
StatsScreen.MobsStatisticsList.MobRow.getNarration skip:other narration text for screen readers; Horizon has no narrator output
StatsScreen.StatisticsTab.doLayout skip:ui layout only: list size and position
AdvancementTab.copyPosition inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_cache a rebuilt tree keeps adv_ui.scroll; tab bounds are recomputed in adv_view
AdvancementTab.extractTab port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements tab sprite per position (first, middle, last) and selected state
AdvancementTab.extractIcon port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements tab icon at its side offset
AdvancementTab.extractContents port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements background grid, connection lines and advancement widgets inside the 234 by 113 area
AdvancementTab.extractTooltips port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_draw_hover hovered advancement card; gap: minor: the fade fill is drawn in draw_advancements
AdvancementTab.scroll port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_scroll_by clamps the scroll to the tab bounds on each axis
AdvancementTab.canScrollHorizontally inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_scroll_by scrolls only when the bounds are wider than 234
AdvancementTab.canScrollVertically inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_scroll_by scrolls only when the bounds are taller than 113
AdvancementTab.addAdvancement inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view tasks of each tab are placed in the view's widget list
AdvancementTab.addWidget inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view tab bounds grown by each widget (28 by 27)
AdvancementTabType.extractRenderState port crates/horizon-client/src/game/advancements_screen.rs::tab_sprite first, middle or last sprite, selected variant
AdvancementTabType.extractIcon port crates/horizon-client/src/game/advancements_screen.rs::icon_offset icon offset per side
AdvancementTabType.getX port crates/horizon-client/src/game/advancements_screen.rs::tab_pos x per side and index
AdvancementTabType.getY port crates/horizon-client/src/game/advancements_screen.rs::tab_pos y per side and index
AdvancementTabType.isMouseOver inline crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_mouse tab hit test with strict edges on click
AdvancementWidget.<init> port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text title split at 163 px, description wrapped, widget width
AdvancementWidget.createWidget inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view only advancements with a display get a widget
AdvancementWidget.getMaxProgressWidth inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text width of the progress text when there is more than one requirement
AdvancementWidget.getMaxWidth inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text widest line of the wrapped description
AdvancementWidget.findOptimalLines inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text offsets 0, 10, -10, 25, -25 and the 10 px tolerance
AdvancementWidget.findFirstVisibleParent inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view nearest displayed ancestor becomes the parent
AdvancementWidget.extractConnectivity port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements connection lines, background pass then the line pass
AdvancementWidget.extractRenderState port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements frame sprite (obtained or not) and the item icon
AdvancementWidget.extractMultilineText inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_draw_hover description lines in the hover card
AdvancementWidget.isMouseOver port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_tick_hover 26 px box hit test; hidden advancements count only when done
AdvancementWidget.attachToParent inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view parent link set when the view is built
AdvancementsScreen.init port crates/horizon-client/src/game/advancements_screen.rs::Game::open_advancements opens on the kept tab; gap: minor: no tab pages with < and > buttons, the view shows at most 26 tabs
AdvancementsScreen.repositionElements skip:ui layout only: window position
AdvancementsScreen.removed missing minor: the server is not sent the closed-screen packet when the advancements screen closes
AdvancementsScreen.tick port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_tick_hover hover tracking and card fade; gap: minor: runs from the frame, not the 20 Hz tick
AdvancementsScreen.mouseClicked port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_mouse left click selects a tab, Done closes; gap: minor: tab pages are not filtered
AdvancementsScreen.keyPressed port crates/horizon-client/src/game.rs::Game::key_pressed the advancements key (L) closes the screen
AdvancementsScreen.extractRenderState port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements window, tabs and contents; gap: minor: no 'page / pages' text
AdvancementsScreen.mouseDragged port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_drag first movement starts scrolling, later ones move the tree
AdvancementsScreen.mouseScrolled port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_scroll wheel scrolls 16 px per step
AdvancementsScreen.extractInside port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements 'no advancements' placeholder when there is no tab
AdvancementsScreen.extractWindow port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements window background, tab bar and the selected tab title (window() gives the position)
AdvancementsScreen.extractTooltips port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements tab title tooltips; the card tooltip comes from adv_draw_hover
AdvancementsScreen.onAdvancementsUpdated port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_cache a changed tree rebuilds the positions; tabs and progress are read in adv_view and at draw time
AdvancementsScreen.getAdvancementWidget skip:java lookup of a widget by node; Horizon indexes positions by tree index
DebugOptionsScreen.init missing minor: no F3+F6 debug entry editor; the F3 overlay footer still says 'To edit: press [F3+F6]' (debug_overlay.rs)
DebugOptionsScreen.addProfileButton missing minor: no debug profile buttons (default and performance)
DebugOptionsScreen.repositionElements missing minor: layout of the missing debug entry editor
DebugOptionsScreen.CategoryEntry.extractContent missing minor: category headings of the missing debug entry editor
DebugOptionsScreen.OptionEntry.<init> missing minor: per-entry always, overlay and never buttons of the missing editor
DebugOptionsScreen.OptionEntry.narrateButton skip:other narration text for screen readers
DebugOptionsScreen.OptionEntry.setValue missing minor: sets an entry's status in the missing editor
DebugOptionsScreen.OptionEntry.extractContent missing minor: draws the entry row of the missing editor
DebugOptionsScreen.OptionEntry.refreshEntry missing minor: refreshes the buttons of the missing editor
DebugOptionsScreen.OptionList.updateSearch missing minor: search filter of the missing debug entry editor
GameModeSwitcherScreen.getDefaultSelected port crates/horizon-client/src/game_mode_switcher.rs::GameModeSwitcher::new previous mode, else the opposite of the current one
GameModeSwitcherScreen.init port crates/horizon-client/src/game/gamemode_switcher.rs::Game::open_gamemode_switcher opens with the selection state; slot positions are computed in draw
GameModeSwitcherScreen.extractRenderState port crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher title, help line, slots, selection and hover
GameModeSwitcherScreen.extractBackground port crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher background sprite centred above the slots
GameModeSwitcherScreen.switchToHoveredGameMode port crates/horizon-client/src/game/gamemode_switcher.rs::Game::close_gamemode_switcher applies the selected mode on close when gamemaster and it differs
GameModeSwitcherScreen.keyPressed port crates/horizon-client/src/game/debug_keys.rs::Game::debug_key the switch key cycles the selection
GameModeSwitcherScreen.keyReleased port crates/horizon-client/src/game/debug_keys.rs::Game::debug_key releasing the debug modifier applies and closes
GameModeSwitcherScreen.mouseReleased missing minor: a debug modifier bound to a mouse button does not close the switcher; debug keys are keyboard only
GameModeSwitcherScreen.GameModeIcon.getNext port crates/horizon-client/src/game_mode_switcher.rs::GameModeSwitcher::cycle creative, survival, adventure, spectator, then creative
GameModeSwitcherScreen.GameModeIcon.getFromGameType inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::close_gamemode_switcher compares the chosen mode with the current one before sending
GameModeSwitcherScreen.GameModeSlot.extractWidgetRenderState inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher slot, selection frame and icon per mode
GameModeSwitcherScreen.GameModeSlot.extractSlot inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher slot sprite
GameModeSwitcherScreen.GameModeSlot.extractSelection inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher selection sprite
ButtonListDialogScreen.populateBodyElements port crates/horizon-client/src/dialog_screen.rs::columns action buttons packed into the dialog's columns
ButtonListDialogScreen.updateHeaderAndFooter port crates/horizon-client/src/dialog_screen.rs::Layout::new exit button in the footer, else a 5 pixel footer
DialogControlSet.addInput port crates/horizon-client/src/dialog_screen.rs::input gap: player: single-option and number-range inputs get no control, so their value cannot be changed
DialogControlSet.createDialogButton port crates/horizon-client/src/dialog_screen.rs::Layout::new button width from the dialog; gap: minor: no button tooltips
DialogControlSet.bindAction port crates/horizon-client/src/dialog.rs::Action::click reads the inputs' current values into the action when clicked
DialogControlSet.createActionButton port crates/horizon-client/src/game/dialogs.rs::Game::dialog_click button press runs the action through run_dialog_action
DialogListDialogScreen.createDialogClickAction missing player: a dialog list shows no entry buttons; only its exit button is drawn
DialogScreen.repositionElements skip:ui layout only: body scroll height and warning clamp, both in Layout::new
DialogScreen.createTitleWithWarningButton skip:ui layout only: title row, warning button 10 px right of the title in Layout::new
DialogScreen.makeSureWarningButtonIsInBounds port crates/horizon-client/src/dialog_screen.rs::Layout::in_bounds moves the warning button on screen when it is off
DialogScreen.createWarningButton port crates/horizon-client/src/game/dialogs.rs::Game::dialog_click warning rect opens the warning; gap: minor: no hover tooltip
DialogScreen.handleDialogClickEvent port crates/horizon-client/src/game/dialogs.rs::Game::run_dialog_action gap: player: open-URL, suggest-command and change-page buttons only log and do nothing
DialogScreens.createFromData port crates/horizon-client/src/game/dialogs.rs::Game::show_dialog picks the screen from the dialog's kind
DialogScreens.bootstrap skip:data registers screen factories by codec
ServerLinksDialogScreen.createListActions port crates/horizon-client/src/game/server_links.rs::Game::server_links the server's links
ServerLinksDialogScreen.createDialogClickAction port crates/horizon-client/src/game/server_links.rs::Game::click_link opens the link (prompt or browser by setting)
SimpleDialogScreen.updateHeaderAndFooter port crates/horizon-client/src/dialog_screen.rs::Layout::new main action buttons side by side in the footer, 8 px apart
WaitingForResponseScreen.init port crates/horizon-client/src/dialog_screen.rs::waiting_button Back button starts hidden and inactive
WaitingForResponseScreen.tick port crates/horizon-client/src/dialog_screen.rs::waiting_button Back shows after a second with a countdown label, works after five seconds
DialogBodyHandlers.createBodyElement port crates/horizon-client/src/dialog_screen.rs::Layout::new gap: player: item bodies are dropped (Body::Item gives no element)
DialogBodyHandlers.bootstrap skip:data registers body handlers
DialogBodyHandlers.runActionOnParent missing player: clicking text in a dialog message or item description does nothing; dialog_click only tests fields, checkboxes and buttons
DialogBodyHandlers.ItemHandler.createControls missing player: an item body (icon and description) is not drawn in a dialog
DialogBodyHandlers.PlainMessageHandler.createControls port crates/horizon-client/src/dialog_screen.rs::message centred wrapped text; gap: player: text clicks do nothing
InputControlHandlers.createHandler port crates/horizon-client/src/dialog_screen.rs::input dispatch by control type; unknown types are dropped
InputControlHandlers.bootstrap skip:data registers input handlers
InputControlHandlers.BooleanHandler.addControl port crates/horizon-client/src/dialog_screen.rs::input checkbox with its label; toggled in dialog_click
InputControlHandlers.NumberRangeHandler.addControl missing player: a number-range input (slider) in a dialog has no control
InputControlHandlers.SingleOptionHandler.addControl missing player: a single-option input in a dialog has no control
InputControlHandlers.TextInputHandler.addControl port crates/horizon-client/src/dialog_screen.rs::input gap: player: multiline inputs are drawn as one 20 px line and the line limit is not used
1 WinScreen.wrapCreditsIO port crates/horizon-client/src/win_screen.rs::WinScreen::new reads the credits texts from the resource root; a failed read is logged and skipped
2 WinScreen.extractRenderState port crates/horizon-client/src/win_screen.rs::WinScreen::draw logo, lines scrolled up, last line stops mid-screen; background and vignette are drawn here too
3 WinScreen.extractVignette inline crates/horizon-client/src/win_screen.rs::WinScreen::draw credits_vignette sprite stretched over the screen
4 WinScreen.extractMenuBackground port crates/horizon-client/src/win_screen.rs::WinScreen::menu_background menu background tiled and scrolled at half the text speed
5 WorldOptionsScreen.init port crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options reads difficulty, lock, LAN port and command/force settings when opened; layout is WorldOptions::buttons
6 WorldOptionsScreen.createGameRulesButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click GameRules arm opens the rules view; enabled state is in WorldOptions::active
7 WorldOptionsScreen.createGameModeButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Default and Personal mode arms cycle the mode; enabled state is in WorldOptions::active
8 WorldOptionsScreen.createAllowCommandsButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Cheats arm toggles commands; the hardcore lock is in WorldOptions::active
9 WorldOptionsScreen.createRestrictionsButton inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Restrictions arm opens the restrictions view
10 WorldOptionsScreen.multiplayerOptions inline crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options LAN, port, guest command and force values are read at open; rows from WorldOptions::buttons; the LAN toggle is in world_options_click
11 WorldOptionsScreen.updateGuestCommandAccessButton port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::active command access is enabled only with LAN and commands; the shown value is derived in WorldOptions::label
12 WorldOptionsScreen.updateForceGameModeButton port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::active enabled only with LAN, no guest commands and not hardcore; gap: minor: vanilla forces the saved flag on when LAN is off or hardcore, Horizon keeps the stored flag and only shows it on
13 WorldOptionsScreen.hasChanges port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::changed Apply is enabled when a setting differs and the port is valid
14 WorldOptionsScreen.applyChanges port crates/horizon-client/src/game/lan_screen.rs::Game::apply_world_options sends difficulty and lock changes, applies modes, commands, guest and force settings, then opens or closes LAN
15 WorldOptionsScreen.repositionElements skip:ui layout only: scroll area and footer placement
16 WorldOptionsScreen.extractMenuBackground port crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view in-world background and the list background under the content
17 WorldOptionsScreen.extractRenderState port crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view header and footer separators and the widgets
18 WorldOptionsScreen.onGamemasterPermissionChanged port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_permission losing permission on a server closes the screen; gap: minor: the default and personal modes are not reset as updatePermissionDependentButtons does
19 WorldOptionsScreen.updatePermissionDependentButtons inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click the Cheats arm resets default and personal mode to the saved default when commands turn off; gap: minor: the remote permission path does not do this
20 WorldOptionsScreen.updatePersonalGameModeButton missing minor: a personal mode changed while the options are open is not shown; Horizon reads the modes once when the screen opens
21 WorldOptionsScreen.onDefaultGameModeChanged missing minor: a default mode changed while the options are open is not shown; Horizon reads the modes once when the screen opens
22 WorldOptionsScreen.hasSettingsChanges inline crates/horizon-client/src/game/lan_screen.rs::WorldOptions::changed compares every setting against the values read at open
23 WorldOptionsScreen.lanPortChanged inline crates/horizon-client/src/game/lan_screen.rs::WorldOptions::snapshot the port is part of the snapshot only while LAN is on
24 WorldOptionsScreen.changeMultiplayerScope inline crates/horizon-client/src/game/lan_screen.rs::Game::apply_world_options closes LAN and reopens it on the new port when the scope or port changed
25 WorldOptionsScreen.sendPublishMessage inline crates/horizon-client/src/game/lan_screen.rs::Game::apply_world_options publish started, failed or stopped line in chat via system_message
26 WorldOptionsScreen.updatePortControlsState inline crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click Lan arm drops port focus; gap: minor: vanilla clears the port text when LAN is switched off and refills it from the saved port when on, Horizon keeps the typed text
27 WorldOptionsScreen.tryParsePort port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::parsed_port blank uses the suggested port; 1024 to 65535 accepted; gap: minor: no port-in-use check and no error message, only the red colour from draw_options_view
28 WorldOptionsScreen.setPortError inline crates/horizon-client/src/game/lan_screen.rs::Game::draw_options_view port text turns red when invalid; gap: minor: no error tooltip
29 WorldOptionsScreen.DifficultyButtons.create inline crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options difficulty read at open; the cycle and lock arms are in world_options_click
30 WorldOptionsScreen.DifficultyButtons.refresh port crates/horizon-client/src/game/lan_screen.rs::WorldOptions::server_difficulty a server's difficulty and lock update the screen; gap: minor: it also resets the baseline, so Apply no longer sees the change
31 WorldOptionsScreen.DifficultyButtons.isDifficultyLocked inline crates/horizon-client/src/game/lan_screen.rs::Game::open_world_options locked when the level is locked or hardcore; the lock button's enabled state is in WorldOptions::active
32 StatsScreen.onStatsUpdated inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats the lists are rebuilt from the stored values on every draw; the AwardStats arm in remote.rs only stores them
33 StatsScreen.setTabActiveStateAndTooltip missing player: an empty Items or Mobs tab stays selectable with no 'No statistics found' tooltip
34 StatsScreen.repositionElements skip:ui layout only: tab bar placement and header height
35 StatsScreen.keyPressed missing minor: no keyboard tab switching on the statistics screen; Escape still closes it
36 StatsScreen.extractRenderState inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats footer separator is drawn with the tab bar in draw_stats
37 StatsScreen.extractMenuBackground inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats background drawn at the start of draw_stats
38 StatsScreen.GeneralStatisticsList.Entry.getValueText port crates/horizon-client/src/game/stats_screen.rs::format value text by the stat's format (time, distance, tenths, plain)
39 StatsScreen.GeneralStatisticsList.Entry.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats General rows: name left, value right
40 StatsScreen.GeneralStatisticsList.Entry.getNarration skip:other narration text for screen readers; Horizon has no narrator output
41 StatsScreen.ItemStatisticsList.<init> port crates/horizon-client/src/game/stats_screen.rs::Game::stat_items items with a non-zero count in any column, block items included
42 StatsScreen.ItemStatisticsList.getColumn inline crates/horizon-client/src/game/stats_screen.rs::Game::stat_items the column index selects COLUMNS directly
43 StatsScreen.ItemStatisticsList.getColumnIndex inline crates/horizon-client/src/game/stats_screen.rs::Game::stats_click the sort state keeps the column index, so no reverse lookup is needed
44 StatsScreen.ItemStatisticsList.sortByColumn inline crates/horizon-client/src/game/stats_screen.rs::Game::stats_click header click cycles descending, ascending, then off
45 StatsScreen.ItemStatisticsList.sortItems inline crates/horizon-client/src/game/stats_screen.rs::Game::stat_items sorts by the chosen column; gap: minor: equal counts keep insertion order instead of item id order
46 StatsScreen.ItemStatisticsList.getItemRows skip:java copies the item rows out of the list widget
47 StatsScreen.ItemStatisticsList.HeaderEntry.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats column header row with the sort arrow on the sorted column
48 StatsScreen.ItemStatisticsList.HeaderEntry.StatSortButton.extractContents inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats slot background and column icon per header cell
49 StatsScreen.ItemStatisticsList.ItemRow.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats item slot and the block and item stat cells per row
50 StatsScreen.ItemStatisticsList.ItemRow.extractStat inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats cell value right-aligned in its column
51 StatsScreen.ItemStatisticsList.ItemRow.ItemRowWidget.extractWidgetRenderState inline crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats slot background and item icon
52 StatsScreen.ItemStatisticsList.ItemRow.ItemRowWidget.extractTooltip missing player: hovering an item in the Items tab shows no item tooltip
53 StatsScreen.ItemStatisticsList.ItemRowComparator.compare inline crates/horizon-client/src/game/stats_screen.rs::Game::stat_items orders by the sorted column; gap: minor: non-block items count as 0 in block columns (vanilla -1), and ties are not broken by item id
54 StatsScreen.MobsStatisticsList.MobRow.extractContent port crates/horizon-client/src/game/stats_screen.rs::Game::draw_stats mob name, kills and killed-by lines
55 StatsScreen.MobsStatisticsList.MobRow.getNarration skip:other narration text for screen readers; Horizon has no narrator output
56 StatsScreen.StatisticsTab.doLayout skip:ui layout only: list size and position
57 AdvancementTab.copyPosition inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_cache a rebuilt tree keeps adv_ui.scroll; tab bounds are recomputed in adv_view
58 AdvancementTab.extractTab port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements tab sprite per position (first, middle, last) and selected state
59 AdvancementTab.extractIcon port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements tab icon at its side offset
60 AdvancementTab.extractContents port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements background grid, connection lines and advancement widgets inside the 234 by 113 area
61 AdvancementTab.extractTooltips port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_draw_hover hovered advancement card; gap: minor: the fade fill is drawn in draw_advancements
62 AdvancementTab.scroll port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_scroll_by clamps the scroll to the tab bounds on each axis
63 AdvancementTab.canScrollHorizontally inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_scroll_by scrolls only when the bounds are wider than 234
64 AdvancementTab.canScrollVertically inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_scroll_by scrolls only when the bounds are taller than 113
65 AdvancementTab.addAdvancement inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view tasks of each tab are placed in the view's widget list
66 AdvancementTab.addWidget inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view tab bounds grown by each widget (28 by 27)
67 AdvancementTabType.extractRenderState port crates/horizon-client/src/game/advancements_screen.rs::tab_sprite first, middle or last sprite, selected variant
68 AdvancementTabType.extractIcon port crates/horizon-client/src/game/advancements_screen.rs::icon_offset icon offset per side
69 AdvancementTabType.getX port crates/horizon-client/src/game/advancements_screen.rs::tab_pos x per side and index
70 AdvancementTabType.getY port crates/horizon-client/src/game/advancements_screen.rs::tab_pos y per side and index
71 AdvancementTabType.isMouseOver inline crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_mouse tab hit test with strict edges on click
72 AdvancementWidget.<init> port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text title split at 163 px, description wrapped, widget width
73 AdvancementWidget.createWidget inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view only advancements with a display get a widget
74 AdvancementWidget.getMaxProgressWidth inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text width of the progress text when there is more than one requirement
75 AdvancementWidget.getMaxWidth inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text widest line of the wrapped description
76 AdvancementWidget.findOptimalLines inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_widget_text offsets 0, 10, -10, 25, -25 and the 10 px tolerance
77 AdvancementWidget.findFirstVisibleParent inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view nearest displayed ancestor becomes the parent
78 AdvancementWidget.extractConnectivity port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements connection lines, background pass then the line pass
79 AdvancementWidget.extractRenderState port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements frame sprite (obtained or not) and the item icon
80 AdvancementWidget.extractMultilineText inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_draw_hover description lines in the hover card
81 AdvancementWidget.isMouseOver port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_tick_hover 26 px box hit test; hidden advancements count only when done
82 AdvancementWidget.attachToParent inline crates/horizon-client/src/game/advancements_screen.rs::Game::adv_view parent link set when the view is built
83 AdvancementsScreen.init port crates/horizon-client/src/game/advancements_screen.rs::Game::open_advancements opens on the kept tab; gap: minor: no tab pages with < and > buttons, the view shows at most 26 tabs
84 AdvancementsScreen.repositionElements skip:ui layout only: window position
85 AdvancementsScreen.removed missing minor: the server is not sent the closed-screen packet when the advancements screen closes
86 AdvancementsScreen.tick port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_tick_hover hover tracking and card fade; gap: minor: runs from the frame, not the 20 Hz tick
87 AdvancementsScreen.mouseClicked port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_mouse left click selects a tab, Done closes; gap: minor: tab pages are not filtered
88 AdvancementsScreen.keyPressed port crates/horizon-client/src/game.rs::Game::key_pressed the advancements key (L) closes the screen
89 AdvancementsScreen.extractRenderState port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements window, tabs and contents; gap: minor: no 'page / pages' text
90 AdvancementsScreen.mouseDragged port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_drag first movement starts scrolling, later ones move the tree
91 AdvancementsScreen.mouseScrolled port crates/horizon-client/src/game/advancements_screen.rs::Game::advancements_scroll wheel scrolls 16 px per step
92 AdvancementsScreen.extractInside port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements 'no advancements' placeholder when there is no tab
93 AdvancementsScreen.extractWindow port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements window background, tab bar and the selected tab title (window() gives the position)
94 AdvancementsScreen.extractTooltips port crates/horizon-client/src/game/advancements_screen.rs::Game::draw_advancements tab title tooltips; the card tooltip comes from adv_draw_hover
95 AdvancementsScreen.onAdvancementsUpdated port crates/horizon-client/src/game/advancements_screen.rs::Game::adv_cache a changed tree rebuilds the positions; tabs and progress are read in adv_view and at draw time
96 AdvancementsScreen.getAdvancementWidget skip:java lookup of a widget by node; Horizon indexes positions by tree index
97 DebugOptionsScreen.init missing minor: no F3+F6 debug entry editor; the F3 overlay footer still says 'To edit: press [F3+F6]' (debug_overlay.rs)
98 DebugOptionsScreen.addProfileButton missing minor: no debug profile buttons (default and performance)
99 DebugOptionsScreen.repositionElements missing minor: layout of the missing debug entry editor
100 DebugOptionsScreen.CategoryEntry.extractContent missing minor: category headings of the missing debug entry editor
101 DebugOptionsScreen.OptionEntry.<init> missing minor: per-entry always, overlay and never buttons of the missing editor
102 DebugOptionsScreen.OptionEntry.narrateButton skip:other narration text for screen readers
103 DebugOptionsScreen.OptionEntry.setValue missing minor: sets an entry's status in the missing editor
104 DebugOptionsScreen.OptionEntry.extractContent missing minor: draws the entry row of the missing editor
105 DebugOptionsScreen.OptionEntry.refreshEntry missing minor: refreshes the buttons of the missing editor
106 DebugOptionsScreen.OptionList.updateSearch missing minor: search filter of the missing debug entry editor
107 GameModeSwitcherScreen.getDefaultSelected port crates/horizon-client/src/game_mode_switcher.rs::GameModeSwitcher::new previous mode, else the opposite of the current one
108 GameModeSwitcherScreen.init port crates/horizon-client/src/game/gamemode_switcher.rs::Game::open_gamemode_switcher opens with the selection state; slot positions are computed in draw
109 GameModeSwitcherScreen.extractRenderState port crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher title, help line, slots, selection and hover
110 GameModeSwitcherScreen.extractBackground port crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher background sprite centred above the slots
111 GameModeSwitcherScreen.switchToHoveredGameMode port crates/horizon-client/src/game/gamemode_switcher.rs::Game::close_gamemode_switcher applies the selected mode on close when gamemaster and it differs
112 GameModeSwitcherScreen.keyPressed port crates/horizon-client/src/game/debug_keys.rs::Game::debug_key the switch key cycles the selection
113 GameModeSwitcherScreen.keyReleased port crates/horizon-client/src/game/debug_keys.rs::Game::debug_key releasing the debug modifier applies and closes
114 GameModeSwitcherScreen.mouseReleased missing minor: a debug modifier bound to a mouse button does not close the switcher; debug keys are keyboard only
115 GameModeSwitcherScreen.GameModeIcon.getNext port crates/horizon-client/src/game_mode_switcher.rs::GameModeSwitcher::cycle creative, survival, adventure, spectator, then creative
116 GameModeSwitcherScreen.GameModeIcon.getFromGameType inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::close_gamemode_switcher compares the chosen mode with the current one before sending
117 GameModeSwitcherScreen.GameModeSlot.extractWidgetRenderState inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher slot, selection frame and icon per mode
118 GameModeSwitcherScreen.GameModeSlot.extractSlot inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher slot sprite
119 GameModeSwitcherScreen.GameModeSlot.extractSelection inline crates/horizon-client/src/game/gamemode_switcher.rs::Game::draw_gamemode_switcher selection sprite
120 ButtonListDialogScreen.populateBodyElements port crates/horizon-client/src/dialog_screen.rs::columns action buttons packed into the dialog's columns
121 ButtonListDialogScreen.updateHeaderAndFooter port crates/horizon-client/src/dialog_screen.rs::Layout::new exit button in the footer, else a 5 pixel footer
122 DialogControlSet.addInput port crates/horizon-client/src/dialog_screen.rs::input gap: player: single-option and number-range inputs get no control, so their value cannot be changed
123 DialogControlSet.createDialogButton port crates/horizon-client/src/dialog_screen.rs::Layout::new button width from the dialog; gap: minor: no button tooltips
124 DialogControlSet.bindAction port crates/horizon-client/src/dialog.rs::Action::click reads the inputs' current values into the action when clicked
125 DialogControlSet.createActionButton port crates/horizon-client/src/game/dialogs.rs::Game::dialog_click button press runs the action through run_dialog_action
126 DialogListDialogScreen.createDialogClickAction missing player: a dialog list shows no entry buttons; only its exit button is drawn
127 DialogScreen.repositionElements skip:ui layout only: body scroll height and warning clamp, both in Layout::new
128 DialogScreen.createTitleWithWarningButton skip:ui layout only: title row, warning button 10 px right of the title in Layout::new
129 DialogScreen.makeSureWarningButtonIsInBounds port crates/horizon-client/src/dialog_screen.rs::Layout::in_bounds moves the warning button on screen when it is off
130 DialogScreen.createWarningButton port crates/horizon-client/src/game/dialogs.rs::Game::dialog_click warning rect opens the warning; gap: minor: no hover tooltip
131 DialogScreen.handleDialogClickEvent port crates/horizon-client/src/game/dialogs.rs::Game::run_dialog_action gap: player: open-URL, suggest-command and change-page buttons only log and do nothing
132 DialogScreens.createFromData port crates/horizon-client/src/game/dialogs.rs::Game::show_dialog picks the screen from the dialog's kind
133 DialogScreens.bootstrap skip:data registers screen factories by codec
134 ServerLinksDialogScreen.createListActions port crates/horizon-client/src/game/server_links.rs::Game::server_links the server's links
135 ServerLinksDialogScreen.createDialogClickAction port crates/horizon-client/src/game/server_links.rs::Game::click_link opens the link (prompt or browser by setting)
136 SimpleDialogScreen.updateHeaderAndFooter port crates/horizon-client/src/dialog_screen.rs::Layout::new main action buttons side by side in the footer, 8 px apart
137 WaitingForResponseScreen.init port crates/horizon-client/src/dialog_screen.rs::waiting_button Back button starts hidden and inactive
138 WaitingForResponseScreen.tick port crates/horizon-client/src/dialog_screen.rs::waiting_button Back shows after a second with a countdown label, works after five seconds
139 DialogBodyHandlers.createBodyElement port crates/horizon-client/src/dialog_screen.rs::Layout::new gap: player: item bodies are dropped (Body::Item gives no element)
140 DialogBodyHandlers.bootstrap skip:data registers body handlers
141 DialogBodyHandlers.runActionOnParent missing player: clicking text in a dialog message or item description does nothing; dialog_click only tests fields, checkboxes and buttons
142 DialogBodyHandlers.ItemHandler.createControls missing player: an item body (icon and description) is not drawn in a dialog
143 DialogBodyHandlers.PlainMessageHandler.createControls port crates/horizon-client/src/dialog_screen.rs::message centred wrapped text; gap: player: text clicks do nothing
144 InputControlHandlers.createHandler port crates/horizon-client/src/dialog_screen.rs::input dispatch by control type; unknown types are dropped
145 InputControlHandlers.bootstrap skip:data registers input handlers
146 InputControlHandlers.BooleanHandler.addControl port crates/horizon-client/src/dialog_screen.rs::input checkbox with its label; toggled in dialog_click
147 InputControlHandlers.NumberRangeHandler.addControl missing player: a number-range input (slider) in a dialog has no control
148 InputControlHandlers.SingleOptionHandler.addControl missing player: a single-option input in a dialog has no control
149 InputControlHandlers.TextInputHandler.addControl port crates/horizon-client/src/dialog_screen.rs::input gap: player: multiline inputs are drawn as one 20 px line and the line limit is not used
+79
View File
@@ -0,0 +1,79 @@
AbstractFriendsEntryContainerWidget skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
AbstractFriendsTab skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
AddFriendWidget skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
FriendEntry skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
FriendsListConfirmScreen skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
FriendsOverlayScreen skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
FriendsOverlayTabButton skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
FriendsTab skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
IncomingEntry skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
OutgoingEntry skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
PendingTab skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
EffectsInInventory.extractRenderState port crates/horizon-client/src/game/potions.rs::Game::draw_inventory_effects panel layout and visibility beside the survival and creative inventories; drawn by inventory_effects::paint
EffectsInInventory.extractEffects port crates/horizon-client/src/inventory_effects.rs::paint one row per effect: icon, then text and background
EffectsInInventory.extractBackground port crates/horizon-client/src/inventory_effects.rs::background nine-slice panel background, ambient variant included
EffectsInInventory.extractText port crates/horizon-client/src/inventory_effects.rs::paint name and duration text, clipping with ..., hover tooltip for compact panels
EffectsInInventory.getEffectName inline crates/horizon-client/src/inventory_effects.rs::panels name plus level suffix for amplifier 1-9, folded into panels
EnchantmentNames.getRandomName inline crates/horizon-client/src/game/stations.rs::Game::draw_station galactic word names from the enchant seed (WORDS), drawn in the enchanting option slots
EnchantmentScreen.init skip:ui creates the book model for drawing only; the book itself is not drawn (see extractBook)
EnchantmentScreen.containerTick port crates/horizon-client/src/game/locator_bar.rs::Game::track_experience_display gap: player: keeps the experience bar up while the table is open; the book tick (tickBook) is not run
EnchantmentScreen.extractBook missing player: the enchanting table has no open 3D book; only the flat table is drawn, so the book never opens when an item is placed
EnchantmentScreen.tickBook missing player: the book's open and page-flip animation (driven by the offers) is not run; the table stays flat
GrindstoneScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station grindstone texture and the error sprite when an input is set and there is no result
HangingSignEditScreen.extractSignBackground port crates/horizon-client/src/game/sign_edit.rs::Game::draw_sign_editor hanging sign board at 4.5x scale
HopperScreen.extractBackground port crates/horizon-client/src/game/machines.rs::Game::draw_machine_screen hopper background for block and minecart hoppers
HorseInventoryScreen.shouldRenderSaddleSlot port crates/horizon-client/src/game/mount_menu.rs::shows_saddle saddle slot shown for every mount except llamas
HorseInventoryScreen.shouldRenderArmorSlot port crates/horizon-client/src/game/mount_menu.rs::shows_body armour slot for horse armour wearers and llamas
InventoryScreen.containerTick missing minor: a survival inventory that stays open when the game mode becomes creative is not switched to the creative screen
InventoryScreen.init inline crates/horizon-client/src/game.rs::Game::key_pressed gap: minor: the creative screen is chosen when E opens the inventory; no switch while a survival screen is already open
InventoryScreen.getRecipeBookButtonPosition port crates/horizon-client/src/game/recipe_book.rs::Game::book_button_pos book button at (leftPos+104, height/2-22), same as the crafting placement
InventoryScreen.extractLabels inline crates/horizon-client/src/game.rs::Game::draw_inventory Crafting title at x 97 in the survival inventory
InventoryScreen.extractRenderState inline crates/horizon-client/src/game.rs::Game::draw_inventory effect panels (draw_inventory_effects), slots and widgets
InventoryScreen.extractBackground inline crates/horizon-client/src/game.rs::Game::draw_inventory background texture and the player preview (draw_inventory_player)
InventoryScreen.extractEntityInInventoryFollowsMouse port crates/horizon-client/src/game/perspective.rs::Game::draw_player_preview gap: minor: player only; mounts use mount_menu.rs::draw_mob_preview. Head and body turn toward the cursor as vanilla
InventoryScreen.mouseReleased inline crates/horizon-client/src/game.rs::Game::inventory_mouse_release release goes through the slot path; a recipe-book press is handled first and has no separate release flag
ItemCombinerScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station anvil and smithing backgrounds, with the error sprite
JigsawBlockEditScreen missing player: creative operators cannot open a jigsaw block's editor; no jigsaw UI exists in Horizon
LecternScreen.createMenuControls inline crates/horizon-client/src/game/books.rs::Game::draw_book gap: player: Take Book and Done are drawn on every lectern; vanilla shows Take Book only with build permission (mayBuild)
LoomScreen.init skip:ui bakes the banner flag model for the preview; the loom is drawn by screen_layout::loom
LoomScreen.isScrollBarActive port crates/horizon-client/src/game/loom.rs::LoomState::offscreen_rows gap: minor: more than 16 patterns (four rows of four); the displayPatterns check is at the call sites
LoomScreen.extractBannerOnButton port crates/horizon-client/src/game/loom.rs::Game::paint_screen grey square and pattern sprite on each pattern button (Fill and Atlas draws from screen_layout::loom)
LoomScreen.hasClickedOutside port crates/horizon-client/src/game.rs::Game::clicked_outside outside test against the container rectangle, plus the recipe book area
MerchantScreen.postButtonClick port crates/horizon-client/src/game/trading.rs::Game::try_move_items selection hint, move the offer's items, and the SelectTrade packet on a server
MerchantScreen.init skip:ui trade buttons are laid out in draw_merchant and hit-tested in merchant_click
MerchantScreen.extractLabels inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant title with the trader level, Trades and Inventory labels
MerchantScreen.extractBackground inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant villager background and the out-of-stock sprite
MerchantScreen.extractProgressBar inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant experience bar, with the pending trade's XP
MerchantScreen.extractScroller inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant gap: minor: no pointing or resize cursor over the scroller
MerchantScreen.extractContents inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant the seven offer rows from the scroll offset
MerchantScreen.extractButtonArrows inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant trade arrow, and the out-of-stock arrow
MerchantScreen.extractAndDecorateCostA inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant discount: base count struck through, new count drawn (merchant.rs cost_a)
MerchantScreen.mouseScrolled port crates/horizon-client/src/game/trading.rs::Game::merchant_scroll gap: minor: one offer per wheel step; vanilla uses the float scroll amount
MerchantScreen.mouseDragged missing player: dragging the trade list scroller does nothing; only the mouse wheel scrolls the offers
MerchantScreen.mouseClicked port crates/horizon-client/src/game/trading.rs::Game::merchant_click gap: player: clicking the scroller does not start a drag (see mouseDragged); the offer buttons work
MerchantScreen.TradeOfferButton.extractToolTip inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant item tooltip for cost A, cost B or the result under the hovered offer
MinecartCommandBlockEditScreen.populateAndSendPacket missing player: a command block minecart never opens its command editor (minecarts.rs CartKind::CommandBlock is never usable), so its command cannot be set
PageButton.extractContents inline crates/horizon-client/src/game/books.rs::Game::draw_book page arrows with their hover sprites (page_buttons)
ShulkerBoxScreen.extractBackground port crates/horizon-client/src/game/storage.rs::Game::draw_chest_screen shulker box background texture, drawn with the other container screens
SignEditScreen.extractSignBackground port crates/horizon-client/src/game/sign_edit.rs::Game::draw_sign_editor sign board at 3.9x scale, wall signs at 12 rows
SmithingScreen.containerTick missing player: the empty template slot shows one fixed netherite icon; the cycling template icons and the base and addition slot icons are not drawn
SmithingScreen.getTemplateItem missing minor: helper for the slot icons only; Horizon has no template lookup for icons
SmithingScreen.extractRenderState inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: onboarding tooltips for empty slots are missing (see extractOnboardingTooltips)
SmithingScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: the armour stand preview beside the slots is not drawn
SmithingScreen.updateArmorStandPreview missing player: no armour stand preview of the item being upgraded is built, so nothing is drawn beside the slots
SmithingScreen.extractErrorIcon inline crates/horizon-client/src/game/stations.rs::Game::draw_station error sprite at (65, 46) when all inputs are set and there is no result
SmithingScreen.extractOnboardingTooltips inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: only the upgrade error tooltip exists; the missing-template and slot description tooltips are not drawn
StonecutterScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station background, scroller and the recipe grid
StonecutterScreen.extractTooltip inline crates/horizon-client/src/game/stations.rs::Game::draw_station tooltip of the hovered recipe result
StonecutterScreen.extractButtons inline crates/horizon-client/src/game/stations.rs::Game::draw_station recipe cell sprites: selected and highlighted
StonecutterScreen.extractRecipes inline crates/horizon-client/src/game/stations.rs::Game::draw_station recipe result icons in the grid
StonecutterScreen.mouseDragged missing player: the recipe list scroller cannot be dragged; only the mouse wheel scrolls it
StonecutterScreen.mouseScrolled port crates/horizon-client/src/game/stations.rs::Game::station_scroll one row of recipes per wheel step, only with more than 12 recipes
StonecutterScreen.isScrollBarActive inline crates/horizon-client/src/game/stations.rs::Game::station_scroll more than 12 visible recipes
StonecutterScreen.getOffscreenRows inline crates/horizon-client/src/game/stations.rs::Game::station_scroll rows beyond the 3 visible rows, ceil(recipes/4) - 3
StructureBlockEditScreen missing player: creative operators cannot open a structure block's editor; no structure block UI exists in Horizon
TestBlockEditScreen missing player: creative operators cannot open a test block's editor; gametest setup has no UI in Horizon
TestInstanceBlockEditScreen missing player: creative operators cannot open a test instance block's editor; gametest setup has no UI in Horizon
BelowOrAboveWidgetTooltipPositioner.positionTooltip missing minor: unsure: widget-anchored tooltip placement (below the widget, flipped above when it does not fit); Horizon places tooltips at the cursor (ui::tooltip)
ClientActivePlayersTooltip.getWidth missing player: hovering a server's player count in the server list shows no online player names; the ping sample is not read (multiplayer.rs)
ClientActivePlayersTooltip.extractImage missing player: no online player heads and names are drawn for a server; the ping sample is not read (multiplayer.rs)
1 AbstractFriendsEntryContainerWidget skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
2 AbstractFriendsTab skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
3 AddFriendWidget skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
4 FriendEntry skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
5 FriendsListConfirmScreen skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
6 FriendsOverlayScreen skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
7 FriendsOverlayTabButton skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
8 FriendsTab skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
9 IncomingEntry skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
10 OutgoingEntry skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
11 PendingTab skip:service Mojang friends service UI (friend list, requests, presence): service. Horizon's Friends button opens its own invite-code screen (game/screens.rs)
12 EffectsInInventory.extractRenderState port crates/horizon-client/src/game/potions.rs::Game::draw_inventory_effects panel layout and visibility beside the survival and creative inventories; drawn by inventory_effects::paint
13 EffectsInInventory.extractEffects port crates/horizon-client/src/inventory_effects.rs::paint one row per effect: icon, then text and background
14 EffectsInInventory.extractBackground port crates/horizon-client/src/inventory_effects.rs::background nine-slice panel background, ambient variant included
15 EffectsInInventory.extractText port crates/horizon-client/src/inventory_effects.rs::paint name and duration text, clipping with ..., hover tooltip for compact panels
16 EffectsInInventory.getEffectName inline crates/horizon-client/src/inventory_effects.rs::panels name plus level suffix for amplifier 1-9, folded into panels
17 EnchantmentNames.getRandomName inline crates/horizon-client/src/game/stations.rs::Game::draw_station galactic word names from the enchant seed (WORDS), drawn in the enchanting option slots
18 EnchantmentScreen.init skip:ui creates the book model for drawing only; the book itself is not drawn (see extractBook)
19 EnchantmentScreen.containerTick port crates/horizon-client/src/game/locator_bar.rs::Game::track_experience_display gap: player: keeps the experience bar up while the table is open; the book tick (tickBook) is not run
20 EnchantmentScreen.extractBook missing player: the enchanting table has no open 3D book; only the flat table is drawn, so the book never opens when an item is placed
21 EnchantmentScreen.tickBook missing player: the book's open and page-flip animation (driven by the offers) is not run; the table stays flat
22 GrindstoneScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station grindstone texture and the error sprite when an input is set and there is no result
23 HangingSignEditScreen.extractSignBackground port crates/horizon-client/src/game/sign_edit.rs::Game::draw_sign_editor hanging sign board at 4.5x scale
24 HopperScreen.extractBackground port crates/horizon-client/src/game/machines.rs::Game::draw_machine_screen hopper background for block and minecart hoppers
25 HorseInventoryScreen.shouldRenderSaddleSlot port crates/horizon-client/src/game/mount_menu.rs::shows_saddle saddle slot shown for every mount except llamas
26 HorseInventoryScreen.shouldRenderArmorSlot port crates/horizon-client/src/game/mount_menu.rs::shows_body armour slot for horse armour wearers and llamas
27 InventoryScreen.containerTick missing minor: a survival inventory that stays open when the game mode becomes creative is not switched to the creative screen
28 InventoryScreen.init inline crates/horizon-client/src/game.rs::Game::key_pressed gap: minor: the creative screen is chosen when E opens the inventory; no switch while a survival screen is already open
29 InventoryScreen.getRecipeBookButtonPosition port crates/horizon-client/src/game/recipe_book.rs::Game::book_button_pos book button at (leftPos+104, height/2-22), same as the crafting placement
30 InventoryScreen.extractLabels inline crates/horizon-client/src/game.rs::Game::draw_inventory Crafting title at x 97 in the survival inventory
31 InventoryScreen.extractRenderState inline crates/horizon-client/src/game.rs::Game::draw_inventory effect panels (draw_inventory_effects), slots and widgets
32 InventoryScreen.extractBackground inline crates/horizon-client/src/game.rs::Game::draw_inventory background texture and the player preview (draw_inventory_player)
33 InventoryScreen.extractEntityInInventoryFollowsMouse port crates/horizon-client/src/game/perspective.rs::Game::draw_player_preview gap: minor: player only; mounts use mount_menu.rs::draw_mob_preview. Head and body turn toward the cursor as vanilla
34 InventoryScreen.mouseReleased inline crates/horizon-client/src/game.rs::Game::inventory_mouse_release release goes through the slot path; a recipe-book press is handled first and has no separate release flag
35 ItemCombinerScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station anvil and smithing backgrounds, with the error sprite
36 JigsawBlockEditScreen missing player: creative operators cannot open a jigsaw block's editor; no jigsaw UI exists in Horizon
37 LecternScreen.createMenuControls inline crates/horizon-client/src/game/books.rs::Game::draw_book gap: player: Take Book and Done are drawn on every lectern; vanilla shows Take Book only with build permission (mayBuild)
38 LoomScreen.init skip:ui bakes the banner flag model for the preview; the loom is drawn by screen_layout::loom
39 LoomScreen.isScrollBarActive port crates/horizon-client/src/game/loom.rs::LoomState::offscreen_rows gap: minor: more than 16 patterns (four rows of four); the displayPatterns check is at the call sites
40 LoomScreen.extractBannerOnButton port crates/horizon-client/src/game/loom.rs::Game::paint_screen grey square and pattern sprite on each pattern button (Fill and Atlas draws from screen_layout::loom)
41 LoomScreen.hasClickedOutside port crates/horizon-client/src/game.rs::Game::clicked_outside outside test against the container rectangle, plus the recipe book area
42 MerchantScreen.postButtonClick port crates/horizon-client/src/game/trading.rs::Game::try_move_items selection hint, move the offer's items, and the SelectTrade packet on a server
43 MerchantScreen.init skip:ui trade buttons are laid out in draw_merchant and hit-tested in merchant_click
44 MerchantScreen.extractLabels inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant title with the trader level, Trades and Inventory labels
45 MerchantScreen.extractBackground inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant villager background and the out-of-stock sprite
46 MerchantScreen.extractProgressBar inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant experience bar, with the pending trade's XP
47 MerchantScreen.extractScroller inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant gap: minor: no pointing or resize cursor over the scroller
48 MerchantScreen.extractContents inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant the seven offer rows from the scroll offset
49 MerchantScreen.extractButtonArrows inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant trade arrow, and the out-of-stock arrow
50 MerchantScreen.extractAndDecorateCostA inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant discount: base count struck through, new count drawn (merchant.rs cost_a)
51 MerchantScreen.mouseScrolled port crates/horizon-client/src/game/trading.rs::Game::merchant_scroll gap: minor: one offer per wheel step; vanilla uses the float scroll amount
52 MerchantScreen.mouseDragged missing player: dragging the trade list scroller does nothing; only the mouse wheel scrolls the offers
53 MerchantScreen.mouseClicked port crates/horizon-client/src/game/trading.rs::Game::merchant_click gap: player: clicking the scroller does not start a drag (see mouseDragged); the offer buttons work
54 MerchantScreen.TradeOfferButton.extractToolTip inline crates/horizon-client/src/game/trading.rs::Game::draw_merchant item tooltip for cost A, cost B or the result under the hovered offer
55 MinecartCommandBlockEditScreen.populateAndSendPacket missing player: a command block minecart never opens its command editor (minecarts.rs CartKind::CommandBlock is never usable), so its command cannot be set
56 PageButton.extractContents inline crates/horizon-client/src/game/books.rs::Game::draw_book page arrows with their hover sprites (page_buttons)
57 ShulkerBoxScreen.extractBackground port crates/horizon-client/src/game/storage.rs::Game::draw_chest_screen shulker box background texture, drawn with the other container screens
58 SignEditScreen.extractSignBackground port crates/horizon-client/src/game/sign_edit.rs::Game::draw_sign_editor sign board at 3.9x scale, wall signs at 12 rows
59 SmithingScreen.containerTick missing player: the empty template slot shows one fixed netherite icon; the cycling template icons and the base and addition slot icons are not drawn
60 SmithingScreen.getTemplateItem missing minor: helper for the slot icons only; Horizon has no template lookup for icons
61 SmithingScreen.extractRenderState inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: onboarding tooltips for empty slots are missing (see extractOnboardingTooltips)
62 SmithingScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: the armour stand preview beside the slots is not drawn
63 SmithingScreen.updateArmorStandPreview missing player: no armour stand preview of the item being upgraded is built, so nothing is drawn beside the slots
64 SmithingScreen.extractErrorIcon inline crates/horizon-client/src/game/stations.rs::Game::draw_station error sprite at (65, 46) when all inputs are set and there is no result
65 SmithingScreen.extractOnboardingTooltips inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: only the upgrade error tooltip exists; the missing-template and slot description tooltips are not drawn
66 StonecutterScreen.extractBackground inline crates/horizon-client/src/game/stations.rs::Game::draw_station background, scroller and the recipe grid
67 StonecutterScreen.extractTooltip inline crates/horizon-client/src/game/stations.rs::Game::draw_station tooltip of the hovered recipe result
68 StonecutterScreen.extractButtons inline crates/horizon-client/src/game/stations.rs::Game::draw_station recipe cell sprites: selected and highlighted
69 StonecutterScreen.extractRecipes inline crates/horizon-client/src/game/stations.rs::Game::draw_station recipe result icons in the grid
70 StonecutterScreen.mouseDragged missing player: the recipe list scroller cannot be dragged; only the mouse wheel scrolls it
71 StonecutterScreen.mouseScrolled port crates/horizon-client/src/game/stations.rs::Game::station_scroll one row of recipes per wheel step, only with more than 12 recipes
72 StonecutterScreen.isScrollBarActive inline crates/horizon-client/src/game/stations.rs::Game::station_scroll more than 12 visible recipes
73 StonecutterScreen.getOffscreenRows inline crates/horizon-client/src/game/stations.rs::Game::station_scroll rows beyond the 3 visible rows, ceil(recipes/4) - 3
74 StructureBlockEditScreen missing player: creative operators cannot open a structure block's editor; no structure block UI exists in Horizon
75 TestBlockEditScreen missing player: creative operators cannot open a test block's editor; gametest setup has no UI in Horizon
76 TestInstanceBlockEditScreen missing player: creative operators cannot open a test instance block's editor; gametest setup has no UI in Horizon
77 BelowOrAboveWidgetTooltipPositioner.positionTooltip missing minor: unsure: widget-anchored tooltip placement (below the widget, flipped above when it does not fit); Horizon places tooltips at the cursor (ui::tooltip)
78 ClientActivePlayersTooltip.getWidth missing player: hovering a server's player count in the server list shows no online player names; the ping sample is not read (multiplayer.rs)
79 ClientActivePlayersTooltip.extractImage missing player: no online player heads and names are drawn for a server; the ping sample is not read (multiplayer.rs)
+139
View File
@@ -0,0 +1,139 @@
ClientBundleTooltip.extractEmptyBundleTooltip port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip empty branch: description, bar and label drawn from the layout
ClientBundleTooltip.extractBundleWithItemsTooltip port crates/horizon-items/src/bundle.rs::tooltip_layout gap: player: the selected item's name box above the grid is not drawn (extractSelectedItemTooltip); grid and bar placement are here
ClientBundleTooltip.getShownItems port crates/horizon-items/src/bundle.rs::Contents::shown shown count (getNumberOfItemsToShow) and the visible items
ClientBundleTooltip.shouldRenderSurplusText inline crates/horizon-items/src/bundle.rs::tooltip_layout overflow cell is the first cell of the first row when items are hidden
ClientBundleTooltip.getAmountOfHiddenItems port crates/horizon-items/src/bundle.rs::Contents::shown hidden count is the second return value
ClientBundleTooltip.extractSlot port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip slot background or highlight sprite, item, and front highlight
ClientBundleTooltip.extractCount port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip the +N label in the overflow cell
ClientBundleTooltip.extractSelectedItemTooltip missing player: when a bundle item is selected with the scroll wheel, vanilla shows that item's name in a box above the bundle; Horizon draws only the slot highlight
ClientBundleTooltip.extractProgressbar port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip fill, border and label sprites at the layout's bar position
ClientBundleTooltip.getEmptyBundleDescriptionTextHeight inline crates/horizon-items/src/bundle.rs::tooltip_layout gap: minor: fixed at two lines (18 px) instead of measuring the wrapped text
ClientBundleTooltip.getProgressBarFillText port crates/horizon-items/src/bundle.rs::tooltip_layout empty and full labels (the label field), drawn by draw_bundle_tooltip
ClientTooltipComponent.create inline crates/horizon-client/src/game/stations.rs::Game::draw_stack_tooltip gap: minor: only bundles and plain text lines get a component here; no ActivePlayersTooltip
DefaultTooltipPositioner.positionTooltip port crates/horizon-client/src/ui.rs::tooltip gap: minor: also clamps y to at least 4, which vanilla does not do; the text height is Horizon's own estimate
MenuTooltipPositioner.positionTooltip missing minor: widget tooltips (WidgetTooltipHolder) sit beside their widget in vanilla; Horizon's ui::tooltip always places tooltips at the cursor
MenuTooltipPositioner.getOffset missing minor: the widget-relative offset of the same missing positioner
TooltipRenderUtil.extractTooltipBackground port crates/horizon-client/src/ui.rs::tooltip background and frame sprites (tooltip/background, tooltip/frame)
TooltipRenderUtil.getBackgroundSprite inline crates/horizon-client/src/ui.rs::tooltip gap: minor: only the default style; no tooltip_style component
TooltipRenderUtil.getFrameSprite inline crates/horizon-client/src/ui.rs::tooltip gap: minor: only the default style; no tooltip_style component
CodeOfConductScreen missing player: a server with code of conduct enabled is accepted at once (net.rs CodeOfConduct reply), so the player never sees the text or the Acknowledge and Disconnect choice
JoinMultiplayerScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons footer buttons and their enabling; server load and LAN scan start are in Screen::list
JoinMultiplayerScreen.repositionElements skip:ui layout only: the list area is computed from the window size each frame (list_area)
JoinMultiplayerScreen.tick inline crates/horizon-client/src/multiplayer.rs::Screen::draw LAN games are read each frame (lan.games()); server pings run on their own threads
JoinMultiplayerScreen.removed port crates/horizon-client/src/lan/discovery.rs::ScanInner::drop dropping the list screen drops its scanner, and the drop stops the LAN scan
JoinMultiplayerScreen.deleteCallback port crates/horizon-client/src/multiplayer.rs::Screen::click delete answer (ids 58, 59) removes the server, clears the selection and saves
JoinMultiplayerScreen.editServerCallback port crates/horizon-client/src/multiplayer.rs::Screen::click edit save (id 50); the list reloads and re-pings after it
JoinMultiplayerScreen.addServerCallback port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: no hidden-server unhide (ServerList.unhide); add save (id 50, no index)
JoinMultiplayerScreen.directJoinCallback port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: a new address is not saved to the list first, as vanilla does; direct join (id 52) connects
JoinMultiplayerScreen.keyPressed missing minor: no keyboard path on the server list: F5 does not refresh; title.rs shows no key handling for it beyond Escape and text
JoinMultiplayerScreen.join port crates/horizon-client/src/multiplayer.rs::Screen::click returns Outcome::Connect for the selected server, LAN game or friend invite
JoinMultiplayerScreen.onSelectedChange port crates/horizon-client/src/multiplayer.rs::Screen::buttons Join enabled with a selection; Edit and Delete only for a saved server
RestrictionsScreen.createPermissionStatus port crates/horizon-client/src/game/lan_screen.rs::Restrictions::new allowed or denied line per permission, green or red
RestrictionsScreen.repositionElements skip:ui layout only: Restrictions::new sizes the scroll area from the window
SafetyScreen.addFooterButtons missing player: opening Multiplayer skips vanilla's safety warning (Proceed or Back, don't show again); skipMultiplayerWarning is stored in options_file.rs but no screen reads it
ServerReconfigScreen missing player: during a server reconfiguration vanilla shows a waiting screen with a Disconnect button; no such screen found; net.rs only forwards Event::Reconfigured
ServerSelectionList.refreshEntries port crates/horizon-client/src/multiplayer.rs::rows saved servers, LAN header and LAN games as one row list; selection is kept by index
ServerSelectionList.updateOnlineServers inline crates/horizon-client/src/multiplayer.rs::rows no separate list to refresh; rows are rebuilt from the saved servers
ServerSelectionList.updateNetworkServers inline crates/horizon-client/src/multiplayer.rs::rows gap: minor: no narrator announcement when a LAN game is found
ServerSelectionList.LANHeader.extractContent port crates/horizon-client/src/multiplayer.rs::Screen::draw scanning label and loading dots drawn in the list
ServerSelectionList.NetworkServerEntry.extractContent port crates/horizon-client/src/multiplayer.rs::Screen::draw gap: minor: the address is always shown, Hide Server Address (hideServerAddress) is not read; LAN World title, MOTD and address
ServerSelectionList.NetworkServerEntry.keyPressed missing minor: no keyboard join on the server list (Enter)
ServerSelectionList.NetworkServerEntry.join port crates/horizon-client/src/multiplayer.rs::Screen::click LAN game joined by a click on its row (Row::Lan) or a second click on the selected row
ServerSelectionList.NetworkServerEntry.matches skip:java selection is kept by index, so no entry identity match is needed
ServerSelectionList.OnlineServerEntry.extractContent port crates/horizon-client/src/multiplayer.rs::Screen::draw gap: player: no incompatible-version state (protocol mismatch) and no player-name tooltip; every failed ping reads Cannot connect; name, MOTD, ping bars, player count, hover join and move sprites
ServerSelectionList.OnlineServerEntry.refreshStatus port crates/horizon-client/src/multiplayer.rs::ping_tooltip gap: player: no player-name tooltip on the player count (playerList); ping tooltip: ms, no connection or pinging; the bar choice is in Screen::draw
ServerSelectionList.OnlineServerEntry.extractIcon port crates/horizon-client/src/multiplayer.rs::draw_server_icon server icon at 32x32
ServerSelectionList.OnlineServerEntry.keyPressed missing minor: no keyboard path: Enter does not join and Shift+Up/Down does not move a server
ServerSelectionList.OnlineServerEntry.swap port crates/horizon-client/src/multiplayer.rs::Screen::click icon arrow click swaps the server up or down and saves
ServerSelectionList.OnlineServerEntry.getNarration missing minor: no narrator in Horizon, so no screen-reader text for entries
ServerSelectionList.OnlineServerEntry.matches skip:java selection is kept by index, so no entry identity match is needed
WarningScreen missing player: the warning page vanilla builds for multiplayer (base of SafetyScreen) does not exist in Horizon
AccessibilityOptionsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows ACCESSIBILITY_OPTIONS list, same options in the same order
AccessibilityOptionsScreen.init missing minor: High Contrast is not greyed out without the high_contrast pack, and Rotate with Minecarts is not greyed out without the minecart feature
AccessibilityOptionsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows Narrator row with the Controls button, then the rest of the rows
AccessibilityOptionsScreen.addFooter missing minor: the Accessibility Help link button is absent from the footer
AccessibilityOptionsScreen.isMinecartOptionEnabled missing minor: no minecart feature-flag check; part of the greying-out in init
ChatOptionsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: minor: Chat Delay and Narrator are on the Accessibility page instead; Chat page rows
FontOptionsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows Force Unicode Font and Japanese glyph variants
InWorldGameRulesScreen.initContent port crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click GameRules button: a remote world sends REQUEST_GAMERULE_VALUES (action 2); a local world builds RulesScreen from its rules
InWorldGameRulesScreen.onDone port crates/horizon-client/src/game/lan_screen.rs::Game::close_game_rules Done sends only the changed rules, and only with permission 2 on a remote world
InWorldGameRulesScreen.collectChangedGameRule port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::changes rules whose value differs from the initial one
InWorldGameRulesScreen.hasGameRuleChanged inline crates/horizon-client/src/game_rules_screen.rs::RulesScreen::changes comparison against the initial value
InWorldGameRulesScreen.onGameRuleValuesUpdated port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_rules server values for the rules view (GameRuleValues)
InWorldGameRulesScreen.initializeGameRuleValue inline crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_rules each server value parsed into the rules
InWorldGameRulesScreen.onGamemasterPermissionChanged port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_permission gap: minor: closes the rules only for a remote world; vanilla closes on any lost permission
LanguageSelectScreen.addTitle inline crates/horizon-client/src/options_ui.rs::OptionsUi::layout language search box at the top of the Language page
LanguageSelectScreen.setInitialFocus skip:ui focus only: typed text goes to the language search whatever has focus (type_text)
LanguageSelectScreen.addContents port crates/horizon-client/src/options_ui.rs::OptionsUi::layout language rows of the Language page
LanguageSelectScreen.addFooter port crates/horizon-client/src/options_ui.rs::OptionsUi::layout gap: minor: unsure whether the translation warning line is drawn; Font... and Done buttons
LanguageSelectScreen.repositionElements skip:ui layout only: rows are laid out from the window size each frame
LanguageSelectScreen.onDone port crates/horizon-client/src/options_ui.rs::OptionsUi::back Done applies the chosen language (language_choice)
LanguageSelectScreen.LanguageSelectionList.filterEntries port crates/horizon-client/src/options_ui.rs::OptionsUi::layout filter by the search text against name and region (Page::Language)
LanguageSelectScreen.LanguageSelectionList.Entry.extractContent port crates/horizon-client/src/options_ui.rs::OptionsUi::draw the language row's label, centred
LanguageSelectScreen.LanguageSelectionList.Entry.keyPressed missing minor: unsure: no Enter-to-select on language rows found in OptionsUi::key
LanguageSelectScreen.LanguageSelectionList.Entry.mouseClicked port crates/horizon-client/src/options_ui.rs::OptionsUi::click gap: minor: a second click on the chosen language finishes the page, which stands in for double-click; click selects
MouseSettingsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows MOUSE_OPTIONS in vanilla order
OnlineOptionsScreen missing player: Options > Online is greyed out in Horizon, so friends list, friend requests, in-game friend notifications, server listing and Realms notifications cannot be set
OptionsScreen.init port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: the Online button is greyed out and Skin Customisation opens no page; main page rows
OptionsScreen.createOnlineButton missing player: the Online button is greyed out, so Options > Online cannot be opened
OptionsScreen.openScreenButton port crates/horizon-client/src/options_ui.rs::OptionsUi::click sub-page buttons push their page (Act::Push)
OptionsSubScreen.init port crates/horizon-client/src/options_ui.rs::OptionsUi::push opening a page resets its scroll, search and page state
OptionsSubScreen.addContents port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows the page's rows
OptionsSubScreen.addFooter inline crates/horizon-client/src/options_ui.rs::OptionsUi::layout Done button at the bottom of each page
OptionsSubScreen.repositionElements skip:ui layout only: rows are laid out from the window size each frame
OptionsSubScreen.onClose port crates/horizon-client/src/options_ui.rs::OptionsUi::back Done and Escape leave the page and apply its results
SkinCustomizationScreen.addOptions missing player: Skin Customisation opens no page in Horizon: no cape, jacket, sleeve, pants or main hand options
SoundOptionsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: minor: no sound device, directional audio or music toast rows; master and per-source volumes, subtitles, music frequency
SoundOptionsScreen.getAllSoundOptionsExceptMaster port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows per-source volume rows (Volume(1..))
UnsupportedGraphicsWarningScreen missing minor: no GPU warn list in Horizon, so the unsupported-graphics warning never appears when Improved Transparency is turned on
VideoSettingsScreen.qualityOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no Texture Filtering or Max Anisotropy rows; Video page quality rows
VideoSettingsScreen.displayOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no Exclusive Fullscreen or Preferred Graphics Backend rows; framerate, vsync, inactivity FPS, GUI scale, fullscreen, gamma
VideoSettingsScreen.preferenceOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows autosave indicator, vignette, attack indicator, chunk fade-in
VideoSettingsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no exclusive fullscreen row (see displayOptions); Video page sections with Horizon's Graphics buttons first
VideoSettingsScreen.addTitle missing minor: no restart-required line; the option that needs a restart in vanilla (preferred backend) is absent
VideoSettingsScreen.tick missing minor: no anisotropy greying and no restart-required line (see addTitle)
VideoSettingsScreen.removed port crates/horizon-client/src/game/options.rs::Game::apply_ui_settings gap: minor: applied on every apply, not only when the value changed; no anisotropy or filtering to check; mipmap levels applied to the renderer
VideoSettingsScreen.mouseClicked missing minor: no unsupported-graphics warning when Improved Transparency is turned on
VideoSettingsScreen.mouseScrolled missing player: Ctrl with the mouse wheel does not change the GUI scale on the Video page; the wheel only scrolls (scroll_at has no Ctrl check)
VideoSettingsScreen.updateFullscreenButton skip:ui rows are rebuilt from Settings on each layout, so there is no fullscreen widget to set
VideoSettingsScreen.repositionElements missing minor: no exclusive fullscreen mode list to rebuild when the window moves to another monitor
VideoSettingsScreen.updateTransparencyButton skip:ui rows are rebuilt from Settings on each layout, so the transparency row reads its value each frame
ControlsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no Toggle Attack, Toggle Use, Sprint Window, Quit Shortcuts, Ctrl-click or Operator Items rows (the settings exist in options_file.rs); toggle crouch, sprint and auto jump rows
ControlsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows Mouse Settings and Key Binds buttons, then the toggles; Horizon adds Controller Settings
KeyBindsList.CategoryEntry.extractContent port crates/horizon-client/src/options_ui.rs::OptionsUi::draw category header text
KeyBindsList.KeyEntry.<init> port crates/horizon-client/src/options_ui.rs::OptionsUi::layout change and reset buttons per key row
KeyBindsList.KeyEntry.extractContent port crates/horizon-client/src/options_ui.rs::OptionsUi::draw row name and conflict highlight
KeyBindsList.KeyEntry.refreshEntry port crates/horizon-client/src/options_ui.rs::OptionsUi::layout conflicts from keys.conflicts; reset enabled when the key is not default
KeyBindsList.KeyEntry.updateChangeButtonMessage port crates/horizon-client/src/options_ui.rs::OptionsUi::layout key label, with the > < marker while waiting for a key (selected_key)
KeyBindsScreen.addContents port crates/horizon-client/src/options_ui.rs::OptionsUi::layout the key bind rows
KeyBindsScreen.addFooter port crates/horizon-client/src/options_ui.rs::OptionsUi::layout Reset All and Done buttons
KeyBindsScreen.repositionElements skip:ui layout only
KeyBindsScreen.mouseClicked port crates/horizon-client/src/options_ui.rs::OptionsUi::bind_mouse a mouse button is bound to the key being changed
KeyBindsScreen.extractRenderState port crates/horizon-client/src/options_ui.rs::OptionsUi::layout gap: minor: Reset All drawn in layout; its enabled-when-changed check was not confirmed
PackSelectionModel.getUnselected port crates/horizon-client/src/packs.rs::SelectionModel::list unselected list (list(false)), returned as a slice rather than a stream
PackSelectionModel.getSelected port crates/horizon-client/src/packs.rs::SelectionModel::list selected list (list(true)), returned as a slice rather than a stream
PackSelectionModel.updateRepoSelectedList port crates/horizon-client/src/packs.rs::SelectionModel::commit selection written bottom first, as options.txt stores it
PackSelectionModel.findNewPacks port crates/horizon-client/src/game/packs.rs::Game::refresh_pack_lists gap: minor: rescans when the options open, not while the screen is open (no folder watch)
PackSelectionModel.EntryBase.updateHighContrastOptionInstance missing minor: selecting the high_contrast pack does not switch the High Contrast option on, as vanilla does
PackSelectionModel.EntryBase.move port crates/horizon-client/src/packs.rs::SelectionModel::move_by move up or down within the list when the neighbour is not fixed
PackSelectionScreen.closeWatcher missing minor: no folder watcher to close (see PackSelectionScreen.Watcher)
PackSelectionScreen.setInitialFocus port crates/horizon-client/src/pack_screen.rs::PackScreen::set_focus search box focused on open
PackSelectionScreen.updateFilteredEntries port crates/horizon-client/src/pack_screen.rs::PackScreen::filter filters both lists by the search text
PackSelectionScreen.repositionElements port crates/horizon-client/src/pack_screen.rs::PackScreen::reposition search box and both list boxes
PackSelectionScreen.tick missing minor: no folder poll; packs added while the screen is open appear only when the options reopen (refresh_pack_lists)
PackSelectionScreen.reload port crates/horizon-client/src/pack_screen.rs::PackScreen::populate gap: minor: rebuilds both lists; no rescan here (see findNewPacks)
PackSelectionScreen.copyPacks missing minor: no pack copy into the packs folder; dropped packs are not copied
PackSelectionScreen.onFilesDrop missing minor: dropping pack files onto the screen does nothing; Horizon has no file-drop handling
PackSelectionScreen.getPackIcon port crates/horizon-client/src/pack_screen.rs::load_icon icons decoded once into PackInfo.icon, then bound as textures (icon_texture)
PackSelectionScreen.Watcher missing minor: no WatchService on the packs folder (create, watchDir, pollForChanges)
TransferableSelectionList.keyPressed missing minor: no keyboard entry navigation: keys reach only the search box (type_text, shortcut, erase), not a selected pack
TransferableSelectionList.HeaderEntry.extractContent port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list header row (Available or Selected) drawn in the list
TransferableSelectionList.PackEntry.getNarration missing minor: no narrator in Horizon
TransferableSelectionList.PackEntry.keyPressed missing minor: no keyboard select or move for a pack (Enter, Shift+Up/Down); nothing calls activate or move_by from keys
TransferableSelectionList.PackEntry.showHoverOverlay port crates/horizon-client/src/pack_screen.rs::PackScreen::overlay overlay shown unless the pack is both fixed and required
TransferableSelectionList.PackEntry.keyboardSelection missing minor: no keyboard selection (see PackEntry.keyPressed)
TransferableSelectionList.PackEntry.handlePackSelection port crates/horizon-client/src/pack_screen.rs::PackScreen::entry_click gap: minor: keyboard path missing (keyboardSelection); icon click selects; an incompatible pack opens the confirmation (open_confirm) first
TransferableSelectionList.PackEntry.shouldTakeFocusAfterInteraction skip:ui focus after a click matters only for keyboard entry navigation, which Horizon does not have
CraftingRecipeBookComponent.isCraftingSlot missing minor: unsure: no crafting-slot check found in the recipe book code
CraftingRecipeBookComponent.fillGhostRecipe port crates/horizon-client/src/recipe_book.rs::Book::ghost crafting branch: shaped recipes placed by place_cells, shapeless in order; result set first
FurnaceRecipeBookComponent.fillGhostRecipe port crates/horizon-client/src/recipe_book.rs::Book::ghost furnace branch: ingredient, and the fuel only when the fuel slot is empty (fuel_empty)
1 ClientBundleTooltip.extractEmptyBundleTooltip port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip empty branch: description, bar and label drawn from the layout
2 ClientBundleTooltip.extractBundleWithItemsTooltip port crates/horizon-items/src/bundle.rs::tooltip_layout gap: player: the selected item's name box above the grid is not drawn (extractSelectedItemTooltip); grid and bar placement are here
3 ClientBundleTooltip.getShownItems port crates/horizon-items/src/bundle.rs::Contents::shown shown count (getNumberOfItemsToShow) and the visible items
4 ClientBundleTooltip.shouldRenderSurplusText inline crates/horizon-items/src/bundle.rs::tooltip_layout overflow cell is the first cell of the first row when items are hidden
5 ClientBundleTooltip.getAmountOfHiddenItems port crates/horizon-items/src/bundle.rs::Contents::shown hidden count is the second return value
6 ClientBundleTooltip.extractSlot port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip slot background or highlight sprite, item, and front highlight
7 ClientBundleTooltip.extractCount port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip the +N label in the overflow cell
8 ClientBundleTooltip.extractSelectedItemTooltip missing player: when a bundle item is selected with the scroll wheel, vanilla shows that item's name in a box above the bundle; Horizon draws only the slot highlight
9 ClientBundleTooltip.extractProgressbar port crates/horizon-client/src/game/stations.rs::Game::draw_bundle_tooltip fill, border and label sprites at the layout's bar position
10 ClientBundleTooltip.getEmptyBundleDescriptionTextHeight inline crates/horizon-items/src/bundle.rs::tooltip_layout gap: minor: fixed at two lines (18 px) instead of measuring the wrapped text
11 ClientBundleTooltip.getProgressBarFillText port crates/horizon-items/src/bundle.rs::tooltip_layout empty and full labels (the label field), drawn by draw_bundle_tooltip
12 ClientTooltipComponent.create inline crates/horizon-client/src/game/stations.rs::Game::draw_stack_tooltip gap: minor: only bundles and plain text lines get a component here; no ActivePlayersTooltip
13 DefaultTooltipPositioner.positionTooltip port crates/horizon-client/src/ui.rs::tooltip gap: minor: also clamps y to at least 4, which vanilla does not do; the text height is Horizon's own estimate
14 MenuTooltipPositioner.positionTooltip missing minor: widget tooltips (WidgetTooltipHolder) sit beside their widget in vanilla; Horizon's ui::tooltip always places tooltips at the cursor
15 MenuTooltipPositioner.getOffset missing minor: the widget-relative offset of the same missing positioner
16 TooltipRenderUtil.extractTooltipBackground port crates/horizon-client/src/ui.rs::tooltip background and frame sprites (tooltip/background, tooltip/frame)
17 TooltipRenderUtil.getBackgroundSprite inline crates/horizon-client/src/ui.rs::tooltip gap: minor: only the default style; no tooltip_style component
18 TooltipRenderUtil.getFrameSprite inline crates/horizon-client/src/ui.rs::tooltip gap: minor: only the default style; no tooltip_style component
19 CodeOfConductScreen missing player: a server with code of conduct enabled is accepted at once (net.rs CodeOfConduct reply), so the player never sees the text or the Acknowledge and Disconnect choice
20 JoinMultiplayerScreen.init port crates/horizon-client/src/multiplayer.rs::Screen::buttons footer buttons and their enabling; server load and LAN scan start are in Screen::list
21 JoinMultiplayerScreen.repositionElements skip:ui layout only: the list area is computed from the window size each frame (list_area)
22 JoinMultiplayerScreen.tick inline crates/horizon-client/src/multiplayer.rs::Screen::draw LAN games are read each frame (lan.games()); server pings run on their own threads
23 JoinMultiplayerScreen.removed port crates/horizon-client/src/lan/discovery.rs::ScanInner::drop dropping the list screen drops its scanner, and the drop stops the LAN scan
24 JoinMultiplayerScreen.deleteCallback port crates/horizon-client/src/multiplayer.rs::Screen::click delete answer (ids 58, 59) removes the server, clears the selection and saves
25 JoinMultiplayerScreen.editServerCallback port crates/horizon-client/src/multiplayer.rs::Screen::click edit save (id 50); the list reloads and re-pings after it
26 JoinMultiplayerScreen.addServerCallback port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: no hidden-server unhide (ServerList.unhide); add save (id 50, no index)
27 JoinMultiplayerScreen.directJoinCallback port crates/horizon-client/src/multiplayer.rs::Screen::click gap: minor: a new address is not saved to the list first, as vanilla does; direct join (id 52) connects
28 JoinMultiplayerScreen.keyPressed missing minor: no keyboard path on the server list: F5 does not refresh; title.rs shows no key handling for it beyond Escape and text
29 JoinMultiplayerScreen.join port crates/horizon-client/src/multiplayer.rs::Screen::click returns Outcome::Connect for the selected server, LAN game or friend invite
30 JoinMultiplayerScreen.onSelectedChange port crates/horizon-client/src/multiplayer.rs::Screen::buttons Join enabled with a selection; Edit and Delete only for a saved server
31 RestrictionsScreen.createPermissionStatus port crates/horizon-client/src/game/lan_screen.rs::Restrictions::new allowed or denied line per permission, green or red
32 RestrictionsScreen.repositionElements skip:ui layout only: Restrictions::new sizes the scroll area from the window
33 SafetyScreen.addFooterButtons missing player: opening Multiplayer skips vanilla's safety warning (Proceed or Back, don't show again); skipMultiplayerWarning is stored in options_file.rs but no screen reads it
34 ServerReconfigScreen missing player: during a server reconfiguration vanilla shows a waiting screen with a Disconnect button; no such screen found; net.rs only forwards Event::Reconfigured
35 ServerSelectionList.refreshEntries port crates/horizon-client/src/multiplayer.rs::rows saved servers, LAN header and LAN games as one row list; selection is kept by index
36 ServerSelectionList.updateOnlineServers inline crates/horizon-client/src/multiplayer.rs::rows no separate list to refresh; rows are rebuilt from the saved servers
37 ServerSelectionList.updateNetworkServers inline crates/horizon-client/src/multiplayer.rs::rows gap: minor: no narrator announcement when a LAN game is found
38 ServerSelectionList.LANHeader.extractContent port crates/horizon-client/src/multiplayer.rs::Screen::draw scanning label and loading dots drawn in the list
39 ServerSelectionList.NetworkServerEntry.extractContent port crates/horizon-client/src/multiplayer.rs::Screen::draw gap: minor: the address is always shown, Hide Server Address (hideServerAddress) is not read; LAN World title, MOTD and address
40 ServerSelectionList.NetworkServerEntry.keyPressed missing minor: no keyboard join on the server list (Enter)
41 ServerSelectionList.NetworkServerEntry.join port crates/horizon-client/src/multiplayer.rs::Screen::click LAN game joined by a click on its row (Row::Lan) or a second click on the selected row
42 ServerSelectionList.NetworkServerEntry.matches skip:java selection is kept by index, so no entry identity match is needed
43 ServerSelectionList.OnlineServerEntry.extractContent port crates/horizon-client/src/multiplayer.rs::Screen::draw gap: player: no incompatible-version state (protocol mismatch) and no player-name tooltip; every failed ping reads Cannot connect; name, MOTD, ping bars, player count, hover join and move sprites
44 ServerSelectionList.OnlineServerEntry.refreshStatus port crates/horizon-client/src/multiplayer.rs::ping_tooltip gap: player: no player-name tooltip on the player count (playerList); ping tooltip: ms, no connection or pinging; the bar choice is in Screen::draw
45 ServerSelectionList.OnlineServerEntry.extractIcon port crates/horizon-client/src/multiplayer.rs::draw_server_icon server icon at 32x32
46 ServerSelectionList.OnlineServerEntry.keyPressed missing minor: no keyboard path: Enter does not join and Shift+Up/Down does not move a server
47 ServerSelectionList.OnlineServerEntry.swap port crates/horizon-client/src/multiplayer.rs::Screen::click icon arrow click swaps the server up or down and saves
48 ServerSelectionList.OnlineServerEntry.getNarration missing minor: no narrator in Horizon, so no screen-reader text for entries
49 ServerSelectionList.OnlineServerEntry.matches skip:java selection is kept by index, so no entry identity match is needed
50 WarningScreen missing player: the warning page vanilla builds for multiplayer (base of SafetyScreen) does not exist in Horizon
51 AccessibilityOptionsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows ACCESSIBILITY_OPTIONS list, same options in the same order
52 AccessibilityOptionsScreen.init missing minor: High Contrast is not greyed out without the high_contrast pack, and Rotate with Minecarts is not greyed out without the minecart feature
53 AccessibilityOptionsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows Narrator row with the Controls button, then the rest of the rows
54 AccessibilityOptionsScreen.addFooter missing minor: the Accessibility Help link button is absent from the footer
55 AccessibilityOptionsScreen.isMinecartOptionEnabled missing minor: no minecart feature-flag check; part of the greying-out in init
56 ChatOptionsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: minor: Chat Delay and Narrator are on the Accessibility page instead; Chat page rows
57 FontOptionsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows Force Unicode Font and Japanese glyph variants
58 InWorldGameRulesScreen.initContent port crates/horizon-client/src/game/lan_screen.rs::Game::world_options_click GameRules button: a remote world sends REQUEST_GAMERULE_VALUES (action 2); a local world builds RulesScreen from its rules
59 InWorldGameRulesScreen.onDone port crates/horizon-client/src/game/lan_screen.rs::Game::close_game_rules Done sends only the changed rules, and only with permission 2 on a remote world
60 InWorldGameRulesScreen.collectChangedGameRule port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::changes rules whose value differs from the initial one
61 InWorldGameRulesScreen.hasGameRuleChanged inline crates/horizon-client/src/game_rules_screen.rs::RulesScreen::changes comparison against the initial value
62 InWorldGameRulesScreen.onGameRuleValuesUpdated port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_rules server values for the rules view (GameRuleValues)
63 InWorldGameRulesScreen.initializeGameRuleValue inline crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_rules each server value parsed into the rules
64 InWorldGameRulesScreen.onGamemasterPermissionChanged port crates/horizon-client/src/game/lan_screen.rs::Game::remote_world_options_permission gap: minor: closes the rules only for a remote world; vanilla closes on any lost permission
65 LanguageSelectScreen.addTitle inline crates/horizon-client/src/options_ui.rs::OptionsUi::layout language search box at the top of the Language page
66 LanguageSelectScreen.setInitialFocus skip:ui focus only: typed text goes to the language search whatever has focus (type_text)
67 LanguageSelectScreen.addContents port crates/horizon-client/src/options_ui.rs::OptionsUi::layout language rows of the Language page
68 LanguageSelectScreen.addFooter port crates/horizon-client/src/options_ui.rs::OptionsUi::layout gap: minor: unsure whether the translation warning line is drawn; Font... and Done buttons
69 LanguageSelectScreen.repositionElements skip:ui layout only: rows are laid out from the window size each frame
70 LanguageSelectScreen.onDone port crates/horizon-client/src/options_ui.rs::OptionsUi::back Done applies the chosen language (language_choice)
71 LanguageSelectScreen.LanguageSelectionList.filterEntries port crates/horizon-client/src/options_ui.rs::OptionsUi::layout filter by the search text against name and region (Page::Language)
72 LanguageSelectScreen.LanguageSelectionList.Entry.extractContent port crates/horizon-client/src/options_ui.rs::OptionsUi::draw the language row's label, centred
73 LanguageSelectScreen.LanguageSelectionList.Entry.keyPressed missing minor: unsure: no Enter-to-select on language rows found in OptionsUi::key
74 LanguageSelectScreen.LanguageSelectionList.Entry.mouseClicked port crates/horizon-client/src/options_ui.rs::OptionsUi::click gap: minor: a second click on the chosen language finishes the page, which stands in for double-click; click selects
75 MouseSettingsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows MOUSE_OPTIONS in vanilla order
76 OnlineOptionsScreen missing player: Options > Online is greyed out in Horizon, so friends list, friend requests, in-game friend notifications, server listing and Realms notifications cannot be set
77 OptionsScreen.init port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: the Online button is greyed out and Skin Customisation opens no page; main page rows
78 OptionsScreen.createOnlineButton missing player: the Online button is greyed out, so Options > Online cannot be opened
79 OptionsScreen.openScreenButton port crates/horizon-client/src/options_ui.rs::OptionsUi::click sub-page buttons push their page (Act::Push)
80 OptionsSubScreen.init port crates/horizon-client/src/options_ui.rs::OptionsUi::push opening a page resets its scroll, search and page state
81 OptionsSubScreen.addContents port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows the page's rows
82 OptionsSubScreen.addFooter inline crates/horizon-client/src/options_ui.rs::OptionsUi::layout Done button at the bottom of each page
83 OptionsSubScreen.repositionElements skip:ui layout only: rows are laid out from the window size each frame
84 OptionsSubScreen.onClose port crates/horizon-client/src/options_ui.rs::OptionsUi::back Done and Escape leave the page and apply its results
85 SkinCustomizationScreen.addOptions missing player: Skin Customisation opens no page in Horizon: no cape, jacket, sleeve, pants or main hand options
86 SoundOptionsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: minor: no sound device, directional audio or music toast rows; master and per-source volumes, subtitles, music frequency
87 SoundOptionsScreen.getAllSoundOptionsExceptMaster port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows per-source volume rows (Volume(1..))
88 UnsupportedGraphicsWarningScreen missing minor: no GPU warn list in Horizon, so the unsupported-graphics warning never appears when Improved Transparency is turned on
89 VideoSettingsScreen.qualityOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no Texture Filtering or Max Anisotropy rows; Video page quality rows
90 VideoSettingsScreen.displayOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no Exclusive Fullscreen or Preferred Graphics Backend rows; framerate, vsync, inactivity FPS, GUI scale, fullscreen, gamma
91 VideoSettingsScreen.preferenceOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows autosave indicator, vignette, attack indicator, chunk fade-in
92 VideoSettingsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no exclusive fullscreen row (see displayOptions); Video page sections with Horizon's Graphics buttons first
93 VideoSettingsScreen.addTitle missing minor: no restart-required line; the option that needs a restart in vanilla (preferred backend) is absent
94 VideoSettingsScreen.tick missing minor: no anisotropy greying and no restart-required line (see addTitle)
95 VideoSettingsScreen.removed port crates/horizon-client/src/game/options.rs::Game::apply_ui_settings gap: minor: applied on every apply, not only when the value changed; no anisotropy or filtering to check; mipmap levels applied to the renderer
96 VideoSettingsScreen.mouseClicked missing minor: no unsupported-graphics warning when Improved Transparency is turned on
97 VideoSettingsScreen.mouseScrolled missing player: Ctrl with the mouse wheel does not change the GUI scale on the Video page; the wheel only scrolls (scroll_at has no Ctrl check)
98 VideoSettingsScreen.updateFullscreenButton skip:ui rows are rebuilt from Settings on each layout, so there is no fullscreen widget to set
99 VideoSettingsScreen.repositionElements missing minor: no exclusive fullscreen mode list to rebuild when the window moves to another monitor
100 VideoSettingsScreen.updateTransparencyButton skip:ui rows are rebuilt from Settings on each layout, so the transparency row reads its value each frame
101 ControlsScreen.options port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows gap: player: no Toggle Attack, Toggle Use, Sprint Window, Quit Shortcuts, Ctrl-click or Operator Items rows (the settings exist in options_file.rs); toggle crouch, sprint and auto jump rows
102 ControlsScreen.addOptions port crates/horizon-client/src/options_ui.rs::OptionsUi::list_rows Mouse Settings and Key Binds buttons, then the toggles; Horizon adds Controller Settings
103 KeyBindsList.CategoryEntry.extractContent port crates/horizon-client/src/options_ui.rs::OptionsUi::draw category header text
104 KeyBindsList.KeyEntry.<init> port crates/horizon-client/src/options_ui.rs::OptionsUi::layout change and reset buttons per key row
105 KeyBindsList.KeyEntry.extractContent port crates/horizon-client/src/options_ui.rs::OptionsUi::draw row name and conflict highlight
106 KeyBindsList.KeyEntry.refreshEntry port crates/horizon-client/src/options_ui.rs::OptionsUi::layout conflicts from keys.conflicts; reset enabled when the key is not default
107 KeyBindsList.KeyEntry.updateChangeButtonMessage port crates/horizon-client/src/options_ui.rs::OptionsUi::layout key label, with the > < marker while waiting for a key (selected_key)
108 KeyBindsScreen.addContents port crates/horizon-client/src/options_ui.rs::OptionsUi::layout the key bind rows
109 KeyBindsScreen.addFooter port crates/horizon-client/src/options_ui.rs::OptionsUi::layout Reset All and Done buttons
110 KeyBindsScreen.repositionElements skip:ui layout only
111 KeyBindsScreen.mouseClicked port crates/horizon-client/src/options_ui.rs::OptionsUi::bind_mouse a mouse button is bound to the key being changed
112 KeyBindsScreen.extractRenderState port crates/horizon-client/src/options_ui.rs::OptionsUi::layout gap: minor: Reset All drawn in layout; its enabled-when-changed check was not confirmed
113 PackSelectionModel.getUnselected port crates/horizon-client/src/packs.rs::SelectionModel::list unselected list (list(false)), returned as a slice rather than a stream
114 PackSelectionModel.getSelected port crates/horizon-client/src/packs.rs::SelectionModel::list selected list (list(true)), returned as a slice rather than a stream
115 PackSelectionModel.updateRepoSelectedList port crates/horizon-client/src/packs.rs::SelectionModel::commit selection written bottom first, as options.txt stores it
116 PackSelectionModel.findNewPacks port crates/horizon-client/src/game/packs.rs::Game::refresh_pack_lists gap: minor: rescans when the options open, not while the screen is open (no folder watch)
117 PackSelectionModel.EntryBase.updateHighContrastOptionInstance missing minor: selecting the high_contrast pack does not switch the High Contrast option on, as vanilla does
118 PackSelectionModel.EntryBase.move port crates/horizon-client/src/packs.rs::SelectionModel::move_by move up or down within the list when the neighbour is not fixed
119 PackSelectionScreen.closeWatcher missing minor: no folder watcher to close (see PackSelectionScreen.Watcher)
120 PackSelectionScreen.setInitialFocus port crates/horizon-client/src/pack_screen.rs::PackScreen::set_focus search box focused on open
121 PackSelectionScreen.updateFilteredEntries port crates/horizon-client/src/pack_screen.rs::PackScreen::filter filters both lists by the search text
122 PackSelectionScreen.repositionElements port crates/horizon-client/src/pack_screen.rs::PackScreen::reposition search box and both list boxes
123 PackSelectionScreen.tick missing minor: no folder poll; packs added while the screen is open appear only when the options reopen (refresh_pack_lists)
124 PackSelectionScreen.reload port crates/horizon-client/src/pack_screen.rs::PackScreen::populate gap: minor: rebuilds both lists; no rescan here (see findNewPacks)
125 PackSelectionScreen.copyPacks missing minor: no pack copy into the packs folder; dropped packs are not copied
126 PackSelectionScreen.onFilesDrop missing minor: dropping pack files onto the screen does nothing; Horizon has no file-drop handling
127 PackSelectionScreen.getPackIcon port crates/horizon-client/src/pack_screen.rs::load_icon icons decoded once into PackInfo.icon, then bound as textures (icon_texture)
128 PackSelectionScreen.Watcher missing minor: no WatchService on the packs folder (create, watchDir, pollForChanges)
129 TransferableSelectionList.keyPressed missing minor: no keyboard entry navigation: keys reach only the search box (type_text, shortcut, erase), not a selected pack
130 TransferableSelectionList.HeaderEntry.extractContent port crates/horizon-client/src/pack_screen.rs::PackScreen::draw_list header row (Available or Selected) drawn in the list
131 TransferableSelectionList.PackEntry.getNarration missing minor: no narrator in Horizon
132 TransferableSelectionList.PackEntry.keyPressed missing minor: no keyboard select or move for a pack (Enter, Shift+Up/Down); nothing calls activate or move_by from keys
133 TransferableSelectionList.PackEntry.showHoverOverlay port crates/horizon-client/src/pack_screen.rs::PackScreen::overlay overlay shown unless the pack is both fixed and required
134 TransferableSelectionList.PackEntry.keyboardSelection missing minor: no keyboard selection (see PackEntry.keyPressed)
135 TransferableSelectionList.PackEntry.handlePackSelection port crates/horizon-client/src/pack_screen.rs::PackScreen::entry_click gap: minor: keyboard path missing (keyboardSelection); icon click selects; an incompatible pack opens the confirmation (open_confirm) first
136 TransferableSelectionList.PackEntry.shouldTakeFocusAfterInteraction skip:ui focus after a click matters only for keyboard entry navigation, which Horizon does not have
137 CraftingRecipeBookComponent.isCraftingSlot missing minor: unsure: no crafting-slot check found in the recipe book code
138 CraftingRecipeBookComponent.fillGhostRecipe port crates/horizon-client/src/recipe_book.rs::Book::ghost crafting branch: shaped recipes placed by place_cells, shapeless in order; result set first
139 FurnaceRecipeBookComponent.fillGhostRecipe port crates/horizon-client/src/recipe_book.rs::Book::ghost furnace branch: ingredient, and the fuel only when the fuel slot is empty (fuel_empty)
+65
View File
@@ -0,0 +1,65 @@
GhostSlots.extractTooltip missing player: hovering a ghost ingredient or result in the crafting grid or furnace shows no item tooltip; the ghost draw has no tooltip call and draw_slot_tooltip reads only real slots
GhostSlots.GhostSlot.getItem port crates/horizon-client/src/recipe_book_screen.rs::ghost the stack cycles with index % items; empty ghost slots are dropped in Book::ghost
OverlayRecipeComponent.mouseClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click left click places the overlay's recipe; right click and outside clicks close the overlay
OverlayRecipeComponent.OverlayCraftingRecipeButton.calculateIngredientsPositions port crates/horizon-client/src/recipe_book_screen.rs::overlay_cells shaped recipes use the 3x3 grid cells, shapeless ones i % 3 and i / 3; empty ingredients are dropped
OverlayRecipeComponent.OverlayCraftingRecipeButton.getSprite port crates/horizon-client/src/recipe_book_screen.rs::overlay crafting_overlay sprite by craftable and hover
OverlayRecipeComponent.OverlayRecipeButton.createGridPos port crates/horizon-client/src/recipe_book_screen.rs::overlay cell at 3 + 7x, 3 + 7y inside the 24 px button
OverlayRecipeComponent.OverlayRecipeButton.extractWidgetRenderState port crates/horizon-client/src/recipe_book_screen.rs::overlay cells drawn as items at 0.375 scale, each cycling its stacks by index
OverlayRecipeComponent.OverlaySmeltingRecipeButton.getSprite port crates/horizon-client/src/recipe_book_screen.rs::overlay furnace_overlay sprites by craftable and hover
RecipeBookComponent.init inline crates/horizon-client/src/game/recipe_book.rs::Game::ensure_book the book and search box are built on first use; the open flag is Game::book_open and the views come from refresh_book_view
RecipeBookComponent.initVisuals inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view tabs, buttons and page are rebuilt when inventory, grid, filter, tab, search text or known recipes change; the search box is drawn by screen::draw
RecipeBookComponent.setVisible port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click the book button flips the open flag and sends the settings; closing clears the overlay; gap: minor: a server settings packet sets the flag without clearing the overlay or page
RecipeBookComponent.slotClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click a click on a grid, result or furnace slot clears the ghost recipe and the last placed recipe (is_book_slot)
RecipeBookComponent.selectMatchingRecipes inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view a recipe is selected when it fits the crafting grid; craftable comes from Book::can_craft against book_available
RecipeBookComponent.updateCollections port crates/horizon-client/src/game/recipe_book.rs::Game::build_view collections filtered by the search (Book::collection_matches) and by the craftable filter; callers reset the page on tab and filter changes
RecipeBookComponent.updateTabs inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view tab visibility; positions are in Game::tab_pos and the squeeze in Game::start_new_recipe_animations
RecipeBookComponent.tick port crates/horizon-client/src/game/recipe_book.rs::Game::draw_recipe_book advances the swap time and the squeezes; the inventory-changed refresh is the hash in refresh_book_view
RecipeBookComponent.extractTooltip port crates/horizon-client/src/game/recipe_book.rs::Game::draw_book_panel gap: player: no tooltip for ghost slots (GhostSlots.extractTooltip); the page's recipe tooltip is the ItemTooltip call
RecipeBookComponent.mouseClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click gap: player: in the narrow layout vanilla closes the book after placing a recipe (isOffsetNextToMainGUI is false); Horizon keeps it open
RecipeBookComponent.mouseDragged missing player: dragging across the recipe search box does not select text; EditBox::drag_to is used only by the title screen
RecipeBookComponent.onTabButtonPress port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click a tab click selects the tab and resets the page to 0
RecipeBookComponent.replaceSelected inline crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click sets recipe_ui.tab, so one tab is selected at a time
RecipeBookComponent.toggleFiltering port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click the craftable filter button flips the filter, sends the settings and resets the page
RecipeBookComponent.keyPressed port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_key search box keys and KeyT focus (Game::recipe_focus_search); gap: player: Enter and Space do not place the last clicked recipe (lastRecipe); gap: player: Escape does not close only the book in the narrow layout
RecipeBookComponent.charTyped port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_key typed text enters the search box from the key event; gap: minor: no separate char event, so no IME text
RecipeBookComponent.preeditUpdated missing minor: no IME composition in the recipe search box
RecipeBookComponent.capturesInput port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_search_focused true while the search box has focus
RecipeBookComponent.checkSearchStringUpdate inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view the search text is part of the view key, so a change rebuilds the buttons
RecipeBookComponent.pirateSpeechForThePeople missing minor: typing excitedze in the recipe search switches the game to pirate English (en_pt); Horizon has no language switch from the book
RecipeBookComponent.recipesUpdated inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view new or removed known recipes change client_version, which rebuilds the tabs and buttons
RecipeBookComponent.updateNarration skip:other screen-reader narration; Horizon has no narration output
RecipeBookPage.init inline crates/horizon-client/src/game/recipe_book.rs::Game::button_pos button places (5 per row, 25 px apart) are computed here; arrow places are fixed in recipe_book_click and screen::draw
RecipeBookPage.updateCollections inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view page count is div_ceil(20) of the buttons; the page is reset to 0 when it is past the end
RecipeBookPage.updateButtonsForPage port crates/horizon-client/src/game/recipe_book.rs::Game::draw_book_panel the page's buttons are skip(page * 20).take(20)
RecipeBookPage.updateArrowButtons port crates/horizon-client/src/recipe_book_screen.rs::draw arrows show when there is more than one page and the page is not the first or the last
RecipeBookPage.mouseClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click page arrows; right click opens the overlay when the button has more than one recipe; left click places
RecipeBookTabButton.extractContents port crates/horizon-client/src/recipe_book_screen.rs::draw tab sprite, the 2 px shift when selected, and the squeeze pose
RecipeBookTabButton.extractIcon port crates/horizon-client/src/recipe_book_screen.rs::draw one or two fake item icons at offsets 9, or 3 and 14, shifted 2 px when selected
RecipeBookTabButton.updateVisibility port crates/horizon-client/src/game/recipe_book.rs::Game::build_view a tab is shown when a collection of its category has a selected recipe
RecipeButton.extractWidgetRenderState port crates/horizon-client/src/recipe_book_screen.rs::draw sprite by craftable and by several recipes, squeeze pose, same-result item under the fake item
RecipeButton.getCurrentRecipe port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click the entry at swap_index % entries
RecipeButton.getTooltipText port crates/horizon-client/src/game/recipe_book.rs::Game::paint_book ItemTooltip: the stack's tooltip, then Right Click for More when there are several recipes
RecipeButton.updateWidgetNarration skip:other screen-reader narration; Horizon has no narration output
RecipeButton.isValidClickButton port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click left and right clicks only; a middle click does nothing here
RecipeButton.ResolvedEntry.selectItem port crates/horizon-client/src/recipe_book_screen.rs::display_stack the stack at offset % count; display_stack first picks the recipe from index % count
RecipeCollection.selectRecipes inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view selected when the recipe fits the crafting grid; craftable from Book::can_craft against the stock
RecipeCollection.getSelectedRecipes inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view entries kept per view: selected ones, and only craftable ones when filtering
AbstractReportScreen skip:service chat and skin abuse reporting screens; Horizon has no reporting
AbstractReportScreen.DiscardReportWarningScreen skip:service abuse report discard warning; Horizon has no reporting
ChatReportScreen skip:service chat abuse reporting screen; Horizon has no reporting
ChatSelectionLogFiller skip:service chat log filler for the report selection; Horizon has no reporting
ChatSelectionScreen skip:service chat message selection for a report; Horizon has no reporting
ChatSelectionScreen.ChatSelectionList skip:service chat message list of the report screen; Horizon has no reporting
ChatSelectionScreen.ChatSelectionList.DividerEntry skip:service divider row of the report chat list; Horizon has no reporting
ChatSelectionScreen.ChatSelectionList.MessageEntry skip:service message row of the report chat list; Horizon has no reporting
ChatSelectionScreen.ChatSelectionList.MessageHeadingEntry skip:service heading row of the report chat list; Horizon has no reporting
NameReportScreen skip:service player name abuse report screen; Horizon has no reporting
ReportPlayerScreen skip:service player abuse report screen; Horizon has no reporting
ReportReasonSelectionScreen skip:service abuse report reason screen; Horizon has no reporting
ReportReasonSelectionScreen.ReasonSelectionList skip:service reason list of the report screen; Horizon has no reporting
ReportReasonSelectionScreen.ReasonSelectionList.Entry skip:service reason row of the report screen; Horizon has no reporting
SkinReportScreen skip:service skin abuse report screen; Horizon has no reporting
PlayerEntry skip:service social list row with report, hide and status; Horizon has no social list
PlayerSocialManager skip:service Mojang social manager: block, friends and message hiding; Horizon has none of it
PresenceHandler skip:service online presence sharing with the service; Horizon has none
RemoteFriendListUpdateHandler skip:service friend list polling and toasts from the service; Horizon has no friend list (its relay is separate)
1 GhostSlots.extractTooltip missing player: hovering a ghost ingredient or result in the crafting grid or furnace shows no item tooltip; the ghost draw has no tooltip call and draw_slot_tooltip reads only real slots
2 GhostSlots.GhostSlot.getItem port crates/horizon-client/src/recipe_book_screen.rs::ghost the stack cycles with index % items; empty ghost slots are dropped in Book::ghost
3 OverlayRecipeComponent.mouseClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click left click places the overlay's recipe; right click and outside clicks close the overlay
4 OverlayRecipeComponent.OverlayCraftingRecipeButton.calculateIngredientsPositions port crates/horizon-client/src/recipe_book_screen.rs::overlay_cells shaped recipes use the 3x3 grid cells, shapeless ones i % 3 and i / 3; empty ingredients are dropped
5 OverlayRecipeComponent.OverlayCraftingRecipeButton.getSprite port crates/horizon-client/src/recipe_book_screen.rs::overlay crafting_overlay sprite by craftable and hover
6 OverlayRecipeComponent.OverlayRecipeButton.createGridPos port crates/horizon-client/src/recipe_book_screen.rs::overlay cell at 3 + 7x, 3 + 7y inside the 24 px button
7 OverlayRecipeComponent.OverlayRecipeButton.extractWidgetRenderState port crates/horizon-client/src/recipe_book_screen.rs::overlay cells drawn as items at 0.375 scale, each cycling its stacks by index
8 OverlayRecipeComponent.OverlaySmeltingRecipeButton.getSprite port crates/horizon-client/src/recipe_book_screen.rs::overlay furnace_overlay sprites by craftable and hover
9 RecipeBookComponent.init inline crates/horizon-client/src/game/recipe_book.rs::Game::ensure_book the book and search box are built on first use; the open flag is Game::book_open and the views come from refresh_book_view
10 RecipeBookComponent.initVisuals inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view tabs, buttons and page are rebuilt when inventory, grid, filter, tab, search text or known recipes change; the search box is drawn by screen::draw
11 RecipeBookComponent.setVisible port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click the book button flips the open flag and sends the settings; closing clears the overlay; gap: minor: a server settings packet sets the flag without clearing the overlay or page
12 RecipeBookComponent.slotClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click a click on a grid, result or furnace slot clears the ghost recipe and the last placed recipe (is_book_slot)
13 RecipeBookComponent.selectMatchingRecipes inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view a recipe is selected when it fits the crafting grid; craftable comes from Book::can_craft against book_available
14 RecipeBookComponent.updateCollections port crates/horizon-client/src/game/recipe_book.rs::Game::build_view collections filtered by the search (Book::collection_matches) and by the craftable filter; callers reset the page on tab and filter changes
15 RecipeBookComponent.updateTabs inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view tab visibility; positions are in Game::tab_pos and the squeeze in Game::start_new_recipe_animations
16 RecipeBookComponent.tick port crates/horizon-client/src/game/recipe_book.rs::Game::draw_recipe_book advances the swap time and the squeezes; the inventory-changed refresh is the hash in refresh_book_view
17 RecipeBookComponent.extractTooltip port crates/horizon-client/src/game/recipe_book.rs::Game::draw_book_panel gap: player: no tooltip for ghost slots (GhostSlots.extractTooltip); the page's recipe tooltip is the ItemTooltip call
18 RecipeBookComponent.mouseClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click gap: player: in the narrow layout vanilla closes the book after placing a recipe (isOffsetNextToMainGUI is false); Horizon keeps it open
19 RecipeBookComponent.mouseDragged missing player: dragging across the recipe search box does not select text; EditBox::drag_to is used only by the title screen
20 RecipeBookComponent.onTabButtonPress port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click a tab click selects the tab and resets the page to 0
21 RecipeBookComponent.replaceSelected inline crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click sets recipe_ui.tab, so one tab is selected at a time
22 RecipeBookComponent.toggleFiltering port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click the craftable filter button flips the filter, sends the settings and resets the page
23 RecipeBookComponent.keyPressed port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_key search box keys and KeyT focus (Game::recipe_focus_search); gap: player: Enter and Space do not place the last clicked recipe (lastRecipe); gap: player: Escape does not close only the book in the narrow layout
24 RecipeBookComponent.charTyped port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_key typed text enters the search box from the key event; gap: minor: no separate char event, so no IME text
25 RecipeBookComponent.preeditUpdated missing minor: no IME composition in the recipe search box
26 RecipeBookComponent.capturesInput port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_search_focused true while the search box has focus
27 RecipeBookComponent.checkSearchStringUpdate inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view the search text is part of the view key, so a change rebuilds the buttons
28 RecipeBookComponent.pirateSpeechForThePeople missing minor: typing excitedze in the recipe search switches the game to pirate English (en_pt); Horizon has no language switch from the book
29 RecipeBookComponent.recipesUpdated inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view new or removed known recipes change client_version, which rebuilds the tabs and buttons
30 RecipeBookComponent.updateNarration skip:other screen-reader narration; Horizon has no narration output
31 RecipeBookPage.init inline crates/horizon-client/src/game/recipe_book.rs::Game::button_pos button places (5 per row, 25 px apart) are computed here; arrow places are fixed in recipe_book_click and screen::draw
32 RecipeBookPage.updateCollections inline crates/horizon-client/src/game/recipe_book.rs::Game::refresh_book_view page count is div_ceil(20) of the buttons; the page is reset to 0 when it is past the end
33 RecipeBookPage.updateButtonsForPage port crates/horizon-client/src/game/recipe_book.rs::Game::draw_book_panel the page's buttons are skip(page * 20).take(20)
34 RecipeBookPage.updateArrowButtons port crates/horizon-client/src/recipe_book_screen.rs::draw arrows show when there is more than one page and the page is not the first or the last
35 RecipeBookPage.mouseClicked port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click page arrows; right click opens the overlay when the button has more than one recipe; left click places
36 RecipeBookTabButton.extractContents port crates/horizon-client/src/recipe_book_screen.rs::draw tab sprite, the 2 px shift when selected, and the squeeze pose
37 RecipeBookTabButton.extractIcon port crates/horizon-client/src/recipe_book_screen.rs::draw one or two fake item icons at offsets 9, or 3 and 14, shifted 2 px when selected
38 RecipeBookTabButton.updateVisibility port crates/horizon-client/src/game/recipe_book.rs::Game::build_view a tab is shown when a collection of its category has a selected recipe
39 RecipeButton.extractWidgetRenderState port crates/horizon-client/src/recipe_book_screen.rs::draw sprite by craftable and by several recipes, squeeze pose, same-result item under the fake item
40 RecipeButton.getCurrentRecipe port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click the entry at swap_index % entries
41 RecipeButton.getTooltipText port crates/horizon-client/src/game/recipe_book.rs::Game::paint_book ItemTooltip: the stack's tooltip, then Right Click for More when there are several recipes
42 RecipeButton.updateWidgetNarration skip:other screen-reader narration; Horizon has no narration output
43 RecipeButton.isValidClickButton port crates/horizon-client/src/game/recipe_book.rs::Game::recipe_book_click left and right clicks only; a middle click does nothing here
44 RecipeButton.ResolvedEntry.selectItem port crates/horizon-client/src/recipe_book_screen.rs::display_stack the stack at offset % count; display_stack first picks the recipe from index % count
45 RecipeCollection.selectRecipes inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view selected when the recipe fits the crafting grid; craftable from Book::can_craft against the stock
46 RecipeCollection.getSelectedRecipes inline crates/horizon-client/src/game/recipe_book.rs::Game::build_view entries kept per view: selected ones, and only craftable ones when filtering
47 AbstractReportScreen skip:service chat and skin abuse reporting screens; Horizon has no reporting
48 AbstractReportScreen.DiscardReportWarningScreen skip:service abuse report discard warning; Horizon has no reporting
49 ChatReportScreen skip:service chat abuse reporting screen; Horizon has no reporting
50 ChatSelectionLogFiller skip:service chat log filler for the report selection; Horizon has no reporting
51 ChatSelectionScreen skip:service chat message selection for a report; Horizon has no reporting
52 ChatSelectionScreen.ChatSelectionList skip:service chat message list of the report screen; Horizon has no reporting
53 ChatSelectionScreen.ChatSelectionList.DividerEntry skip:service divider row of the report chat list; Horizon has no reporting
54 ChatSelectionScreen.ChatSelectionList.MessageEntry skip:service message row of the report chat list; Horizon has no reporting
55 ChatSelectionScreen.ChatSelectionList.MessageHeadingEntry skip:service heading row of the report chat list; Horizon has no reporting
56 NameReportScreen skip:service player name abuse report screen; Horizon has no reporting
57 ReportPlayerScreen skip:service player abuse report screen; Horizon has no reporting
58 ReportReasonSelectionScreen skip:service abuse report reason screen; Horizon has no reporting
59 ReportReasonSelectionScreen.ReasonSelectionList skip:service reason list of the report screen; Horizon has no reporting
60 ReportReasonSelectionScreen.ReasonSelectionList.Entry skip:service reason row of the report screen; Horizon has no reporting
61 SkinReportScreen skip:service skin abuse report screen; Horizon has no reporting
62 PlayerEntry skip:service social list row with report, hide and status; Horizon has no social list
63 PlayerSocialManager skip:service Mojang social manager: block, friends and message hiding; Horizon has none of it
64 PresenceHandler skip:service online presence sharing with the service; Horizon has none
65 RemoteFriendListUpdateHandler skip:service friend list polling and toasts from the service; Horizon has no friend list (its relay is separate)
+150
View File
@@ -0,0 +1,150 @@
SocialInteractionsPlayerList.enableScissor skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.updatePlayerList skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.addOnlinePlayers skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.addSeenPlayers skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.makePlayerEntry skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.updatePlayersFromChatLog skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.collectProfilesFromChatLog skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.sortPlayerEntries skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.updateFiltersAndScroll skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.updateFilteredPlayers skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.addPlayer skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.removePlayer skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsPlayerList.refreshHasDraftReport skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
SocialInteractionsScreen.getNarrationMessage skip:ui narration text only
SocialInteractionsScreen.init skip:service social screen: tabs, search box, server label; no Horizon counterpart
SocialInteractionsScreen.repositionElements skip:ui layout only
SocialInteractionsScreen.showPage skip:service social: All, Hidden and Blocked tabs
SocialInteractionsScreen.extractBackground skip:service social screen background
SocialInteractionsScreen.extractRenderState skip:service social screen drawing
SocialInteractionsScreen.keyPressed skip:service social keybind closes the screen
SocialInteractionsScreen.checkSearchStringUpdate skip:service social search filter
SocialInteractionsScreen.updateServerLabel skip:service social server label
TelemetryEventWidget.buildContent skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
TelemetryEventWidget.setScrollAmount skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
TelemetryEventWidget.extractContents skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
TelemetryEventWidget.addEventType skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
TelemetryEventWidget.addEventTypeProperties skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
TelemetryEventWidget.ContentBuilder.addLine skip:service telemetry event list builder
TelemetryEventWidget.ContentBuilder.addHeader skip:service telemetry event list builder
TelemetryEventWidget.ContentBuilder.build skip:service telemetry event list builder
TelemetryInfoScreen.getNarrationMessage skip:ui narration text only
TelemetryInfoScreen.init skip:service telemetry info screen: privacy, feedback, opt-in, view data
TelemetryInfoScreen.repositionElements skip:ui layout only
AbstractGameRulesScreen.createAndConfigureSearchBox port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::build search box made with the screen; the search text filters through rows()
AbstractGameRulesScreen.init port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::build title, search box and rule list; Done and Cancel are handled by RulesScreen::click
AbstractGameRulesScreen.repositionElements skip:ui layout only
AbstractGameRulesScreen.filterGameRules port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::rows gap: minor: the scroll reset to the top is in RulesScreen::edited, not here
AbstractGameRulesScreen.BooleanRuleEntry.extractContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw draws the on/off button of a boolean rule
AbstractGameRulesScreen.CategoryRuleEntry.extractContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw draws the category header row
AbstractGameRulesScreen.GameRuleEntry.extractLabel port crates/horizon-client/src/game_rules_screen.rs::lines wraps the rule label to 170 px (one or two lines); drawn by RulesScreen::draw
AbstractGameRulesScreen.IntegerRuleEntry.extractContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw draws the 44 px number box; invalid text turns red in RulesScreen::edited
AbstractGameRulesScreen.RuleList.matchesFilter port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::rows matches id, name, category and description, as rows() does
AbstractGameRulesScreen.RuleList.extractWidgetRenderState port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw hovered rule's tooltip: id, description, default
ConfirmExperimentalFeaturesScreen.getNarrationMessage skip:ui narration text only
ConfirmExperimentalFeaturesScreen.init missing minor: confirmation for experimental packs; Horizon has no experimental packs, so it never opens
ConfirmExperimentalFeaturesScreen.repositionElements skip:ui layout only
ConfirmExperimentalFeaturesScreen.DetailsScreen.init missing minor: details of the experimental packs; no such screen in Horizon
ConfirmExperimentalFeaturesScreen.DetailsScreen.repositionElements skip:ui layout only
ConfirmExperimentalFeaturesScreen.DetailsScreen.PackListEntry.extractContent missing minor: draws an experimental pack id and its message; no such list in Horizon
ConfirmExperimentalFeaturesScreen.DetailsScreen.PackListEntry.getNarration skip:ui narration text only
CreateWorldScreen.openFresh port crates/horizon-client/src/title.rs::Title::new_world gap: minor: no resource load for datapack registries before the screen
CreateWorldScreen.testWorld skip:debug TW button, shown only when running in the IDE
CreateWorldScreen.openCreateWorldScreen skip:data loads datapack registries and world presets before the screen; Horizon reads data from tables
CreateWorldScreen.createFromExisting port crates/horizon-client/src/title/create_world.rs::WorldOptions::of_world gap: minor: no datapacks copied; name, seed and mode come from title.rs click_action arm 15
CreateWorldScreen.init port crates/horizon-client/src/title/create_world.rs::buttons tab bar and footer buttons; tabs are drawn by draw_create
CreateWorldScreen.repositionElements skip:ui layout only
CreateWorldScreen.onCreate port crates/horizon-client/src/title.rs::Title::create_action gap: minor: no experimental or deprecated-data warning before creating
CreateWorldScreen.createWorldAndCleanup inline crates/horizon-client/src/game/startup_menu.rs::StartupMenu::queue_entry gap: minor: temp datapack folder cleanup not modelled (no datapack copy)
CreateWorldScreen.createNewWorld port crates/horizon-client/src/game.rs::Game::open_world gap: minor: the folder is made in WorldRequest::prepare and no datapacks are copied in
CreateWorldScreen.createLevelSettings port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare name, mode, difficulty, hardcore and commands written with the new level; gap: minor: debug world (spectator, peaceful) not modelled
CreateWorldScreen.keyPressed missing player: Enter does not create the world; startup_menu title_key only confirms a focused rename box, so Enter on Create New World does nothing
CreateWorldScreen.extractRenderState port crates/horizon-client/src/title/create_world.rs::Title::draw_create draws the footer separator
CreateWorldScreen.extractMenuBackground port crates/horizon-client/src/title/create_world.rs::Title::draw_create draws the tab header strip and menu background
CreateWorldScreen.getOrCreateTempDataPackDir missing minor: temp folder for datapacks chosen at creation; Horizon has no create-time datapack picker
CreateWorldScreen.openExperimentsScreen missing minor: Experiments screen, only in non-stable builds; Horizon's button is disabled and has no screen
CreateWorldScreen.openDataPackSelectionScreen missing player: the Data Packs button is disabled on the More tab, so the datapack picker never opens
CreateWorldScreen.tryApplyNewDataPacks missing player: part of the greyed-out Data Packs picker; picked packs never reach the new world
CreateWorldScreen.applyNewPackConfig missing player: part of the greyed-out Data Packs picker; validates and applies the picked packs
CreateWorldScreen.createDefaultLoadConfig skip:data builds the datapack load config; Horizon loads no datapack set at creation
CreateWorldScreen.removeTempDataPackDir missing minor: cleanup of the temp datapack folder; no such folder in Horizon
CreateWorldScreen.copyBetweenDirs missing minor: copies datapack files into the temp folder; not in Horizon
CreateWorldScreen.createNewWorldDirectory port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare makes the world folder and writes level.dat; gap: minor: datapack files not copied in
CreateWorldScreen.createTempDataPackDirFromExistingWorld missing minor: Re-Create copies the old world's datapacks to a temp folder; Horizon's Re-Create does not
CreateWorldScreen.getDataPackSelectionSettings missing minor: temp datapack repository for the picker; no picker in Horizon
CreateWorldScreen.GameTab.<init> port crates/horizon-client/src/title/create_world.rs::buttons Game tab: name box, game mode, difficulty, allow cheats; gap: minor: vanilla's Experiments button sits on this tab in non-stable builds
CreateWorldScreen.MoreTab.openGameRulesScreen port crates/horizon-client/src/title.rs::Title::click_action Game Rules button (arm 29) over a copy of the rules, via RulesScreen::for_creation
CreateWorldScreen.WorldTab.<init> port crates/horizon-client/src/title/create_world.rs::buttons World tab: world type, customize, seed box (field 1), structures and bonus chest; gap: player: only Default and Superflat are offered, vanilla also offers Amplified and other presets
CreateWorldScreen.WorldTab.openPresetEditor port crates/horizon-client/src/title.rs::Title::click_action Customize button (arm 26) opens the Superflat editor (Mode::CreateFlat)
EditWorldScreen.create port crates/horizon-client/src/title.rs::Title::click_action Edit button (arm 13) builds the Edit mode from the list entry; gap: minor: no fixAndGetSummary (file fixing) on open
EditWorldScreen.<init> port crates/horizon-client/src/title.rs::Title::buttons Edit buttons: reset icon, open folder, backup, backups folder, Optimize, Save, Cancel; gap: player: Optimize World is drawn inactive and does nothing
EditWorldScreen.keyPressed port crates/horizon-client/src/game/startup_menu.rs::StartupMenu::title_key Enter confirms a focused name box through confirm_edit; Escape goes back through Title::escape
EditWorldScreen.onRename port crates/horizon-client/src/title/world_management.rs::rename saves the trimmed name to level.dat; Save (arm 35) and Enter reach it, then return to the list
EditWorldScreen.makeBackupAndShowToast port crates/horizon-client/src/title.rs::Title::start_backup gap: minor: the success or failure toast and the return to the list are in Title::poll_backup
EditWorldScreen.extractRenderState port crates/horizon-client/src/title.rs::Title::draw draws the centred Edit World title
ExperimentsScreen.init missing minor: Experiments screen, only in non-stable builds; Horizon has none
ExperimentsScreen.getHumanReadableTitle missing minor: translated title of an experiment pack; Horizon has no experiments
ExperimentsScreen.repositionElements skip:ui layout only
ExperimentsScreen.getNarrationMessage skip:ui narration text only
ExperimentsScreen.onDone missing minor: applies the chosen experiments to the pack repository; none in Horizon
FileFixerProgressScreen.init missing player: Cancel while a world's files are fixed; Horizon fixes them with no progress screen
FileFixerProgressScreen.extractRenderState missing player: part of the file-fix progress screen, which Horizon never shows
FileFixerProgressScreen.extractProgress missing player: part of the file-fix progress screen, which Horizon never shows
FileFixerProgressScreen.extractProgressBar missing player: part of the file-fix progress screen, which Horizon never shows
FileFixerProgressScreen.extractTypeText missing player: part of the file-fix progress screen, which Horizon never shows
FileFixerProgressScreen.extractTypeProgress missing player: part of the file-fix progress screen, which Horizon never shows
FileFixerProgressScreen.extractFileStats missing player: part of the file-fix progress screen, which Horizon never shows
FileFixerProgressScreen.extractScanning missing player: part of the file-fix progress screen, which Horizon never shows
FileFixerProgressScreen.extractFileFixerCount missing player: part of the file-fix progress screen, which Horizon never shows
OptimizeWorldScreen.create missing player: opens from Optimize World, which Horizon draws inactive on purpose; no optimizer exists
OptimizeWorldScreen.init missing player: Cancel of the optimize run; no optimize run exists
OptimizeWorldScreen.extractRenderState missing player: optimize progress (converted, skipped, per-dimension bars); not shown
SelectWorldScreen.init port crates/horizon-client/src/title.rs::Title::buttons Play, Create, Edit, Delete, Re-Create and Back; the list comes from list_worlds in return_to_list
SelectWorldScreen.createFooterButtons port crates/horizon-client/src/title.rs::Title::buttons footer buttons for the selected world: Play, Create, Edit, Delete, Re-Create, Back
SelectWorldScreen.createDebugWorldRecreateButton skip:debug DEBUG recreate button, only with SharedConstants.DEBUG_WORLD_RECREATE
SelectWorldScreen.repositionElements skip:ui layout only
SelectWorldScreen.updateButtonStatus port crates/horizon-client/src/title.rs::Title::buttons gap: minor: buttons enable from the selection only; canEdit, canRecreate, canDelete and the primary action are not modelled
SwitchGrid.Builder.addSwitch skip:java builder for the switch rows
SwitchGrid.Builder.build skip:java layout builder for the switch rows; Horizon draws them in create_world buttons
SwitchGrid.LabeledSwitch.refreshState port crates/horizon-client/src/title/create_world.rs::buttons switch value and enabled flag are read from WorldOptions every frame
SwitchGrid.SwitchBuilder.build port crates/horizon-client/src/title/create_world.rs::buttons structures (27) and bonus chest (28) switches with their enable rules; structures info is in create_tooltip
WorldCreationContext.withSettings skip:java immutable copy-with helper; Horizon's WorldOptions is a plain struct changed in place
WorldCreationContext.withOptions skip:java immutable copy-with helper; Horizon's WorldOptions is changed in place
WorldCreationContext.withDimensions skip:java immutable copy-with helper; Horizon has no dimension settings to copy
WorldCreationContext.validate skip:data validates datapack dimension generators; Horizon has no datapack dimensions
WorldCreationGameRulesScreen.initContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::for_creation creation rule list
WorldCreationUiState.<init> port crates/horizon-client/src/title.rs::Title::new_world gap: minor: builds the defaults only; Re-Create and preset starts are in click_action and WorldOptions::of_world
WorldCreationUiState.onChanged skip:ui listener refresh; Horizon's buttons read WorldOptions every frame, bonus chest via WorldOptions::bonus_chest
WorldCreationUiState.setName port crates/horizon-client/src/title.rs::Title::edit_field name text kept in Mode::Create.name; gap: minor: target folder is not recomputed per keystroke (create_tooltip and create_action compute it)
WorldCreationUiState.findResultFolder port crates/horizon-client/src/title.rs::Title::target_folder gap: minor: a blank name gives folder World, vanilla gives New World
WorldCreationUiState.isAllowCommands port crates/horizon-client/src/title/create_world.rs::WorldOptions::commands never in Hardcore, else on for Creative until toggled
WorldCreationUiState.setSeed port crates/horizon-client/src/title.rs::parse_seed gap: minor: seed text is stored in Mode::Create.seed and parsed in create_action
WorldCreationUiState.isBonusChest port crates/horizon-client/src/title/create_world.rs::WorldOptions::bonus_chest never in Hardcore
WorldCreationUiState.tryUpdateDataConfiguration skip:data datapack and feature-flag config; Horizon has neither at creation
WorldCreationUiState.setWorldType port crates/horizon-client/src/title/create_world.rs::WorldOptions::press Superflat toggle (id 25); gap: player: only Default and Superflat exist, vanilla's other presets such as Amplified are missing
WorldCreationUiState.getPresetEditor port crates/horizon-client/src/title/create_world.rs::buttons customize button enabled only for Superflat; the editor opens in title.rs click_action arm 26
WorldCreationUiState.updatePresetLists skip:data preset lists from the registry; Horizon has two built-in types
WorldCreationUiState.findPreset skip:data registry lookup
WorldCreationUiState.getNonEmptyList skip:data registry tag lookup
WorldCreationUiState.WorldTypeEntry.describePreset port crates/horizon-client/src/title/create_world.rs::buttons world type label: Default or Superflat
WorldCreationUiState.WorldTypeEntry.isAmplified missing player: there is no Amplified world type in Horizon, so its help tooltip never shows
WorldOpenFlows.createFreshLevel port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare writes a fresh level.dat; gap: minor: vanilla uses it for the debug recreate and the demo world; no datapack dimensions
WorldOpenFlows.createWorldAccess port crates/horizon-client/src/save.rs::SessionLock::acquire takes the world's session lock as the access; gap: minor: no symlink warning
WorldOpenFlows.createLevelFromExistingSettings port crates/horizon-client/src/game.rs::Game::open_world starts the world with the given settings; gap: minor: no datapack repository is built
WorldOpenFlows.loadWorldStem port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare reads level data and generator settings; gap: minor: no datapack load or safe-mode retry
WorldOpenFlows.recreateWorldData port crates/horizon-client/src/title/create_world.rs::WorldOptions::of_world reads the old world's settings for Re-Create; title.rs click_action arm 15 fills name, seed and mode
WorldOpenFlows.loadWorldDataBlocking port crates/horizon-client/src/game/world_loading.rs::WorldLoader::finish waits for the load worker and returns its result
WorldOpenFlows.askForBackup missing player: backup question before opening an old customized or experimental world; Horizon never asks
WorldOpenFlows.confirmWorldCreation skip:data lifecycle warning for experimental or deprecated data; Horizon has no such data
WorldOpenFlows.openWorld port crates/horizon-client/src/game/startup_menu.rs::StartupMenu::queue_entry Play (title.rs arm 10) queues the existing world for loading
WorldOpenFlows.openWorldLoadLevelData port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare gap: player: a level.dat that will not read (Level::read gives None) opens with a random seed and the folder name, not the Recover World Data screen
WorldOpenFlows.openWorldCheckVersionCompatibility missing player: no incompatible-version alert and no backup question; Horizon upgrades older worlds and opens newer ones without a check
WorldOpenFlows.createBackupAndOpenWorld missing player: no backup step before opening an old world; the backup button exists only in Edit World
WorldOpenFlows.upgradeAndOpenWorld port crates/horizon-client/src/save.rs::upgrade_older_world runs the file fixes and upgrades on open; gap: player: no file-fix progress screen and no upgrade done, join now confirm
WorldOpenFlows.tryFileFixAndReportErrors port crates/horizon-world/src/datafix/files.rs::fix_world_files runs the file fixer; gap: player: cancel, symlink and failed-cleanup alerts are not shown
WorldOpenFlows.openWorldLoadLevelStem port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare loads the level stem and generator; gap: minor: no safe-mode retry
WorldOpenFlows.openWorldCheckWorldStemCompatibility missing player: old-customized and experimental warning before the load; Horizon has none
WorldOpenFlows.openWorldLoadBundledResourcePack missing player: the world's own resources.zip is not applied on open; only an old-world file fix moves it into resourcepacks (datafix fix 4772)
WorldOpenFlows.openWorldCheckDiskSpace missing player: no low-disk-space warning before loading a world
WorldOpenFlows.loadBundledResourcePack missing player: pushes the world's resources.zip as a local pack; Horizon has no such path
WorldOpenFlows.promptBundledPackLoadFailure missing minor: prompt when the world's own pack fails to load; no such pack in Horizon
1 SocialInteractionsPlayerList.enableScissor skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
2 SocialInteractionsPlayerList.updatePlayerList skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
3 SocialInteractionsPlayerList.addOnlinePlayers skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
4 SocialInteractionsPlayerList.addSeenPlayers skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
5 SocialInteractionsPlayerList.makePlayerEntry skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
6 SocialInteractionsPlayerList.updatePlayersFromChatLog skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
7 SocialInteractionsPlayerList.collectProfilesFromChatLog skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
8 SocialInteractionsPlayerList.sortPlayerEntries skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
9 SocialInteractionsPlayerList.updateFiltersAndScroll skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
10 SocialInteractionsPlayerList.updateFilteredPlayers skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
11 SocialInteractionsPlayerList.addPlayer skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
12 SocialInteractionsPlayerList.removePlayer skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
13 SocialInteractionsPlayerList.refreshHasDraftReport skip:service social list (hidden and blocked players); Horizon has no Social Interactions screen
14 SocialInteractionsScreen.getNarrationMessage skip:ui narration text only
15 SocialInteractionsScreen.init skip:service social screen: tabs, search box, server label; no Horizon counterpart
16 SocialInteractionsScreen.repositionElements skip:ui layout only
17 SocialInteractionsScreen.showPage skip:service social: All, Hidden and Blocked tabs
18 SocialInteractionsScreen.extractBackground skip:service social screen background
19 SocialInteractionsScreen.extractRenderState skip:service social screen drawing
20 SocialInteractionsScreen.keyPressed skip:service social keybind closes the screen
21 SocialInteractionsScreen.checkSearchStringUpdate skip:service social search filter
22 SocialInteractionsScreen.updateServerLabel skip:service social server label
23 TelemetryEventWidget.buildContent skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
24 TelemetryEventWidget.setScrollAmount skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
25 TelemetryEventWidget.extractContents skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
26 TelemetryEventWidget.addEventType skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
27 TelemetryEventWidget.addEventTypeProperties skip:service telemetry event list (opt-in data); Horizon's telemetry.rs is perf and crash reporting
28 TelemetryEventWidget.ContentBuilder.addLine skip:service telemetry event list builder
29 TelemetryEventWidget.ContentBuilder.addHeader skip:service telemetry event list builder
30 TelemetryEventWidget.ContentBuilder.build skip:service telemetry event list builder
31 TelemetryInfoScreen.getNarrationMessage skip:ui narration text only
32 TelemetryInfoScreen.init skip:service telemetry info screen: privacy, feedback, opt-in, view data
33 TelemetryInfoScreen.repositionElements skip:ui layout only
34 AbstractGameRulesScreen.createAndConfigureSearchBox port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::build search box made with the screen; the search text filters through rows()
35 AbstractGameRulesScreen.init port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::build title, search box and rule list; Done and Cancel are handled by RulesScreen::click
36 AbstractGameRulesScreen.repositionElements skip:ui layout only
37 AbstractGameRulesScreen.filterGameRules port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::rows gap: minor: the scroll reset to the top is in RulesScreen::edited, not here
38 AbstractGameRulesScreen.BooleanRuleEntry.extractContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw draws the on/off button of a boolean rule
39 AbstractGameRulesScreen.CategoryRuleEntry.extractContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw draws the category header row
40 AbstractGameRulesScreen.GameRuleEntry.extractLabel port crates/horizon-client/src/game_rules_screen.rs::lines wraps the rule label to 170 px (one or two lines); drawn by RulesScreen::draw
41 AbstractGameRulesScreen.IntegerRuleEntry.extractContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw draws the 44 px number box; invalid text turns red in RulesScreen::edited
42 AbstractGameRulesScreen.RuleList.matchesFilter port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::rows matches id, name, category and description, as rows() does
43 AbstractGameRulesScreen.RuleList.extractWidgetRenderState port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::draw hovered rule's tooltip: id, description, default
44 ConfirmExperimentalFeaturesScreen.getNarrationMessage skip:ui narration text only
45 ConfirmExperimentalFeaturesScreen.init missing minor: confirmation for experimental packs; Horizon has no experimental packs, so it never opens
46 ConfirmExperimentalFeaturesScreen.repositionElements skip:ui layout only
47 ConfirmExperimentalFeaturesScreen.DetailsScreen.init missing minor: details of the experimental packs; no such screen in Horizon
48 ConfirmExperimentalFeaturesScreen.DetailsScreen.repositionElements skip:ui layout only
49 ConfirmExperimentalFeaturesScreen.DetailsScreen.PackListEntry.extractContent missing minor: draws an experimental pack id and its message; no such list in Horizon
50 ConfirmExperimentalFeaturesScreen.DetailsScreen.PackListEntry.getNarration skip:ui narration text only
51 CreateWorldScreen.openFresh port crates/horizon-client/src/title.rs::Title::new_world gap: minor: no resource load for datapack registries before the screen
52 CreateWorldScreen.testWorld skip:debug TW button, shown only when running in the IDE
53 CreateWorldScreen.openCreateWorldScreen skip:data loads datapack registries and world presets before the screen; Horizon reads data from tables
54 CreateWorldScreen.createFromExisting port crates/horizon-client/src/title/create_world.rs::WorldOptions::of_world gap: minor: no datapacks copied; name, seed and mode come from title.rs click_action arm 15
55 CreateWorldScreen.init port crates/horizon-client/src/title/create_world.rs::buttons tab bar and footer buttons; tabs are drawn by draw_create
56 CreateWorldScreen.repositionElements skip:ui layout only
57 CreateWorldScreen.onCreate port crates/horizon-client/src/title.rs::Title::create_action gap: minor: no experimental or deprecated-data warning before creating
58 CreateWorldScreen.createWorldAndCleanup inline crates/horizon-client/src/game/startup_menu.rs::StartupMenu::queue_entry gap: minor: temp datapack folder cleanup not modelled (no datapack copy)
59 CreateWorldScreen.createNewWorld port crates/horizon-client/src/game.rs::Game::open_world gap: minor: the folder is made in WorldRequest::prepare and no datapacks are copied in
60 CreateWorldScreen.createLevelSettings port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare name, mode, difficulty, hardcore and commands written with the new level; gap: minor: debug world (spectator, peaceful) not modelled
61 CreateWorldScreen.keyPressed missing player: Enter does not create the world; startup_menu title_key only confirms a focused rename box, so Enter on Create New World does nothing
62 CreateWorldScreen.extractRenderState port crates/horizon-client/src/title/create_world.rs::Title::draw_create draws the footer separator
63 CreateWorldScreen.extractMenuBackground port crates/horizon-client/src/title/create_world.rs::Title::draw_create draws the tab header strip and menu background
64 CreateWorldScreen.getOrCreateTempDataPackDir missing minor: temp folder for datapacks chosen at creation; Horizon has no create-time datapack picker
65 CreateWorldScreen.openExperimentsScreen missing minor: Experiments screen, only in non-stable builds; Horizon's button is disabled and has no screen
66 CreateWorldScreen.openDataPackSelectionScreen missing player: the Data Packs button is disabled on the More tab, so the datapack picker never opens
67 CreateWorldScreen.tryApplyNewDataPacks missing player: part of the greyed-out Data Packs picker; picked packs never reach the new world
68 CreateWorldScreen.applyNewPackConfig missing player: part of the greyed-out Data Packs picker; validates and applies the picked packs
69 CreateWorldScreen.createDefaultLoadConfig skip:data builds the datapack load config; Horizon loads no datapack set at creation
70 CreateWorldScreen.removeTempDataPackDir missing minor: cleanup of the temp datapack folder; no such folder in Horizon
71 CreateWorldScreen.copyBetweenDirs missing minor: copies datapack files into the temp folder; not in Horizon
72 CreateWorldScreen.createNewWorldDirectory port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare makes the world folder and writes level.dat; gap: minor: datapack files not copied in
73 CreateWorldScreen.createTempDataPackDirFromExistingWorld missing minor: Re-Create copies the old world's datapacks to a temp folder; Horizon's Re-Create does not
74 CreateWorldScreen.getDataPackSelectionSettings missing minor: temp datapack repository for the picker; no picker in Horizon
75 CreateWorldScreen.GameTab.<init> port crates/horizon-client/src/title/create_world.rs::buttons Game tab: name box, game mode, difficulty, allow cheats; gap: minor: vanilla's Experiments button sits on this tab in non-stable builds
76 CreateWorldScreen.MoreTab.openGameRulesScreen port crates/horizon-client/src/title.rs::Title::click_action Game Rules button (arm 29) over a copy of the rules, via RulesScreen::for_creation
77 CreateWorldScreen.WorldTab.<init> port crates/horizon-client/src/title/create_world.rs::buttons World tab: world type, customize, seed box (field 1), structures and bonus chest; gap: player: only Default and Superflat are offered, vanilla also offers Amplified and other presets
78 CreateWorldScreen.WorldTab.openPresetEditor port crates/horizon-client/src/title.rs::Title::click_action Customize button (arm 26) opens the Superflat editor (Mode::CreateFlat)
79 EditWorldScreen.create port crates/horizon-client/src/title.rs::Title::click_action Edit button (arm 13) builds the Edit mode from the list entry; gap: minor: no fixAndGetSummary (file fixing) on open
80 EditWorldScreen.<init> port crates/horizon-client/src/title.rs::Title::buttons Edit buttons: reset icon, open folder, backup, backups folder, Optimize, Save, Cancel; gap: player: Optimize World is drawn inactive and does nothing
81 EditWorldScreen.keyPressed port crates/horizon-client/src/game/startup_menu.rs::StartupMenu::title_key Enter confirms a focused name box through confirm_edit; Escape goes back through Title::escape
82 EditWorldScreen.onRename port crates/horizon-client/src/title/world_management.rs::rename saves the trimmed name to level.dat; Save (arm 35) and Enter reach it, then return to the list
83 EditWorldScreen.makeBackupAndShowToast port crates/horizon-client/src/title.rs::Title::start_backup gap: minor: the success or failure toast and the return to the list are in Title::poll_backup
84 EditWorldScreen.extractRenderState port crates/horizon-client/src/title.rs::Title::draw draws the centred Edit World title
85 ExperimentsScreen.init missing minor: Experiments screen, only in non-stable builds; Horizon has none
86 ExperimentsScreen.getHumanReadableTitle missing minor: translated title of an experiment pack; Horizon has no experiments
87 ExperimentsScreen.repositionElements skip:ui layout only
88 ExperimentsScreen.getNarrationMessage skip:ui narration text only
89 ExperimentsScreen.onDone missing minor: applies the chosen experiments to the pack repository; none in Horizon
90 FileFixerProgressScreen.init missing player: Cancel while a world's files are fixed; Horizon fixes them with no progress screen
91 FileFixerProgressScreen.extractRenderState missing player: part of the file-fix progress screen, which Horizon never shows
92 FileFixerProgressScreen.extractProgress missing player: part of the file-fix progress screen, which Horizon never shows
93 FileFixerProgressScreen.extractProgressBar missing player: part of the file-fix progress screen, which Horizon never shows
94 FileFixerProgressScreen.extractTypeText missing player: part of the file-fix progress screen, which Horizon never shows
95 FileFixerProgressScreen.extractTypeProgress missing player: part of the file-fix progress screen, which Horizon never shows
96 FileFixerProgressScreen.extractFileStats missing player: part of the file-fix progress screen, which Horizon never shows
97 FileFixerProgressScreen.extractScanning missing player: part of the file-fix progress screen, which Horizon never shows
98 FileFixerProgressScreen.extractFileFixerCount missing player: part of the file-fix progress screen, which Horizon never shows
99 OptimizeWorldScreen.create missing player: opens from Optimize World, which Horizon draws inactive on purpose; no optimizer exists
100 OptimizeWorldScreen.init missing player: Cancel of the optimize run; no optimize run exists
101 OptimizeWorldScreen.extractRenderState missing player: optimize progress (converted, skipped, per-dimension bars); not shown
102 SelectWorldScreen.init port crates/horizon-client/src/title.rs::Title::buttons Play, Create, Edit, Delete, Re-Create and Back; the list comes from list_worlds in return_to_list
103 SelectWorldScreen.createFooterButtons port crates/horizon-client/src/title.rs::Title::buttons footer buttons for the selected world: Play, Create, Edit, Delete, Re-Create, Back
104 SelectWorldScreen.createDebugWorldRecreateButton skip:debug DEBUG recreate button, only with SharedConstants.DEBUG_WORLD_RECREATE
105 SelectWorldScreen.repositionElements skip:ui layout only
106 SelectWorldScreen.updateButtonStatus port crates/horizon-client/src/title.rs::Title::buttons gap: minor: buttons enable from the selection only; canEdit, canRecreate, canDelete and the primary action are not modelled
107 SwitchGrid.Builder.addSwitch skip:java builder for the switch rows
108 SwitchGrid.Builder.build skip:java layout builder for the switch rows; Horizon draws them in create_world buttons
109 SwitchGrid.LabeledSwitch.refreshState port crates/horizon-client/src/title/create_world.rs::buttons switch value and enabled flag are read from WorldOptions every frame
110 SwitchGrid.SwitchBuilder.build port crates/horizon-client/src/title/create_world.rs::buttons structures (27) and bonus chest (28) switches with their enable rules; structures info is in create_tooltip
111 WorldCreationContext.withSettings skip:java immutable copy-with helper; Horizon's WorldOptions is a plain struct changed in place
112 WorldCreationContext.withOptions skip:java immutable copy-with helper; Horizon's WorldOptions is changed in place
113 WorldCreationContext.withDimensions skip:java immutable copy-with helper; Horizon has no dimension settings to copy
114 WorldCreationContext.validate skip:data validates datapack dimension generators; Horizon has no datapack dimensions
115 WorldCreationGameRulesScreen.initContent port crates/horizon-client/src/game_rules_screen.rs::RulesScreen::for_creation creation rule list
116 WorldCreationUiState.<init> port crates/horizon-client/src/title.rs::Title::new_world gap: minor: builds the defaults only; Re-Create and preset starts are in click_action and WorldOptions::of_world
117 WorldCreationUiState.onChanged skip:ui listener refresh; Horizon's buttons read WorldOptions every frame, bonus chest via WorldOptions::bonus_chest
118 WorldCreationUiState.setName port crates/horizon-client/src/title.rs::Title::edit_field name text kept in Mode::Create.name; gap: minor: target folder is not recomputed per keystroke (create_tooltip and create_action compute it)
119 WorldCreationUiState.findResultFolder port crates/horizon-client/src/title.rs::Title::target_folder gap: minor: a blank name gives folder World, vanilla gives New World
120 WorldCreationUiState.isAllowCommands port crates/horizon-client/src/title/create_world.rs::WorldOptions::commands never in Hardcore, else on for Creative until toggled
121 WorldCreationUiState.setSeed port crates/horizon-client/src/title.rs::parse_seed gap: minor: seed text is stored in Mode::Create.seed and parsed in create_action
122 WorldCreationUiState.isBonusChest port crates/horizon-client/src/title/create_world.rs::WorldOptions::bonus_chest never in Hardcore
123 WorldCreationUiState.tryUpdateDataConfiguration skip:data datapack and feature-flag config; Horizon has neither at creation
124 WorldCreationUiState.setWorldType port crates/horizon-client/src/title/create_world.rs::WorldOptions::press Superflat toggle (id 25); gap: player: only Default and Superflat exist, vanilla's other presets such as Amplified are missing
125 WorldCreationUiState.getPresetEditor port crates/horizon-client/src/title/create_world.rs::buttons customize button enabled only for Superflat; the editor opens in title.rs click_action arm 26
126 WorldCreationUiState.updatePresetLists skip:data preset lists from the registry; Horizon has two built-in types
127 WorldCreationUiState.findPreset skip:data registry lookup
128 WorldCreationUiState.getNonEmptyList skip:data registry tag lookup
129 WorldCreationUiState.WorldTypeEntry.describePreset port crates/horizon-client/src/title/create_world.rs::buttons world type label: Default or Superflat
130 WorldCreationUiState.WorldTypeEntry.isAmplified missing player: there is no Amplified world type in Horizon, so its help tooltip never shows
131 WorldOpenFlows.createFreshLevel port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare writes a fresh level.dat; gap: minor: vanilla uses it for the debug recreate and the demo world; no datapack dimensions
132 WorldOpenFlows.createWorldAccess port crates/horizon-client/src/save.rs::SessionLock::acquire takes the world's session lock as the access; gap: minor: no symlink warning
133 WorldOpenFlows.createLevelFromExistingSettings port crates/horizon-client/src/game.rs::Game::open_world starts the world with the given settings; gap: minor: no datapack repository is built
134 WorldOpenFlows.loadWorldStem port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare reads level data and generator settings; gap: minor: no datapack load or safe-mode retry
135 WorldOpenFlows.recreateWorldData port crates/horizon-client/src/title/create_world.rs::WorldOptions::of_world reads the old world's settings for Re-Create; title.rs click_action arm 15 fills name, seed and mode
136 WorldOpenFlows.loadWorldDataBlocking port crates/horizon-client/src/game/world_loading.rs::WorldLoader::finish waits for the load worker and returns its result
137 WorldOpenFlows.askForBackup missing player: backup question before opening an old customized or experimental world; Horizon never asks
138 WorldOpenFlows.confirmWorldCreation skip:data lifecycle warning for experimental or deprecated data; Horizon has no such data
139 WorldOpenFlows.openWorld port crates/horizon-client/src/game/startup_menu.rs::StartupMenu::queue_entry Play (title.rs arm 10) queues the existing world for loading
140 WorldOpenFlows.openWorldLoadLevelData port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare gap: player: a level.dat that will not read (Level::read gives None) opens with a random seed and the folder name, not the Recover World Data screen
141 WorldOpenFlows.openWorldCheckVersionCompatibility missing player: no incompatible-version alert and no backup question; Horizon upgrades older worlds and opens newer ones without a check
142 WorldOpenFlows.createBackupAndOpenWorld missing player: no backup step before opening an old world; the backup button exists only in Edit World
143 WorldOpenFlows.upgradeAndOpenWorld port crates/horizon-client/src/save.rs::upgrade_older_world runs the file fixes and upgrades on open; gap: player: no file-fix progress screen and no upgrade done, join now confirm
144 WorldOpenFlows.tryFileFixAndReportErrors port crates/horizon-world/src/datafix/files.rs::fix_world_files runs the file fixer; gap: player: cancel, symlink and failed-cleanup alerts are not shown
145 WorldOpenFlows.openWorldLoadLevelStem port crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare loads the level stem and generator; gap: minor: no safe-mode retry
146 WorldOpenFlows.openWorldCheckWorldStemCompatibility missing player: old-customized and experimental warning before the load; Horizon has none
147 WorldOpenFlows.openWorldLoadBundledResourcePack missing player: the world's own resources.zip is not applied on open; only an old-world file fix moves it into resourcepacks (datafix fix 4772)
148 WorldOpenFlows.openWorldCheckDiskSpace missing player: no low-disk-space warning before loading a world
149 WorldOpenFlows.loadBundledResourcePack missing player: pushes the world's resources.zip as a local pack; Horizon has no such path
150 WorldOpenFlows.promptBundledPackLoadFailure missing minor: prompt when the world's own pack fails to load; no such pack in Horizon
+32
View File
@@ -0,0 +1,32 @@
WorldSelectionList.pollLevelsIgnoreErrors inline crates/horizon-client/src/title.rs::list_worlds the list is read at once, so there is no pending state; a world whose level.dat fails to read is skipped; the upload filter is Realms only, not ported
WorldSelectionList.extractWidgetRenderState inline crates/horizon-client/src/title.rs::Title::draw the list comes from recent_worlds, re-read at most every 2 seconds, not on every frame
WorldSelectionList.handleNewLevels inline crates/horizon-client/src/title.rs::Title::enter_singleplayer no worlds opens the new-world screen; otherwise the list is Mode::Select; the Realms upload empty entry is skipped
WorldSelectionList.updateFilter inline crates/horizon-client/src/title.rs::Title::visible_worlds the search text is applied at each draw; there is no refill step
WorldSelectionList.loadLevels inline crates/horizon-client/src/title.rs::list_worlds gap: minor: an unreadable saves folder shows no worlds instead of the Unable to load error screen
WorldSelectionList.fillLevels inline crates/horizon-client/src/title.rs::Title::search_changed gap: minor: any search edit clears the selection; vanilla keeps it while its world still matches the filter
WorldSelectionList.filterAccepts port crates/horizon-client/src/title.rs::Title::matches_search
WorldSelectionList.handleLevelLoadFailure inline crates/horizon-client/src/title.rs::Title::failed gap: minor: list_worlds never fails, so the Unable to load screen never shows
WorldSelectionList.setSelected inline crates/horizon-client/src/title.rs::Title::click_action selection is set on the row click path and cleared by search edits
WorldSelectionList.getSelectedOpt inline crates/horizon-client/src/title.rs::Title::click_action the selected world is looked up by index in the Select arms
WorldSelectionList.updateWidgetNarration skip:ui narration only; Horizon has no narrator output
WorldSelectionList.Builder.build skip:java builder for the list constructor
WorldSelectionList.LoadingHeader.extractContent skip:other saves are read at once, so the loading header is never shown
WorldSelectionList.NoWorldsEntry.extractContent skip:service empty entry of the Realms world upload list only
WorldSelectionList.WorldListEntry.<init> port crates/horizon-client/src/title.rs::Title::draw gap: minor: no hover tooltip on overflowing name, folder or info text; the name, folder and date, and mode and version lines are drawn
WorldSelectionList.WorldListEntry.validateIconFile port crates/horizon-client/src/title.rs::Title::icon gap: minor: no symlink check; an icon that is not a decodable 64x64 image shows the unknown-server icon
WorldSelectionList.WorldListEntry.getNarration skip:ui narration text only; Horizon has no narrator output
WorldSelectionList.WorldListEntry.keyPressed missing player: Enter or Space on a selected world does nothing (title Enter only confirms a rename), so keyboard players cannot join from the list
WorldSelectionList.WorldListEntry.canInteract missing player: vanilla greys out locked and incompatible worlds and will not open them; Horizon's list_worlds has no lock or compatibility check, so Play opens every listed world
WorldSelectionList.WorldListEntry.joinWorld port crates/horizon-client/src/title.rs::Title::click_action gap: minor: no warning for a symlinked world before it opens
WorldSelectionList.WorldListEntry.deleteWorld port crates/horizon-client/src/title.rs::Title::click_action gap: minor: no progress screen while the world is deleted
WorldSelectionList.WorldListEntry.doDeleteWorld port crates/horizon-client/src/title.rs::Title::confirm_delete gap: minor: a failed delete shows the error screen, not the world delete failure toast
WorldSelectionList.WorldListEntry.editWorld port crates/horizon-client/src/title.rs::Title::click_action gap: minor: no data-read screen and no access-failure toast
WorldSelectionList.WorldListEntry.recreateWorld port crates/horizon-client/src/title.rs::Title::click_action gap: player: Re-Create takes the name, seed, mode and options into Create; no old-customized-world confirm, no datapack copy, and an unreadable world does nothing instead of showing an alert
WorldSelectionList.WorldListEntry.loadIcon port crates/horizon-client/src/title.rs::Title::icon icon.png is decoded at draw time and cached by modification time; gap: minor: no symlink check
PlayerMenuItem.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::Player arm: face at 2,2 size 12; vanilla ignores brightness, but only enabled players are listed, so no difference
SpectatorMenu.getItems inline crates/horizon-client/src/spectator_menu.rs::SpectatorGui::hotbar the nine-slot loop; each slot is read through SpectatorMenu::item
SpectatorPage.getItem inline crates/horizon-client/src/spectator_menu.rs::SpectatorMenu::item the page bounds check and the empty-slot fallback are folded into item
TeleportToPlayerMenuCategory.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::TeleportToPlayer arm: teleport_to_player sprite at 16x16 with brightness and alpha tint
TeleportToTeamMenuCategory.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::TeleportToTeam arm: teleport_to_team sprite at 16x16 with brightness and alpha tint
TeleportToTeamMenuCategory.TeamSelectionItem.create port crates/horizon-client/src/game/spectator.rs::Game::new_spectator_menu team members come from the tab list, non-spectators only; no members means no entry; the icon is a random member's skin
TeleportToTeamMenuCategory.TeamSelectionItem.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::Team arm: team colour fill at 1,1 to 15,15 scaled by brightness, then the face
1 WorldSelectionList.pollLevelsIgnoreErrors inline crates/horizon-client/src/title.rs::list_worlds the list is read at once, so there is no pending state; a world whose level.dat fails to read is skipped; the upload filter is Realms only, not ported
2 WorldSelectionList.extractWidgetRenderState inline crates/horizon-client/src/title.rs::Title::draw the list comes from recent_worlds, re-read at most every 2 seconds, not on every frame
3 WorldSelectionList.handleNewLevels inline crates/horizon-client/src/title.rs::Title::enter_singleplayer no worlds opens the new-world screen; otherwise the list is Mode::Select; the Realms upload empty entry is skipped
4 WorldSelectionList.updateFilter inline crates/horizon-client/src/title.rs::Title::visible_worlds the search text is applied at each draw; there is no refill step
5 WorldSelectionList.loadLevels inline crates/horizon-client/src/title.rs::list_worlds gap: minor: an unreadable saves folder shows no worlds instead of the Unable to load error screen
6 WorldSelectionList.fillLevels inline crates/horizon-client/src/title.rs::Title::search_changed gap: minor: any search edit clears the selection; vanilla keeps it while its world still matches the filter
7 WorldSelectionList.filterAccepts port crates/horizon-client/src/title.rs::Title::matches_search
8 WorldSelectionList.handleLevelLoadFailure inline crates/horizon-client/src/title.rs::Title::failed gap: minor: list_worlds never fails, so the Unable to load screen never shows
9 WorldSelectionList.setSelected inline crates/horizon-client/src/title.rs::Title::click_action selection is set on the row click path and cleared by search edits
10 WorldSelectionList.getSelectedOpt inline crates/horizon-client/src/title.rs::Title::click_action the selected world is looked up by index in the Select arms
11 WorldSelectionList.updateWidgetNarration skip:ui narration only; Horizon has no narrator output
12 WorldSelectionList.Builder.build skip:java builder for the list constructor
13 WorldSelectionList.LoadingHeader.extractContent skip:other saves are read at once, so the loading header is never shown
14 WorldSelectionList.NoWorldsEntry.extractContent skip:service empty entry of the Realms world upload list only
15 WorldSelectionList.WorldListEntry.<init> port crates/horizon-client/src/title.rs::Title::draw gap: minor: no hover tooltip on overflowing name, folder or info text; the name, folder and date, and mode and version lines are drawn
16 WorldSelectionList.WorldListEntry.validateIconFile port crates/horizon-client/src/title.rs::Title::icon gap: minor: no symlink check; an icon that is not a decodable 64x64 image shows the unknown-server icon
17 WorldSelectionList.WorldListEntry.getNarration skip:ui narration text only; Horizon has no narrator output
18 WorldSelectionList.WorldListEntry.keyPressed missing player: Enter or Space on a selected world does nothing (title Enter only confirms a rename), so keyboard players cannot join from the list
19 WorldSelectionList.WorldListEntry.canInteract missing player: vanilla greys out locked and incompatible worlds and will not open them; Horizon's list_worlds has no lock or compatibility check, so Play opens every listed world
20 WorldSelectionList.WorldListEntry.joinWorld port crates/horizon-client/src/title.rs::Title::click_action gap: minor: no warning for a symlinked world before it opens
21 WorldSelectionList.WorldListEntry.deleteWorld port crates/horizon-client/src/title.rs::Title::click_action gap: minor: no progress screen while the world is deleted
22 WorldSelectionList.WorldListEntry.doDeleteWorld port crates/horizon-client/src/title.rs::Title::confirm_delete gap: minor: a failed delete shows the error screen, not the world delete failure toast
23 WorldSelectionList.WorldListEntry.editWorld port crates/horizon-client/src/title.rs::Title::click_action gap: minor: no data-read screen and no access-failure toast
24 WorldSelectionList.WorldListEntry.recreateWorld port crates/horizon-client/src/title.rs::Title::click_action gap: player: Re-Create takes the name, seed, mode and options into Create; no old-customized-world confirm, no datapack copy, and an unreadable world does nothing instead of showing an alert
25 WorldSelectionList.WorldListEntry.loadIcon port crates/horizon-client/src/title.rs::Title::icon icon.png is decoded at draw time and cached by modification time; gap: minor: no symlink check
26 PlayerMenuItem.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::Player arm: face at 2,2 size 12; vanilla ignores brightness, but only enabled players are listed, so no difference
27 SpectatorMenu.getItems inline crates/horizon-client/src/spectator_menu.rs::SpectatorGui::hotbar the nine-slot loop; each slot is read through SpectatorMenu::item
28 SpectatorPage.getItem inline crates/horizon-client/src/spectator_menu.rs::SpectatorMenu::item the page bounds check and the empty-slot fallback are folded into item
29 TeleportToPlayerMenuCategory.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::TeleportToPlayer arm: teleport_to_player sprite at 16x16 with brightness and alpha tint
30 TeleportToTeamMenuCategory.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::TeleportToTeam arm: teleport_to_team sprite at 16x16 with brightness and alpha tint
31 TeleportToTeamMenuCategory.TeamSelectionItem.create port crates/horizon-client/src/game/spectator.rs::Game::new_spectator_menu team members come from the tab list, non-spectators only; no members means no entry; the icon is a random member's skin
32 TeleportToTeamMenuCategory.TeamSelectionItem.extractIcon port crates/horizon-client/src/spectator_menu.rs::icon Item::Team arm: team colour fill at 1,1 to 15,15 scaled by brightness, then the face
+11
View File
@@ -0,0 +1,11 @@
LocationPredicate.matches port crates/horizon-client/src/advancements.rs::location position, biome, structure, dimension and block checks for advancement criteria
MultiLineEditBox.setValue missing minor: unsure: book pages keep their own text in books.rs; no multi-line box setter found
TransferableSelectionList.PackEntry.mouseClicked inline crates/horizon-client/src/pack_screen.rs::PackScreen::click entry select, move arrows and double-click transfer
CompoundTag.getIntArray skip:java typed NBT accessor; Rust matches Tag::IntArray where it reads one
Component.toFlatList skip:java Horizon Text already keeps flat styled spans
Style.withColor port crates/horizon-client-core/src/text.rs::Text::with_color colour on the text span
MinecraftServer.halt port crates/horizon-client/src/game/integrated.rs::Integrated::halt stop the integrated server and wait for it
DedicatedPlayerList.loadOps inline crates/horizon-server-files/src/user_lists.rs::UserList::load ops.json through the shared user-list loader
ServerStatsCounter.toJson inline crates/horizon-client/src/game/stats.rs::Stats::write stats JSON built while saving
LevelChunk.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid fluid state of a block state
Fox.getBreedOffspring inline crates/horizon-client/src/game/creatures.rs::Game::breed the Fox arm: either parent's variant on a coin flip
1 LocationPredicate.matches port crates/horizon-client/src/advancements.rs::location position, biome, structure, dimension and block checks for advancement criteria
2 MultiLineEditBox.setValue missing minor: unsure: book pages keep their own text in books.rs; no multi-line box setter found
3 TransferableSelectionList.PackEntry.mouseClicked inline crates/horizon-client/src/pack_screen.rs::PackScreen::click entry select, move arrows and double-click transfer
4 CompoundTag.getIntArray skip:java typed NBT accessor; Rust matches Tag::IntArray where it reads one
5 Component.toFlatList skip:java Horizon Text already keeps flat styled spans
6 Style.withColor port crates/horizon-client-core/src/text.rs::Text::with_color colour on the text span
7 MinecraftServer.halt port crates/horizon-client/src/game/integrated.rs::Integrated::halt stop the integrated server and wait for it
8 DedicatedPlayerList.loadOps inline crates/horizon-server-files/src/user_lists.rs::UserList::load ops.json through the shared user-list loader
9 ServerStatsCounter.toJson inline crates/horizon-client/src/game/stats.rs::Stats::write stats JSON built while saving
10 LevelChunk.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid fluid state of a block state
11 Fox.getBreedOffspring inline crates/horizon-client/src/game/creatures.rs::Game::breed the Fox arm: either parent's variant on a coin flip
+144
View File
@@ -0,0 +1,144 @@
BlockDestructionProgress.equals skip:java identity by breaker id; Horizon keys cracks by breaker id in a map
BlockDestructionProgress.compareTo inline crates/horizon-client/src/game.rs::Game::cracks the furthest progress on a block wins (max per position)
ChunkGenerationTask.create inline crates/horizon-client/src/streaming.rs::Streaming::schedule_generation a Job::Generate per column; neighbours are held as protos, not a claimed holder cache
ChunkGenerationTask.runUntilWait inline crates/horizon-client/src/streaming.rs::Streaming::update stages advance as worker results come back, not by waiting on futures
ChunkGenerationTask.scheduleNextLayer inline crates/horizon-client/src/streaming.rs::Streaming::update next stage is generate, then decorate, then finish
ChunkGenerationTask.releaseClaim skip:other generation claims keep a chunk from unloading while a task reads it; Horizon checks protos out (None) to the job instead
ChunkGenerationTask.canLoadWithoutGeneration inline crates/horizon-client/src/streaming.rs::ChunkGenerator::load the worker tries a saved final chunk first, else makes (or restores) a proto
ChunkGenerationTask.getCenter skip:java accessor
ChunkGenerationTask.scheduleLayer inline crates/horizon-client/src/streaming.rs::Streaming::update one stage over the 3x3 neighbourhoods
ChunkGenerationTask.getRadiusForLayer inline crates/horizon-client/src/streaming.rs::Ranges::margins pyramid radius is two fixed margins (generate 3, decorate 2)
ChunkGenerationTask.scheduleChunkInLayer inline crates/horizon-client/src/streaming.rs::Streaming::update decorate and finish jobs are queued per column when the 3x3 is ready
ChunkGenerationTask.waitForScheduledLayer skip:java future bookkeeping
ChunkHolder.addSendDependency skip:java future combinator; chunks are only sent once lit (Hub::next_batch)
ChunkHolder.addSaveDependency skip:java future combinator; saving snapshots resident chunks directly
ChunkHolder.blockChanged port crates/horizon-client/src/world.rs::World::set pushes the position to block_log; block entity only changes go through Game::mark_block_entity_updated
ChunkHolder.sectionLightChanged port crates/horizon-client/src/streaming.rs::Streaming::mark_light_changes light_log bit per section; the unsaved mark is world.modified in the Lit result
ChunkHolder.hasChangesToBroadcast inline crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes both broadcast fns return early when their log is empty
ChunkHolder.broadcastBlockEntity port crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes BlockEntityData for changed positions with data the client shows
ChunkHolder.scheduleFullChunkPromotion inline crates/horizon-client/src/game.rs::Game::start_ticking_chunks ticking promotion unpacks saved ticks; ticket levels are read directly
ChunkHolder.demoteFullChunk skip:other only tells the status listener (loading map), which Horizon reads from Streaming::latest_status
ChunkHolder.updateFutures inline crates/horizon-client/src/game.rs::Game::start_ticking_chunks promotion to ticking on level change; demotion needs no work as Levels is read each tick
ChunkLevel.getStatusAroundFullChunk inline crates/horizon-client/src/streaming.rs::Ranges::margins fixed margins around the view instead of a status per distance
ChunkLevel.byStatus skip:other per status ticket levels; Horizon streams by distance (Ranges), not by level
ChunkLevel.fullStatus port crates/horizon-client/src/ticket_levels.rs::Levels::loaded_ticking 31 entity ticking, 32 block ticking, 33 full as predicates on Levels
ChunkLoadCounter.track inline crates/horizon-client/src/game.rs::Game::level_load_progress gap: minor: counts only the player's 7x7 chunks, not the initial forced or ticketed chunks
ChunkLoadCounter.pendingChunks inline crates/horizon-client/src/game.rs::Game::level_load_progress counts lit chunks in the 7x7 around the player
ChunkMap.<init> inline crates/horizon-client/src/streaming.rs::Streaming::new worker pool and generator; light engine and POI storage are set up elsewhere
ChunkMap.isChunkTracked inline crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes sent_chunks.contains: in the view and already sent
ChunkMap.getChunkQueueLevel inline crates/horizon-client/src/streaming.rs::Ranges::priority job priority is a distance from the centre, not a ticket level
ChunkMap.getChunkDebugData skip:debug chunk debug renderer text
ChunkMap.getChunkRangeFuture inline crates/horizon-client/src/streaming.rs::Streaming::update neighbourhood waits: 3x3 protos to decorate, 3x3 decorated to finish, 3x3 lit to mesh
ChunkMap.debugFuturesAndCreateReportedException skip:debug crash report detail
ChunkMap.prepareEntityTickingChunk inline crates/horizon-client/src/game/creatures.rs::Game::entity_ticking_area entity ticking comes from the ticket levels alone
ChunkMap.updateChunkScheduling inline crates/horizon-client/src/streaming.rs::Streaming::update columns past every kept range are unloaded in the update scan
ChunkMap.onLevelChange port crates/horizon-client/src/streaming.rs::Streaming::requeue queued jobs are ranked again when the centre moves
ChunkMap.close port crates/horizon-client/src/streaming.rs::Streaming::drop waits for saves in flight
ChunkMap.saveAllChunks port crates/horizon-client/src/game.rs::Game::save_level modified chunks only; wait picks the flushing form
ChunkMap.hasWork port crates/horizon-client/src/streaming.rs::Streaming::busy
ChunkMap.processUnloads inline crates/horizon-client/src/game.rs::Game::update_world unloaded columns: modified ones saved, entities and block entities dropped
ChunkMap.saveChunksEagerly inline crates/horizon-client/src/streaming.rs::Streaming::receive_generated gap: minor: fresh chunks are marked modified and written at the next autosave or unload, not within a few ticks
ChunkMap.scheduleUnload inline crates/horizon-client/src/game.rs::Game::update_world save if modified, unload entities and block entities
ChunkMap.promoteChunkMap skip:java copy of the holder map for the main thread; Horizon has one chunk map
ChunkMap.scheduleChunkLoad port crates/horizon-client/src/streaming.rs::ChunkGenerator::load the Generate job loads a saved final chunk, else a proto is made
ChunkMap.handleChunkLoadFailure inline crates/horizon-client/src/save.rs::SaveDir::load gap: minor: an unreadable record gives None and the column is generated again with no failure report
ChunkMap.createEmptyChunk inline crates/horizon-client/src/streaming.rs::Streaming::schedule_generation no saved data: the Generate job makes a fresh proto
ChunkMap.markPosition skip:java chunk type cache for isExistingChunkFull
ChunkMap.applyStep inline crates/horizon-client/src/streaming.rs::Streaming::new the worker loop runs the Generate, Decorate and Finish jobs
ChunkMap.scheduleGenerationTask port crates/horizon-client/src/streaming.rs::Streaming::schedule_generation
ChunkMap.runGenerationTask port crates/horizon-client/src/streaming.rs::Streaming::submit queues the job by distance
ChunkMap.onChunkReadyToSend inline crates/horizon-client/src/lan/hub.rs::Hub::next_batch queued columns are sent once lit
ChunkMap.prepareAccessibleChunk inline crates/horizon-client/src/streaming.rs::Streaming::update a column finishes once its 3x3 is decorated
ChunkMap.allChunksWithAtLeastStatus inline crates/horizon-client/src/game.rs::Game::level_load_progress only the loading screen asks: lit chunks around the player
ChunkMap.saveChunkIfNeeded inline crates/horizon-client/src/game.rs::Game::save_level the modified set stands for the unsaved flag; autosave every 6000 ticks
ChunkMap.isExistingChunkFull inline crates/horizon-client/src/streaming.rs::Streaming::save_checked_out protos exist only for columns not final, so one cannot overwrite a final chunk
ChunkMap.markChunkPendingToSend port crates/horizon-client/src/lan/hub.rs::requeue chunks entering the view join the guest's queue, closest first
ChunkMap.getChunkToSend inline crates/horizon-client/src/lan/hub.rs::Hub::next_batch only lit columns are taken
ChunkMap.dumpChunks skip:debug CSV chunk dump
ChunkMap.printFuture skip:debug
ChunkMap.readChunk port crates/horizon-client/src/save.rs::SaveDir::read_record reads the raw record (pending writes first); the upgrade is done when the world opens
ChunkMap.upgradeChunkTag inline crates/horizon-world/src/datafix/files.rs::upgrade_world_data chunks are upgraded all at once when an older world opens, not as each is read
ChunkMap.getChunkDataFixContextTag inline crates/horizon-world/src/datafix/files.rs::upgrade_world_data dimension id and generator type passed to update_chunk per dimension folder
ChunkMap.forEachBlockTickingChunk port crates/horizon-client/src/ticket_levels.rs::Levels::random_ticking simulation entity ticking and a ticking chunk
ChunkMap.anyPlayerCloseEnoughForSpawningInternal inline crates/horizon-client/src/game/natural_spawning.rs::Game::spawning_chunks any non-spectator within 128 blocks of the chunk centre
ChunkMap.playerIsCloseEnoughForSpawning port crates/horizon-client/src/game/natural_spawning.rs::close_enough_for_spawning
ChunkMap.playerIsCloseEnoughTo inline crates/horizon-client/src/game.rs::GameLevel::can_spread_fire_around the only caller (fire spread radius), spectators left out
ChunkMap.skipPlayer missing minor: spectators always hold chunk tickets; the spectators_generate_chunks rule is stored but never read, so with it off a spectator still loads and generates chunks
ChunkMap.updatePlayerStatus inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets tickets follow every player in the level each tick; a leaving guest's view is dropped by the hub
ChunkMap.updateChunkTracking port crates/horizon-client/src/lan/hub.rs::Hub::update_view a new centre or view distance (center reset) re-applies the view
ChunkMap.applyChunkTrackingView inline crates/horizon-client/src/lan/hub.rs::Hub::update_view SetChunkCacheCenter, then forget and queue the difference
ChunkMap.getPlayers inline crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes guests whose sent_chunks hold the column; the border form is in broadcast_light_changes
ChunkMap.removeEntity inline crates/horizon-client/src/lan/entity.rs::Entities::tick entities gone from the level leave each client in one RemoveEntities at the next tick
ChunkMap.sendToTrackingPlayers port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: goes to guests within a fixed distance, not to the clients that track the entity
ChunkMap.sendToTrackingPlayersFiltered port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: only an except-one-guest filter, same distance rule
ChunkMap.sendToTrackingPlayersAndSelf port crates/horizon-client/src/lan/containers.rs::Hub::critical_hit the one caller, the crit animation, goes to the attacker and the clients tracking them
ChunkMap.isTrackedByAnyPlayer skip:debug only the debug synchronizers ask
ChunkMap.forEachEntityTrackedBy skip:debug only the debug synchronizers ask
ChunkMap.resendBiomesForChunks missing minor: /fillbiome changes the host's biomes but sends guests no ChunksBiomes packet, so LAN guests keep the old biome tints until their chunks are sent again
ChunkMap.waitForLightBeforeSending inline crates/horizon-client/src/lan/hub.rs::Hub::next_batch columns are sent only once lit
ChunkMap.forEachReadyToSendChunk skip:debug only the debug synchronizers ask
ChunkMap.TrackedEntity.equals skip:java identity by entity id; Horizon keys tracked entities by id
ChunkMap.TrackedEntity.sendToTrackingPlayers port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: distance based, see ChunkMap.sendToTrackingPlayers
ChunkMap.TrackedEntity.sendToTrackingPlayersAndSelf port crates/horizon-client/src/lan/containers.rs::Hub::critical_hit the attacker plus clients tracking them
ChunkMap.TrackedEntity.sendToTrackingPlayersFiltered port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: only an except-one-guest filter
ChunkMap.TrackedEntity.broadcastRemoved inline crates/horizon-client/src/lan/entity.rs::Entities::tick removed entities leave each client in one RemoveEntities
ChunkMap.TrackedEntity.removePlayer inline crates/horizon-client/src/lan/entity.rs::Entities::tick the client's tracker loses entities out of range or level
ChunkMap.TrackedEntity.updatePlayers port crates/horizon-client/src/lan/entity.rs::Entities::tick gap: player: broadcastToPlayer is not checked, so a spectating player is tracked and shown to non-spectators as a normal player model
ChunkResult.error skip:java result type
ChunkTaskDispatcher.hasWork port crates/horizon-client/src/streaming.rs::Streaming::busy
ChunkTaskDispatcher.onLevelChange port crates/horizon-client/src/streaming.rs::Streaming::requeue
ChunkTaskDispatcher.release missing minor: queued jobs of a column that lost its ticket are not cancelled; their results are dropped on arrival (Done::Proto range check)
ChunkTaskDispatcher.submit port crates/horizon-client/src/streaming.rs::Streaming::submit
ChunkTaskDispatcher.pollTask inline crates/horizon-client/src/streaming.rs::Streaming::new each worker pops the most urgent job
ChunkTaskDispatcher.scheduleForExecution inline crates/horizon-client/src/streaming.rs::Streaming::new the worker runs the job it popped
ChunkTaskPriorityQueue.resortChunkTasks port crates/horizon-client/src/streaming.rs::rank_again
ChunkTaskPriorityQueue.release missing minor: no per column release; queued jobs stay queued until run
ChunkTaskPriorityQueue.pop inline crates/horizon-client/src/streaming.rs::Streaming::new BinaryHeap pop in the worker loop
ChunkTracker.checkNeighborsAfterUpdate inline crates/horizon-client/src/ticket_levels.rs::compute closed form: ticket level plus Chebyshev distance, rebuilt when sources change
ChunkTracker.getComputedLevel inline crates/horizon-client/src/ticket_levels.rs::compute lowest ticket level plus distance, per cell
ChunkTracker.computeLevelFromNeighbor inline crates/horizon-client/src/ticket_levels.rs::compute one level per chunk of distance
ChunkTrackingView.difference inline crates/horizon-client/src/lan/hub.rs::Hub::update_view forget what left (scan of sent chunks), queue what entered (requeue)
ChunkTrackingView.isWithinDistance port crates/horizon-client/src/lan/hub.rs::tracked buffer 2 form; the buffer 1 form is streaming.rs in_view_distance
ChunkTrackingView.Positioned.squareIntersects skip:java optimisation that picks a box scan over a full enumeration
ChunkTrackingView.Positioned.contains port crates/horizon-client/src/lan/hub.rs::tracked
ChunkTrackingView.Positioned.forEach inline crates/horizon-client/src/lan/hub.rs::requeue loops the view's square around the centre
ColumnPos.asLong skip:java key packing
DemoMode missing minor: no demo mode: no demo timer, intro hints or five day limit (the dedicated server's --demo argument is accepted and ignored)
DistanceManager.runAllUpdates port crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update levels rebuilt when sources change
DistanceManager.addPlayer inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets players are tickets sources each tick
DistanceManager.removePlayer inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets a player gone from the level drops out of the sources
DistanceManager.getChunkLevel port crates/horizon-client/src/ticket_levels.rs::Levels::get loading and simulation level as a pair
DistanceManager.updateSimulationDistance inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets simulation_distance read from settings into Sources
DistanceManager.hasPlayersNearby inline crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::players_near the 8 chunk gate; the 5 chunk shortcut is skipped
DistanceManager.forEachEntityTickingChunk inline crates/horizon-client/src/ticket_levels.rs::Levels::random_ticking the simulation half of the random tick test
DistanceManager.FixedPlayerDistanceChunkTracker.setLevel inline crates/horizon-client/src/ticket_levels.rs::compute cells are filled by compute
DistanceManager.FixedPlayerDistanceChunkTracker.havePlayer inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets players' chunks are the sources
DistanceManager.PlayerTicketTracker.onLevelChange inline crates/horizon-client/src/ticket_levels.rs::compute loading level 31 plus distance beyond the view; no throttle of 4 loads at a time
DistanceManager.PlayerTicketTracker.updateViewDistance inline crates/horizon-client/src/ticket_levels.rs::reach view distance sets how far the loading levels reach
DistanceManager.PlayerTicketTracker.runAllUpdates inline crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update
GenerationChunkHolder.scheduleChunkGenerationTask inline crates/horizon-client/src/streaming.rs::Streaming::schedule_generation the scan picks the columns that need a job
GenerationChunkHolder.applyStep inline crates/horizon-client/src/streaming.rs::Streaming::update queues the Decorate and Finish jobs
GenerationChunkHolder.updateHighestAllowedStatus inline crates/horizon-client/src/streaming.rs::Ranges::requested how far a column may be generated follows the ranges
GenerationChunkHolder.replaceProtoChunk inline crates/horizon-client/src/streaming.rs::Streaming::receive_generated the proto becomes the final column
GenerationChunkHolder.rescheduleChunkTask inline crates/horizon-client/src/streaming.rs::GenerationScan::candidates wanted columns are scanned again when ranges change
GenerationChunkHolder.getOrCreateFuture skip:java per status future
GenerationChunkHolder.failAndClearPendingFuturesBetween skip:java future bookkeeping
GenerationChunkHolder.failAndClearPendingFuture skip:java future bookkeeping
GenerationChunkHolder.completeFuture skip:java future bookkeeping
GenerationChunkHolder.findHighestStatusWithPendingFuture skip:java future bookkeeping
GenerationChunkHolder.acquireStatusBump skip:java future bookkeeping
GenerationChunkHolder.isStatusDisallowed inline crates/horizon-client/src/streaming.rs::Ranges::requested
GenerationChunkHolder.increaseGenerationRefCount skip:other keeps a chunk from saving or unloading under a task; Horizon checks protos out to the job instead
GenerationChunkHolder.decreaseGenerationRefCount skip:other see increaseGenerationRefCount
GenerationChunkHolder.getChunkIfPresentUnchecked skip:java future lookup; Horizon reads protos and world.chunks
GenerationChunkHolder.getLatestChunk skip:java future lookup; Horizon reads protos and world.chunks
GenerationChunkHolder.getPersistedStatus skip:other Horizon tells proto and final apart by type (SavedProto or Chunk)
GenerationChunkHolder.getAllFutures skip:debug
GenerationChunkHolder.getLatestStatus port crates/horizon-client/src/streaming.rs::Streaming::latest_status furthest step reached, for the loading map
LoadingChunkTracker.getLevel port crates/horizon-client/src/ticket_levels.rs::Levels::get the loading half of the pair
LoadingChunkTracker.setLevel inline crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update levels are rebuilt when sources change
PlayerSpawnFinder.scheduleNext port crates/horizon-client/src/world_spawn.rs::PlayerSpawnFinder::next_candidate coprime stride order, then the suggestion
PlayerSpawnFinder.scheduleCandidate port crates/horizon-client/src/game/initial_spawn.rs::Game::search_spawn gap: minor: the in-frame path waits for the candidate's chunk, but a server tick (LAN, dedicated) passes over candidates in unloaded chunks, so a new guest can stand on another spot of the radius
SectionTracker.checkNeighborsAfterUpdate inline crates/horizon-client/src/game/raids.rs::sections_to_village its only subclass is the POI village distance: Chebyshev distance in sections, 7 when farther than 6
SectionTracker.getComputedLevel inline crates/horizon-client/src/game/raids.rs::sections_to_village
SectionTracker.computeLevelFromNeighbor inline crates/horizon-client/src/game/raids.rs::sections_to_village
1 BlockDestructionProgress.equals skip:java identity by breaker id; Horizon keys cracks by breaker id in a map
2 BlockDestructionProgress.compareTo inline crates/horizon-client/src/game.rs::Game::cracks the furthest progress on a block wins (max per position)
3 ChunkGenerationTask.create inline crates/horizon-client/src/streaming.rs::Streaming::schedule_generation a Job::Generate per column; neighbours are held as protos, not a claimed holder cache
4 ChunkGenerationTask.runUntilWait inline crates/horizon-client/src/streaming.rs::Streaming::update stages advance as worker results come back, not by waiting on futures
5 ChunkGenerationTask.scheduleNextLayer inline crates/horizon-client/src/streaming.rs::Streaming::update next stage is generate, then decorate, then finish
6 ChunkGenerationTask.releaseClaim skip:other generation claims keep a chunk from unloading while a task reads it; Horizon checks protos out (None) to the job instead
7 ChunkGenerationTask.canLoadWithoutGeneration inline crates/horizon-client/src/streaming.rs::ChunkGenerator::load the worker tries a saved final chunk first, else makes (or restores) a proto
8 ChunkGenerationTask.getCenter skip:java accessor
9 ChunkGenerationTask.scheduleLayer inline crates/horizon-client/src/streaming.rs::Streaming::update one stage over the 3x3 neighbourhoods
10 ChunkGenerationTask.getRadiusForLayer inline crates/horizon-client/src/streaming.rs::Ranges::margins pyramid radius is two fixed margins (generate 3, decorate 2)
11 ChunkGenerationTask.scheduleChunkInLayer inline crates/horizon-client/src/streaming.rs::Streaming::update decorate and finish jobs are queued per column when the 3x3 is ready
12 ChunkGenerationTask.waitForScheduledLayer skip:java future bookkeeping
13 ChunkHolder.addSendDependency skip:java future combinator; chunks are only sent once lit (Hub::next_batch)
14 ChunkHolder.addSaveDependency skip:java future combinator; saving snapshots resident chunks directly
15 ChunkHolder.blockChanged port crates/horizon-client/src/world.rs::World::set pushes the position to block_log; block entity only changes go through Game::mark_block_entity_updated
16 ChunkHolder.sectionLightChanged port crates/horizon-client/src/streaming.rs::Streaming::mark_light_changes light_log bit per section; the unsaved mark is world.modified in the Lit result
17 ChunkHolder.hasChangesToBroadcast inline crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes both broadcast fns return early when their log is empty
18 ChunkHolder.broadcastBlockEntity port crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes BlockEntityData for changed positions with data the client shows
19 ChunkHolder.scheduleFullChunkPromotion inline crates/horizon-client/src/game.rs::Game::start_ticking_chunks ticking promotion unpacks saved ticks; ticket levels are read directly
20 ChunkHolder.demoteFullChunk skip:other only tells the status listener (loading map), which Horizon reads from Streaming::latest_status
21 ChunkHolder.updateFutures inline crates/horizon-client/src/game.rs::Game::start_ticking_chunks promotion to ticking on level change; demotion needs no work as Levels is read each tick
22 ChunkLevel.getStatusAroundFullChunk inline crates/horizon-client/src/streaming.rs::Ranges::margins fixed margins around the view instead of a status per distance
23 ChunkLevel.byStatus skip:other per status ticket levels; Horizon streams by distance (Ranges), not by level
24 ChunkLevel.fullStatus port crates/horizon-client/src/ticket_levels.rs::Levels::loaded_ticking 31 entity ticking, 32 block ticking, 33 full as predicates on Levels
25 ChunkLoadCounter.track inline crates/horizon-client/src/game.rs::Game::level_load_progress gap: minor: counts only the player's 7x7 chunks, not the initial forced or ticketed chunks
26 ChunkLoadCounter.pendingChunks inline crates/horizon-client/src/game.rs::Game::level_load_progress counts lit chunks in the 7x7 around the player
27 ChunkMap.<init> inline crates/horizon-client/src/streaming.rs::Streaming::new worker pool and generator; light engine and POI storage are set up elsewhere
28 ChunkMap.isChunkTracked inline crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes sent_chunks.contains: in the view and already sent
29 ChunkMap.getChunkQueueLevel inline crates/horizon-client/src/streaming.rs::Ranges::priority job priority is a distance from the centre, not a ticket level
30 ChunkMap.getChunkDebugData skip:debug chunk debug renderer text
31 ChunkMap.getChunkRangeFuture inline crates/horizon-client/src/streaming.rs::Streaming::update neighbourhood waits: 3x3 protos to decorate, 3x3 decorated to finish, 3x3 lit to mesh
32 ChunkMap.debugFuturesAndCreateReportedException skip:debug crash report detail
33 ChunkMap.prepareEntityTickingChunk inline crates/horizon-client/src/game/creatures.rs::Game::entity_ticking_area entity ticking comes from the ticket levels alone
34 ChunkMap.updateChunkScheduling inline crates/horizon-client/src/streaming.rs::Streaming::update columns past every kept range are unloaded in the update scan
35 ChunkMap.onLevelChange port crates/horizon-client/src/streaming.rs::Streaming::requeue queued jobs are ranked again when the centre moves
36 ChunkMap.close port crates/horizon-client/src/streaming.rs::Streaming::drop waits for saves in flight
37 ChunkMap.saveAllChunks port crates/horizon-client/src/game.rs::Game::save_level modified chunks only; wait picks the flushing form
38 ChunkMap.hasWork port crates/horizon-client/src/streaming.rs::Streaming::busy
39 ChunkMap.processUnloads inline crates/horizon-client/src/game.rs::Game::update_world unloaded columns: modified ones saved, entities and block entities dropped
40 ChunkMap.saveChunksEagerly inline crates/horizon-client/src/streaming.rs::Streaming::receive_generated gap: minor: fresh chunks are marked modified and written at the next autosave or unload, not within a few ticks
41 ChunkMap.scheduleUnload inline crates/horizon-client/src/game.rs::Game::update_world save if modified, unload entities and block entities
42 ChunkMap.promoteChunkMap skip:java copy of the holder map for the main thread; Horizon has one chunk map
43 ChunkMap.scheduleChunkLoad port crates/horizon-client/src/streaming.rs::ChunkGenerator::load the Generate job loads a saved final chunk, else a proto is made
44 ChunkMap.handleChunkLoadFailure inline crates/horizon-client/src/save.rs::SaveDir::load gap: minor: an unreadable record gives None and the column is generated again with no failure report
45 ChunkMap.createEmptyChunk inline crates/horizon-client/src/streaming.rs::Streaming::schedule_generation no saved data: the Generate job makes a fresh proto
46 ChunkMap.markPosition skip:java chunk type cache for isExistingChunkFull
47 ChunkMap.applyStep inline crates/horizon-client/src/streaming.rs::Streaming::new the worker loop runs the Generate, Decorate and Finish jobs
48 ChunkMap.scheduleGenerationTask port crates/horizon-client/src/streaming.rs::Streaming::schedule_generation
49 ChunkMap.runGenerationTask port crates/horizon-client/src/streaming.rs::Streaming::submit queues the job by distance
50 ChunkMap.onChunkReadyToSend inline crates/horizon-client/src/lan/hub.rs::Hub::next_batch queued columns are sent once lit
51 ChunkMap.prepareAccessibleChunk inline crates/horizon-client/src/streaming.rs::Streaming::update a column finishes once its 3x3 is decorated
52 ChunkMap.allChunksWithAtLeastStatus inline crates/horizon-client/src/game.rs::Game::level_load_progress only the loading screen asks: lit chunks around the player
53 ChunkMap.saveChunkIfNeeded inline crates/horizon-client/src/game.rs::Game::save_level the modified set stands for the unsaved flag; autosave every 6000 ticks
54 ChunkMap.isExistingChunkFull inline crates/horizon-client/src/streaming.rs::Streaming::save_checked_out protos exist only for columns not final, so one cannot overwrite a final chunk
55 ChunkMap.markChunkPendingToSend port crates/horizon-client/src/lan/hub.rs::requeue chunks entering the view join the guest's queue, closest first
56 ChunkMap.getChunkToSend inline crates/horizon-client/src/lan/hub.rs::Hub::next_batch only lit columns are taken
57 ChunkMap.dumpChunks skip:debug CSV chunk dump
58 ChunkMap.printFuture skip:debug
59 ChunkMap.readChunk port crates/horizon-client/src/save.rs::SaveDir::read_record reads the raw record (pending writes first); the upgrade is done when the world opens
60 ChunkMap.upgradeChunkTag inline crates/horizon-world/src/datafix/files.rs::upgrade_world_data chunks are upgraded all at once when an older world opens, not as each is read
61 ChunkMap.getChunkDataFixContextTag inline crates/horizon-world/src/datafix/files.rs::upgrade_world_data dimension id and generator type passed to update_chunk per dimension folder
62 ChunkMap.forEachBlockTickingChunk port crates/horizon-client/src/ticket_levels.rs::Levels::random_ticking simulation entity ticking and a ticking chunk
63 ChunkMap.anyPlayerCloseEnoughForSpawningInternal inline crates/horizon-client/src/game/natural_spawning.rs::Game::spawning_chunks any non-spectator within 128 blocks of the chunk centre
64 ChunkMap.playerIsCloseEnoughForSpawning port crates/horizon-client/src/game/natural_spawning.rs::close_enough_for_spawning
65 ChunkMap.playerIsCloseEnoughTo inline crates/horizon-client/src/game.rs::GameLevel::can_spread_fire_around the only caller (fire spread radius), spectators left out
66 ChunkMap.skipPlayer missing minor: spectators always hold chunk tickets; the spectators_generate_chunks rule is stored but never read, so with it off a spectator still loads and generates chunks
67 ChunkMap.updatePlayerStatus inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets tickets follow every player in the level each tick; a leaving guest's view is dropped by the hub
68 ChunkMap.updateChunkTracking port crates/horizon-client/src/lan/hub.rs::Hub::update_view a new centre or view distance (center reset) re-applies the view
69 ChunkMap.applyChunkTrackingView inline crates/horizon-client/src/lan/hub.rs::Hub::update_view SetChunkCacheCenter, then forget and queue the difference
70 ChunkMap.getPlayers inline crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes guests whose sent_chunks hold the column; the border form is in broadcast_light_changes
71 ChunkMap.removeEntity inline crates/horizon-client/src/lan/entity.rs::Entities::tick entities gone from the level leave each client in one RemoveEntities at the next tick
72 ChunkMap.sendToTrackingPlayers port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: goes to guests within a fixed distance, not to the clients that track the entity
73 ChunkMap.sendToTrackingPlayersFiltered port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: only an except-one-guest filter, same distance rule
74 ChunkMap.sendToTrackingPlayersAndSelf port crates/horizon-client/src/lan/containers.rs::Hub::critical_hit the one caller, the crit animation, goes to the attacker and the clients tracking them
75 ChunkMap.isTrackedByAnyPlayer skip:debug only the debug synchronizers ask
76 ChunkMap.forEachEntityTrackedBy skip:debug only the debug synchronizers ask
77 ChunkMap.resendBiomesForChunks missing minor: /fillbiome changes the host's biomes but sends guests no ChunksBiomes packet, so LAN guests keep the old biome tints until their chunks are sent again
78 ChunkMap.waitForLightBeforeSending inline crates/horizon-client/src/lan/hub.rs::Hub::next_batch columns are sent only once lit
79 ChunkMap.forEachReadyToSendChunk skip:debug only the debug synchronizers ask
80 ChunkMap.TrackedEntity.equals skip:java identity by entity id; Horizon keys tracked entities by id
81 ChunkMap.TrackedEntity.sendToTrackingPlayers port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: distance based, see ChunkMap.sendToTrackingPlayers
82 ChunkMap.TrackedEntity.sendToTrackingPlayersAndSelf port crates/horizon-client/src/lan/containers.rs::Hub::critical_hit the attacker plus clients tracking them
83 ChunkMap.TrackedEntity.sendToTrackingPlayersFiltered port crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near gap: minor: only an except-one-guest filter
84 ChunkMap.TrackedEntity.broadcastRemoved inline crates/horizon-client/src/lan/entity.rs::Entities::tick removed entities leave each client in one RemoveEntities
85 ChunkMap.TrackedEntity.removePlayer inline crates/horizon-client/src/lan/entity.rs::Entities::tick the client's tracker loses entities out of range or level
86 ChunkMap.TrackedEntity.updatePlayers port crates/horizon-client/src/lan/entity.rs::Entities::tick gap: player: broadcastToPlayer is not checked, so a spectating player is tracked and shown to non-spectators as a normal player model
87 ChunkResult.error skip:java result type
88 ChunkTaskDispatcher.hasWork port crates/horizon-client/src/streaming.rs::Streaming::busy
89 ChunkTaskDispatcher.onLevelChange port crates/horizon-client/src/streaming.rs::Streaming::requeue
90 ChunkTaskDispatcher.release missing minor: queued jobs of a column that lost its ticket are not cancelled; their results are dropped on arrival (Done::Proto range check)
91 ChunkTaskDispatcher.submit port crates/horizon-client/src/streaming.rs::Streaming::submit
92 ChunkTaskDispatcher.pollTask inline crates/horizon-client/src/streaming.rs::Streaming::new each worker pops the most urgent job
93 ChunkTaskDispatcher.scheduleForExecution inline crates/horizon-client/src/streaming.rs::Streaming::new the worker runs the job it popped
94 ChunkTaskPriorityQueue.resortChunkTasks port crates/horizon-client/src/streaming.rs::rank_again
95 ChunkTaskPriorityQueue.release missing minor: no per column release; queued jobs stay queued until run
96 ChunkTaskPriorityQueue.pop inline crates/horizon-client/src/streaming.rs::Streaming::new BinaryHeap pop in the worker loop
97 ChunkTracker.checkNeighborsAfterUpdate inline crates/horizon-client/src/ticket_levels.rs::compute closed form: ticket level plus Chebyshev distance, rebuilt when sources change
98 ChunkTracker.getComputedLevel inline crates/horizon-client/src/ticket_levels.rs::compute lowest ticket level plus distance, per cell
99 ChunkTracker.computeLevelFromNeighbor inline crates/horizon-client/src/ticket_levels.rs::compute one level per chunk of distance
100 ChunkTrackingView.difference inline crates/horizon-client/src/lan/hub.rs::Hub::update_view forget what left (scan of sent chunks), queue what entered (requeue)
101 ChunkTrackingView.isWithinDistance port crates/horizon-client/src/lan/hub.rs::tracked buffer 2 form; the buffer 1 form is streaming.rs in_view_distance
102 ChunkTrackingView.Positioned.squareIntersects skip:java optimisation that picks a box scan over a full enumeration
103 ChunkTrackingView.Positioned.contains port crates/horizon-client/src/lan/hub.rs::tracked
104 ChunkTrackingView.Positioned.forEach inline crates/horizon-client/src/lan/hub.rs::requeue loops the view's square around the centre
105 ColumnPos.asLong skip:java key packing
106 DemoMode missing minor: no demo mode: no demo timer, intro hints or five day limit (the dedicated server's --demo argument is accepted and ignored)
107 DistanceManager.runAllUpdates port crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update levels rebuilt when sources change
108 DistanceManager.addPlayer inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets players are tickets sources each tick
109 DistanceManager.removePlayer inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets a player gone from the level drops out of the sources
110 DistanceManager.getChunkLevel port crates/horizon-client/src/ticket_levels.rs::Levels::get loading and simulation level as a pair
111 DistanceManager.updateSimulationDistance inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets simulation_distance read from settings into Sources
112 DistanceManager.hasPlayersNearby inline crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::players_near the 8 chunk gate; the 5 chunk shortcut is skipped
113 DistanceManager.forEachEntityTickingChunk inline crates/horizon-client/src/ticket_levels.rs::Levels::random_ticking the simulation half of the random tick test
114 DistanceManager.FixedPlayerDistanceChunkTracker.setLevel inline crates/horizon-client/src/ticket_levels.rs::compute cells are filled by compute
115 DistanceManager.FixedPlayerDistanceChunkTracker.havePlayer inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets players' chunks are the sources
116 DistanceManager.PlayerTicketTracker.onLevelChange inline crates/horizon-client/src/ticket_levels.rs::compute loading level 31 plus distance beyond the view; no throttle of 4 loads at a time
117 DistanceManager.PlayerTicketTracker.updateViewDistance inline crates/horizon-client/src/ticket_levels.rs::reach view distance sets how far the loading levels reach
118 DistanceManager.PlayerTicketTracker.runAllUpdates inline crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update
119 GenerationChunkHolder.scheduleChunkGenerationTask inline crates/horizon-client/src/streaming.rs::Streaming::schedule_generation the scan picks the columns that need a job
120 GenerationChunkHolder.applyStep inline crates/horizon-client/src/streaming.rs::Streaming::update queues the Decorate and Finish jobs
121 GenerationChunkHolder.updateHighestAllowedStatus inline crates/horizon-client/src/streaming.rs::Ranges::requested how far a column may be generated follows the ranges
122 GenerationChunkHolder.replaceProtoChunk inline crates/horizon-client/src/streaming.rs::Streaming::receive_generated the proto becomes the final column
123 GenerationChunkHolder.rescheduleChunkTask inline crates/horizon-client/src/streaming.rs::GenerationScan::candidates wanted columns are scanned again when ranges change
124 GenerationChunkHolder.getOrCreateFuture skip:java per status future
125 GenerationChunkHolder.failAndClearPendingFuturesBetween skip:java future bookkeeping
126 GenerationChunkHolder.failAndClearPendingFuture skip:java future bookkeeping
127 GenerationChunkHolder.completeFuture skip:java future bookkeeping
128 GenerationChunkHolder.findHighestStatusWithPendingFuture skip:java future bookkeeping
129 GenerationChunkHolder.acquireStatusBump skip:java future bookkeeping
130 GenerationChunkHolder.isStatusDisallowed inline crates/horizon-client/src/streaming.rs::Ranges::requested
131 GenerationChunkHolder.increaseGenerationRefCount skip:other keeps a chunk from saving or unloading under a task; Horizon checks protos out to the job instead
132 GenerationChunkHolder.decreaseGenerationRefCount skip:other see increaseGenerationRefCount
133 GenerationChunkHolder.getChunkIfPresentUnchecked skip:java future lookup; Horizon reads protos and world.chunks
134 GenerationChunkHolder.getLatestChunk skip:java future lookup; Horizon reads protos and world.chunks
135 GenerationChunkHolder.getPersistedStatus skip:other Horizon tells proto and final apart by type (SavedProto or Chunk)
136 GenerationChunkHolder.getAllFutures skip:debug
137 GenerationChunkHolder.getLatestStatus port crates/horizon-client/src/streaming.rs::Streaming::latest_status furthest step reached, for the loading map
138 LoadingChunkTracker.getLevel port crates/horizon-client/src/ticket_levels.rs::Levels::get the loading half of the pair
139 LoadingChunkTracker.setLevel inline crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update levels are rebuilt when sources change
140 PlayerSpawnFinder.scheduleNext port crates/horizon-client/src/world_spawn.rs::PlayerSpawnFinder::next_candidate coprime stride order, then the suggestion
141 PlayerSpawnFinder.scheduleCandidate port crates/horizon-client/src/game/initial_spawn.rs::Game::search_spawn gap: minor: the in-frame path waits for the candidate's chunk, but a server tick (LAN, dedicated) passes over candidates in unloaded chunks, so a new guest can stand on another spot of the radius
142 SectionTracker.checkNeighborsAfterUpdate inline crates/horizon-client/src/game/raids.rs::sections_to_village its only subclass is the POI village distance: Chebyshev distance in sections, 7 when farther than 6
143 SectionTracker.getComputedLevel inline crates/horizon-client/src/game/raids.rs::sections_to_village
144 SectionTracker.computeLevelFromNeighbor inline crates/horizon-client/src/game/raids.rs::sections_to_village
+146
View File
@@ -0,0 +1,146 @@
ServerBossEvent.setProgress inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateProgress goes out when a viewer's last-sent progress differs
ServerBossEvent.setColor inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateStyle when colour or overlay differ from what the viewer was sent
ServerBossEvent.setOverlay inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events same UpdateStyle packet as the colour
ServerBossEvent.setDarkenScreen inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateProperties when darken, music or fog differ
ServerBossEvent.setPlayBossMusic inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events same UpdateProperties packet
ServerBossEvent.setCreateWorldFog inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events same UpdateProperties packet
ServerBossEvent.setName inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateName when the name differs
ServerBossEvent.broadcast inline crates/horizon-client/src/game/bossbars.rs::Game::publish_boss_bars bars are re-evaluated each tick per viewer and the diff is sent to that viewer only
ServerBossEvent.addPlayer inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events a viewer in the bar's player list gets an Add the first time it is wanted
ServerBossEvent.removePlayer inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events a Remove goes out once the viewer no longer wants the bar
ServerBossEvent.removeAllPlayers inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events every viewer gets its Remove from the same diff
ServerBossEvent.setVisible inline crates/horizon-client/src/game/bossbars.rs::Game::boss_events_for a hidden bar is left out of the wanted list, so the diff sends Remove or Add
ServerChunkCache.<init> inline crates/horizon-client/src/streaming.rs::Streaming::new builds the chunk map and workers per level; forced chunks are loaded in world_loading, no ticket storage object
ServerChunkCache.storeInCache skip:java 4-entry last-chunk lookup cache
ServerChunkCache.getChunk inline crates/horizon-client/src/streaming.rs::Streaming::update chunks load and generate asynchronously around tickets; callers read World::chunks and skip an absent column, nothing waits for a target status
ServerChunkCache.getChunkNow port crates/horizon-client/src/world.rs::World::loaded World::chunks.get is the lookup itself
ServerChunkCache.clearCache skip:java clears the 4-entry lookup cache
ServerChunkCache.getChunkFuture inline crates/horizon-client/src/streaming.rs::Streaming::update no futures; the worker pool delivers columns to the game thread
ServerChunkCache.getChunkFutureMainThread inline crates/horizon-client/src/streaming.rs::Streaming::update no futures or per-request tickets; streaming loads by distance
ServerChunkCache.hasChunk port crates/horizon-client/src/world.rs::World::loaded
ServerChunkCache.getChunkForLighting inline crates/horizon-client/src/streaming.rs::Streaming::light_region the 3x3 region handed to the light workers
ServerChunkCache.runDistanceManagerUpdates inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets ticket levels are recomputed once a tick from players and forced chunks
ServerChunkCache.isPositionTicking port crates/horizon-client/src/game.rs::GameLevel::is_ticking_chunk block-ticking ticket level and a lit chunk with its neighbours loaded
ServerChunkCache.close inline crates/horizon-client/src/game.rs::Game::save_game save with wait; nothing else to close
ServerChunkCache.broadcastChangedChunks port crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes block changes grouped by section as BlockUpdate or SectionBlocksUpdate, plus block entity data; light is in broadcast_light_changes
ServerChunkCache.getFullChunk inline crates/horizon-client/src/game/natural_spawning.rs::Game::spawn_natural the spawn pass reads World::chunks directly
ServerChunkCache.blockChanged inline crates/horizon-client/src/world.rs::World::set World::set pushes the position onto block_log, which the hub drains
ServerChunkCache.onLightUpdate port crates/horizon-client/src/lan/hub.rs::Hub::broadcast_light_changes light_log read once a tick; sent to players for whom the column is on the tracked border
ServerChunkCache.addTicketAndLoadWithRadius inline crates/horizon-client/src/streaming.rs::Streaming::update spawn search and guest placement wait for streaming to produce the columns; no ticket-with-radius future
ServerChunkCache.MainThreadExecutor.pollTask inline crates/horizon-client/src/streaming.rs::Streaming::update chunk-system updates run once per tick (streaming and ticket levels); there is no task queue to poll
ServerEntity.isFullPrecisionEncodingRequired missing minor: item entities against a wall are sent as quantised deltas, so a LAN guest can see them off by a hair; TNT and happy ghast use the precise flag instead
ServerEntity.handleMinecartPosRot skip:other only for the experimental minecart_improvements movement; Horizon has the old minecart movement only
ServerEntity.addPairing inline crates/horizon-client/src/lan/entity.rs::Entities::tick a viewer that starts tracking an entity gets ServerEntity::pairing bundled, and the entity is remembered per viewer
ServerEntityGetter.getNearestPlayer inline crates/horizon-client/src/game/lan_mobs.rs::player_for each mob is given one player (the host or a guest) per tick, then Mob::can_target_player and friends apply the TargetingConditions
ServerEntityGetter.getNearestEntity inline crates/horizon-client/src/mobs/world.rs::MobWorld::nearby nearest-first scan used by NearestTarget; the goal applies its own conditions
ServerEntityGetter.getNearbyPlayers inline crates/horizon-client/src/mobs/goals.rs::Mob::can_target_player gap: minor: tests only the one player a mob sees, so a phantom or iron golem with several players around considers one of them
ServerEntityGetter.getNearbyEntities inline crates/horizon-client/src/mobs/world.rs::MobWorld::nearby each caller (breed partner, raider shout, fox, evoker) scans this and filters itself
ServerLevel.<init> inline crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare
ServerLevel.getNextEntityId inline crates/horizon-client/src/game/lan_entities.rs::Game::lan_assign_ids one counter, Game::next_entity, bumped wherever an entity is created; ids for guests' tracking are given here
ServerLevel.tickCustomSpawners inline crates/horizon-client/src/game/creatures.rs::Game::tick_creatures wandering trader, patrol, cat and siege spawners; the phantom spawner runs from stats.rs
ServerLevel.tickThunder port crates/horizon-client/src/game/lightning.rs::Game::tick_thunder
ServerLevel.findLightningTargetAround port crates/horizon-client/src/game/lightning.rs::Game::lightning_target
ServerLevel.announceSleepStatus port crates/horizon-client/src/game/lan_actions.rs::Game::announce_sleep_status
ServerLevel.getMoonBrightness inline crates/horizon-client/src/game/creatures.rs::Game::local_difficulty MOON_BRIGHTNESS table indexed by day / 24000 mod 8
ServerLevel.prepareWeather port crates/horizon-client/src/save.rs::Level::read rain and thunder levels start at 1 when the saved flags are on
ServerLevel.advanceWeatherCycle port crates/horizon-client/src/world.rs::Weather::tick_timers level fade in tick_levels, game events broadcast in Hub::sync_world
ServerLevel.resetWeatherCycle inline crates/horizon-client/src/game.rs::Game::tick_sleep the sleep-through-night reset; /weather sets the timers itself
ServerLevel.tickFluid port crates/horizon-world/src/level/tick.rs::Behaviours::scheduled_step
ServerLevel.tickBlock port crates/horizon-world/src/level/tick.rs::Behaviours::scheduled_step
ServerLevel.tickPassenger inline crates/horizon-client/src/game/passengers.rs::Game::sync_riders a rider whose vehicle is gone or dead lets go; others are re-seated each tick
ServerLevel.updateNeighboursOnBlockSet inline crates/horizon-world/src/level/update.rs::Sim::set_block_limit neighbour and comparator updates inside setBlock
ServerLevel.mayInteract inline crates/horizon-client/src/game/lan_actions.rs::Game::under_spawn_protection gap: minor: spawn protection only for guests on a dedicated server; the world border check is a stub that always allows (hand.rs within_border), so blocks can be built and broken outside the border
ServerLevel.save port crates/horizon-client/src/game.rs::Game::save_level
ServerLevel.saveLevelData port crates/horizon-client/src/game.rs::Game::save_game_metadata
ServerLevel.getEntities inline crates/horizon-client/src/game/commands.rs::Game::select_in_level entity selectors filter the per-kind entity lists
ServerLevel.addDuringTeleport inline crates/horizon-client/src/game/nether_portal.rs::Game::resolve_arrivals mobs, items, boats and carts waiting for a portal exit join the level with the chunk entities; players go through Hub::respawn
ServerLevel.addPlayer inline crates/horizon-client/src/lan/hub.rs::Hub::place_new_player
ServerLevel.addEntity inline crates/horizon-client/src/game/creatures.rs::Game::spawn_mob mobs go in Game::mobs; other kinds have their own lists
ServerLevel.tryAddFreshEntityWithPassengers inline crates/horizon-client/src/game/persist.rs::Game::load_mob gap: minor: loads a mob with its Passengers but never refuses a UUID that is already loaded, so /summon with a fixed UUID twice makes two
ServerLevel.unload inline crates/horizon-client/src/game.rs::Game::update_world unloaded columns drop their block entities and names, and their entities are saved out
ServerLevel.playSeededSound port crates/horizon-client/src/lan/containers.rs::Hub::sound
ServerLevel.sendBlockUpdated inline crates/horizon-client/src/world.rs::World::set gap: minor: mobs never re-plan a path when a block on it changes (Mob::recompute_path is never triggered by a block update), so they walk a stale path until a goal re-paths
ServerLevel.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
ServerLevel.getDestroyType port crates/horizon-client/src/game.rs::Game::explode mob explosions pick Keep, Destroy or DestroyWithDecay from mob_griefing and mob_explosion_drop_decay
ServerLevel.doBlockEvent inline crates/horizon-world/src/level/pistons.rs::Behaviours::run_block_events
ServerLevel.getEntityInAnyDimension missing minor: owner and target references resolve in the level in place only; parked levels are not searched
ServerLevel.getEntityOrPart inline crates/horizon-client/src/game/lan_actions.rs::Game::look_at_entity an entity id from a guest finds a mob, an object or a tracked dragon part or end crystal
ServerLevel.findClosestBiome3d port crates/horizon-client/src/vanillagen.rs::VanillaTerrain::find_closest_biome
ServerLevel.getWorldBorder inline crates/horizon-client/src/game/scoreboard.rs::Game::load_scoreboard the border is unpacked from saved data next to the scoreboard
ServerLevel.setChunkForced port crates/horizon-client/src/game/commands/terrain_cmds.rs::Game::cmd_forceload
ServerLevel.updatePOIOnBlockStateChange inline crates/horizon-client/src/poi_sections.rs::PoiSections::get no incremental records: a section's POI list is rebuilt from its blocks after any edit
ServerLevel.saveDebugReport skip:debug
ServerLevel.dumpEntities skip:debug
ServerLevel.dumpBlockEntityTickers skip:debug
ServerLevel.clearBlockEvents skip:debug test hook for game tests
ServerLevel.getWatchdogStats skip:server server watchdog crash text
ServerLevel.getTypeCount skip:debug
ServerLevel.onStructureStartsAvailable skip:other Horizon computes structure starts from the seed (VanillaTerrain) instead of caching them in a StructureCheck
ServerLevel.waitForEntities skip:other entities load together with their chunk, so a spawning player has nothing to wait for
ServerLevel.areEntitiesActuallyLoadedAndTicking skip:debug only game tests call it
ServerLevel.anyPlayerCloseEnoughForSpawning port crates/horizon-client/src/game/natural_spawning.rs::close_enough_for_spawning
ServerLevel.fillReportDetails skip:debug crash report detail
ServerLevel.EntityCallbacks.onCreated inline crates/horizon-client/src/lan/waypoints.rs::Waypoints::track players are the only waypoint transmitters Horizon has
ServerLevel.EntityCallbacks.onDestroyed inline crates/horizon-client/src/lan/waypoints.rs::Waypoints::untrack gap: minor: dead non-player entities keep their scores and team membership (vanilla Scoreboard.entityRemoved clears them), so a sidebar can keep listing a dead mob
ServerLevel.EntityCallbacks.onTrackingStart inline crates/horizon-client/src/lan/entity.rs::Entities::tick an entity is tracked the first tick the level lists it; guests, waypoints and the sleep list are polled each tick, and there are no separate dragon part entities
ServerLevel.EntityCallbacks.onTrackingEnd inline crates/horizon-client/src/lan/entity.rs::Entities::tick an entity the level stops listing is removed from every viewer (RemoveEntities)
ServerPlayer.<init> port crates/horizon-client/src/lan/guest.rs::Guest::new
ServerPlayer.readAdditionalSaveData port crates/horizon-client/src/save.rs::Level::read_player gap: minor: entered_nether_pos, last_explosion_impact_pos, spawn_extra_particles_on_fall, post_effects and previousPlayerGameType are not read back (kept verbatim in player_extra); recipe book, respawn, shoulders, warden tracker and raid omen are read
ServerPlayer.addAdditionalSaveData port crates/horizon-client/src/save.rs::Level::player_tag gap: minor: writes only what it reads; the keys above come from the loaded file unchanged
ServerPlayer.saveParentVehicle missing player: quitting while riding a horse, boat or minecart and reloading leaves the player standing next to the mount instead of still riding it
ServerPlayer.loadAndSpawnParentVehicle missing player: the player is never put back on its mount when the world loads
ServerPlayer.saveEnderPearls missing minor: a thrown ender pearl is not saved at all, so one in flight or hanging in a stasis chamber is gone after a reload
ServerPlayer.loadAndSpawnEnderPearl missing minor: ender pearls are not loaded back (spawn_loaded_entities has no pearl)
ServerPlayer.setExperiencePoints port crates/horizon-client/src/game/commands.rs::Game::change_experience /xp set points
ServerPlayer.setExperienceLevels port crates/horizon-client/src/game/commands.rs::Game::change_experience /xp set levels
ServerPlayer.onLeaveCombat skip:other the client ignores ClientboundPlayerCombatEnd
ServerPlayer.playShoulderEntityAmbientSound missing player: a parrot on the player's shoulder never chirps or imitates nearby mobs (1 in 200 ticks in vanilla)
ServerPlayer.respawnEntityOnShoulder port crates/horizon-client/src/game/shoulders.rs::Game::remove_entities_on_shoulder
ServerPlayer.trackStartFallingPosition missing player: the Caves & Cliffs (fall_from_height) and Who Needs Rockets? (fall_after_explosion) advancements can never be earned; neither trigger exists
ServerPlayer.trackEnteredOrExitedLavaOnVehicle missing player: the This Boat Has Legs advancement (ride_entity_in_lava) can never be earned; the trigger does not exist
ServerPlayer.updateScoreForCriteria port crates/horizon-client/src/game/scoreboard.rs::Game::tick_scoreboard health, food, air, armor, xp and level objectives
ServerPlayer.tellNeutralMobsThatIDied missing player: wolves, bees, piglins and other mobs that were angry at the player stay angry after the player dies and respawns (vanilla forgives them with forgive_dead_players)
ServerPlayer.handleTeamKill inline crates/horizon-client/src/game/scoreboard.rs::Game::score_player_killed teamkill and killedByTeam objectives
ServerPlayer.hurtServer port crates/horizon-client/src/game/lan_pvp.rs::Game::pvp_land pvp rule and team friendly fire gate the damage
ServerPlayer.addPostEffect port crates/horizon-client/src/game/commands/extra.rs::Game::cmd_posteffect gap: minor: one list shared by every target, nothing is sent to guests (an empty list at join) and no post shader is drawn
ServerPlayer.clearPostEffects port crates/horizon-client/src/game/commands/extra.rs::Game::cmd_posteffect gap: minor: same as addPostEffect
ServerPlayer.removePostEffect port crates/horizon-client/src/game/commands/extra.rs::Game::cmd_posteffect gap: minor: same as addPostEffect
ServerPlayer.forceSetRotation inline crates/horizon-client/src/game/commands/world_cmds.rs::Game::cmd_rotate /rotate turns a guest through a teleport packet with the new rotation
ServerPlayer.triggerDimensionChangeTriggers port crates/horizon-client/src/game/advancements.rs::Game::trigger_dimension gap: player: nether_travel is never triggered (entered_nether_pos is not kept), so the Subspace Bubble advancement can never be earned
ServerPlayer.broadcastToPlayer missing player: a spectator (the host or a LAN guest) is shown to the other players as an ordinary visible player; vanilla hides spectators from everyone who is not a spectator
ServerPlayer.startSleeping port crates/horizon-client/src/game.rs::Game::try_sleep
ServerPlayer.isReachableBedBlock inline crates/horizon-client/src/game.rs::Game::try_sleep the reachable closure: 3 blocks sideways, 2 vertically
ServerPlayer.isInvulnerableTo inline crates/horizon-client/src/game/lan_mobs.rs::Game::lan_guest_views gap: minor: only the not-loaded part (a guest that has not sent PlayerLoaded is ignored by mobs); no invulnerability while a dimension change is pending
ServerPlayer.openNautilusInventory missing player: sneak-using a tamed nautilus does nothing, so its saddle and armour screen never opens (items can only be put on by right-clicking with them)
ServerPlayer.doCloseContainer inline crates/horizon-client/src/lan/containers.rs::Hub::container_closed the carried stack and a crafting grid go back through Game::guest_carried_back and lan_crafting_closed
ServerPlayer.rideTick inline crates/horizon-client/src/game/stats.rs::Game::movement_stats only the riding statistics part; the ride itself is per vehicle
ServerPlayer.didNotMove inline crates/horizon-client/src/game/stats.rs::Game::movement_stats a move of 0 cm counts nothing
ServerPlayer.awardStat port crates/horizon-client/src/game/stats.rs::Stats::add scoreboard objectives follow in stat_criteria_changed
ServerPlayer.resetStat port crates/horizon-client/src/game/stats.rs::Stats::reset
ServerPlayer.disconnect inline crates/horizon-client/src/game/lan.rs::Game::tick_lan HostEvent::Left: the guest is saved and removed; its mount just loses its rider (no eject or forced wake)
ServerPlayer.transferInventoryXpAndScore inline crates/horizon-client/src/game/screens.rs::Game::respawn_player keep_inventory keeps the inventory and Experience::respawn keeps xp
ServerPlayer.onEffectUpdated port crates/horizon-client/src/lan/hub.rs::Hub::sync_effects gap: player: the effects_changed trigger does not exist, so How Did We Get Here? and A Furious Cocktail can never be earned
ServerPlayer.onEffectsRemoved port crates/horizon-client/src/lan/hub.rs::Hub::sync_effects gap: player: same missing effects_changed trigger
ServerPlayer.magicCrit port crates/horizon-client/src/lan/containers.rs::Hub::critical_hit
ServerPlayer.onUpdateAbilities inline crates/horizon-client/src/lan/hub.rs::Hub::set_game_mode abilities go out with a game mode change; there is no other way abilities change
ServerPlayer.createCommandSourceStack inline crates/horizon-client/src/game/lan_actions.rs::Game::run_guest_command the guest is swapped in as the acting player and its permission level applied
ServerPlayer.sendSystemMessage port crates/horizon-client/src/lan/hub.rs::Hub::system_message
ServerPlayer.sendBuildLimitMessage missing player: placing a block at the build limit fails silently; the red build.tooHigh / build.tooLow overlay never shows
ServerPlayer.getIpAddress skip:server for ban-ip and the dedicated server log
ServerPlayer.updateOptions port crates/horizon-client/src/lan/hub.rs::Hub::process_inbox the ClientInformation arm: view distance, main hand, model parts and chat visibility are kept
ServerPlayer.clientInformation skip:java getter
ServerPlayer.sendServerStatus port crates/horizon-client/src/lan/hub.rs::Hub::place_new_player ServerData with the motd and icon at join
ServerPlayer.updateInvisibilityStatus missing player: a spectator is not made invisible, so others see a full player model flying around
ServerPlayer.drop port crates/horizon-client/src/game.rs::Game::player_drop item_dropped and drop statistics, thrower set
ServerPlayer.calculateGameModeForNewPlayer port crates/horizon-client/src/game/lan.rs::Game::lan_guest_joined default or forced game mode for a new or force-gamemode guest
ServerPlayer.storeGameTypes port crates/horizon-client/src/save.rs::Level::player_tag gap: minor: playerGameType only; previousPlayerGameType is not saved, so the game mode switcher forgets the previous mode after a reload
ServerPlayer.shouldFilterMessageTo skip:service text filtering
ServerPlayer.mayInteract inline crates/horizon-client/src/game/lan_actions.rs::Game::under_spawn_protection gap: minor: same as ServerLevel.mayInteract, no world border check
ServerPlayer.onItemPickup missing player: the You've Got a Friend in Me advancement (thrown_item_picked_up_by_player) can never be earned
ServerPlayer.getChatSession skip:java getter with an expiry check
ServerPlayer.startRiding inline crates/horizon-client/src/game/lan_entities.rs::Game::lan_riding gap: minor: SetPassengers goes out, but the mount's active effects (a horse's speed) are not sent to the rider
ServerPlayer.removeVehicle inline crates/horizon-client/src/game/lan_entities.rs::Game::lan_riding gap: minor: SetPassengers updates, vehicle effects are not removed from the rider
ServerPlayer.getKnownSpeed port crates/horizon-client/src/game/spear.rs::Game::known_player_movement gap: minor: ignores the vehicle's speed for a rider who is not steering
ServerPlayer.onEquippedItemBroken port crates/horizon-client/src/game.rs::Game::damage_held gap: minor: only the held item counts toward the broken statistic; breaking armour is not counted
ServerPlayer.registerAndUpdateEnderPearlTicket missing minor: a thrown ender pearl does not keep its chunk loaded; none are saved either
ServerPlayer.debugSubscriptions skip:debug debug subscriptions for the debug screen
1 ServerBossEvent.setProgress inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateProgress goes out when a viewer's last-sent progress differs
2 ServerBossEvent.setColor inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateStyle when colour or overlay differ from what the viewer was sent
3 ServerBossEvent.setOverlay inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events same UpdateStyle packet as the colour
4 ServerBossEvent.setDarkenScreen inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateProperties when darken, music or fog differ
5 ServerBossEvent.setPlayBossMusic inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events same UpdateProperties packet
6 ServerBossEvent.setCreateWorldFog inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events same UpdateProperties packet
7 ServerBossEvent.setName inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events UpdateName when the name differs
8 ServerBossEvent.broadcast inline crates/horizon-client/src/game/bossbars.rs::Game::publish_boss_bars bars are re-evaluated each tick per viewer and the diff is sent to that viewer only
9 ServerBossEvent.addPlayer inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events a viewer in the bar's player list gets an Add the first time it is wanted
10 ServerBossEvent.removePlayer inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events a Remove goes out once the viewer no longer wants the bar
11 ServerBossEvent.removeAllPlayers inline crates/horizon-client/src/game/bossbars.rs::Game::diff_boss_events every viewer gets its Remove from the same diff
12 ServerBossEvent.setVisible inline crates/horizon-client/src/game/bossbars.rs::Game::boss_events_for a hidden bar is left out of the wanted list, so the diff sends Remove or Add
13 ServerChunkCache.<init> inline crates/horizon-client/src/streaming.rs::Streaming::new builds the chunk map and workers per level; forced chunks are loaded in world_loading, no ticket storage object
14 ServerChunkCache.storeInCache skip:java 4-entry last-chunk lookup cache
15 ServerChunkCache.getChunk inline crates/horizon-client/src/streaming.rs::Streaming::update chunks load and generate asynchronously around tickets; callers read World::chunks and skip an absent column, nothing waits for a target status
16 ServerChunkCache.getChunkNow port crates/horizon-client/src/world.rs::World::loaded World::chunks.get is the lookup itself
17 ServerChunkCache.clearCache skip:java clears the 4-entry lookup cache
18 ServerChunkCache.getChunkFuture inline crates/horizon-client/src/streaming.rs::Streaming::update no futures; the worker pool delivers columns to the game thread
19 ServerChunkCache.getChunkFutureMainThread inline crates/horizon-client/src/streaming.rs::Streaming::update no futures or per-request tickets; streaming loads by distance
20 ServerChunkCache.hasChunk port crates/horizon-client/src/world.rs::World::loaded
21 ServerChunkCache.getChunkForLighting inline crates/horizon-client/src/streaming.rs::Streaming::light_region the 3x3 region handed to the light workers
22 ServerChunkCache.runDistanceManagerUpdates inline crates/horizon-client/src/game.rs::Game::update_chunk_tickets ticket levels are recomputed once a tick from players and forced chunks
23 ServerChunkCache.isPositionTicking port crates/horizon-client/src/game.rs::GameLevel::is_ticking_chunk block-ticking ticket level and a lit chunk with its neighbours loaded
24 ServerChunkCache.close inline crates/horizon-client/src/game.rs::Game::save_game save with wait; nothing else to close
25 ServerChunkCache.broadcastChangedChunks port crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes block changes grouped by section as BlockUpdate or SectionBlocksUpdate, plus block entity data; light is in broadcast_light_changes
26 ServerChunkCache.getFullChunk inline crates/horizon-client/src/game/natural_spawning.rs::Game::spawn_natural the spawn pass reads World::chunks directly
27 ServerChunkCache.blockChanged inline crates/horizon-client/src/world.rs::World::set World::set pushes the position onto block_log, which the hub drains
28 ServerChunkCache.onLightUpdate port crates/horizon-client/src/lan/hub.rs::Hub::broadcast_light_changes light_log read once a tick; sent to players for whom the column is on the tracked border
29 ServerChunkCache.addTicketAndLoadWithRadius inline crates/horizon-client/src/streaming.rs::Streaming::update spawn search and guest placement wait for streaming to produce the columns; no ticket-with-radius future
30 ServerChunkCache.MainThreadExecutor.pollTask inline crates/horizon-client/src/streaming.rs::Streaming::update chunk-system updates run once per tick (streaming and ticket levels); there is no task queue to poll
31 ServerEntity.isFullPrecisionEncodingRequired missing minor: item entities against a wall are sent as quantised deltas, so a LAN guest can see them off by a hair; TNT and happy ghast use the precise flag instead
32 ServerEntity.handleMinecartPosRot skip:other only for the experimental minecart_improvements movement; Horizon has the old minecart movement only
33 ServerEntity.addPairing inline crates/horizon-client/src/lan/entity.rs::Entities::tick a viewer that starts tracking an entity gets ServerEntity::pairing bundled, and the entity is remembered per viewer
34 ServerEntityGetter.getNearestPlayer inline crates/horizon-client/src/game/lan_mobs.rs::player_for each mob is given one player (the host or a guest) per tick, then Mob::can_target_player and friends apply the TargetingConditions
35 ServerEntityGetter.getNearestEntity inline crates/horizon-client/src/mobs/world.rs::MobWorld::nearby nearest-first scan used by NearestTarget; the goal applies its own conditions
36 ServerEntityGetter.getNearbyPlayers inline crates/horizon-client/src/mobs/goals.rs::Mob::can_target_player gap: minor: tests only the one player a mob sees, so a phantom or iron golem with several players around considers one of them
37 ServerEntityGetter.getNearbyEntities inline crates/horizon-client/src/mobs/world.rs::MobWorld::nearby each caller (breed partner, raider shout, fox, evoker) scans this and filters itself
38 ServerLevel.<init> inline crates/horizon-client/src/game/world_loading.rs::WorldRequest::prepare
39 ServerLevel.getNextEntityId inline crates/horizon-client/src/game/lan_entities.rs::Game::lan_assign_ids one counter, Game::next_entity, bumped wherever an entity is created; ids for guests' tracking are given here
40 ServerLevel.tickCustomSpawners inline crates/horizon-client/src/game/creatures.rs::Game::tick_creatures wandering trader, patrol, cat and siege spawners; the phantom spawner runs from stats.rs
41 ServerLevel.tickThunder port crates/horizon-client/src/game/lightning.rs::Game::tick_thunder
42 ServerLevel.findLightningTargetAround port crates/horizon-client/src/game/lightning.rs::Game::lightning_target
43 ServerLevel.announceSleepStatus port crates/horizon-client/src/game/lan_actions.rs::Game::announce_sleep_status
44 ServerLevel.getMoonBrightness inline crates/horizon-client/src/game/creatures.rs::Game::local_difficulty MOON_BRIGHTNESS table indexed by day / 24000 mod 8
45 ServerLevel.prepareWeather port crates/horizon-client/src/save.rs::Level::read rain and thunder levels start at 1 when the saved flags are on
46 ServerLevel.advanceWeatherCycle port crates/horizon-client/src/world.rs::Weather::tick_timers level fade in tick_levels, game events broadcast in Hub::sync_world
47 ServerLevel.resetWeatherCycle inline crates/horizon-client/src/game.rs::Game::tick_sleep the sleep-through-night reset; /weather sets the timers itself
48 ServerLevel.tickFluid port crates/horizon-world/src/level/tick.rs::Behaviours::scheduled_step
49 ServerLevel.tickBlock port crates/horizon-world/src/level/tick.rs::Behaviours::scheduled_step
50 ServerLevel.tickPassenger inline crates/horizon-client/src/game/passengers.rs::Game::sync_riders a rider whose vehicle is gone or dead lets go; others are re-seated each tick
51 ServerLevel.updateNeighboursOnBlockSet inline crates/horizon-world/src/level/update.rs::Sim::set_block_limit neighbour and comparator updates inside setBlock
52 ServerLevel.mayInteract inline crates/horizon-client/src/game/lan_actions.rs::Game::under_spawn_protection gap: minor: spawn protection only for guests on a dedicated server; the world border check is a stub that always allows (hand.rs within_border), so blocks can be built and broken outside the border
53 ServerLevel.save port crates/horizon-client/src/game.rs::Game::save_level
54 ServerLevel.saveLevelData port crates/horizon-client/src/game.rs::Game::save_game_metadata
55 ServerLevel.getEntities inline crates/horizon-client/src/game/commands.rs::Game::select_in_level entity selectors filter the per-kind entity lists
56 ServerLevel.addDuringTeleport inline crates/horizon-client/src/game/nether_portal.rs::Game::resolve_arrivals mobs, items, boats and carts waiting for a portal exit join the level with the chunk entities; players go through Hub::respawn
57 ServerLevel.addPlayer inline crates/horizon-client/src/lan/hub.rs::Hub::place_new_player
58 ServerLevel.addEntity inline crates/horizon-client/src/game/creatures.rs::Game::spawn_mob mobs go in Game::mobs; other kinds have their own lists
59 ServerLevel.tryAddFreshEntityWithPassengers inline crates/horizon-client/src/game/persist.rs::Game::load_mob gap: minor: loads a mob with its Passengers but never refuses a UUID that is already loaded, so /summon with a fixed UUID twice makes two
60 ServerLevel.unload inline crates/horizon-client/src/game.rs::Game::update_world unloaded columns drop their block entities and names, and their entities are saved out
61 ServerLevel.playSeededSound port crates/horizon-client/src/lan/containers.rs::Hub::sound
62 ServerLevel.sendBlockUpdated inline crates/horizon-client/src/world.rs::World::set gap: minor: mobs never re-plan a path when a block on it changes (Mob::recompute_path is never triggered by a block update), so they walk a stale path until a goal re-paths
63 ServerLevel.neighborChanged port crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed
64 ServerLevel.getDestroyType port crates/horizon-client/src/game.rs::Game::explode mob explosions pick Keep, Destroy or DestroyWithDecay from mob_griefing and mob_explosion_drop_decay
65 ServerLevel.doBlockEvent inline crates/horizon-world/src/level/pistons.rs::Behaviours::run_block_events
66 ServerLevel.getEntityInAnyDimension missing minor: owner and target references resolve in the level in place only; parked levels are not searched
67 ServerLevel.getEntityOrPart inline crates/horizon-client/src/game/lan_actions.rs::Game::look_at_entity an entity id from a guest finds a mob, an object or a tracked dragon part or end crystal
68 ServerLevel.findClosestBiome3d port crates/horizon-client/src/vanillagen.rs::VanillaTerrain::find_closest_biome
69 ServerLevel.getWorldBorder inline crates/horizon-client/src/game/scoreboard.rs::Game::load_scoreboard the border is unpacked from saved data next to the scoreboard
70 ServerLevel.setChunkForced port crates/horizon-client/src/game/commands/terrain_cmds.rs::Game::cmd_forceload
71 ServerLevel.updatePOIOnBlockStateChange inline crates/horizon-client/src/poi_sections.rs::PoiSections::get no incremental records: a section's POI list is rebuilt from its blocks after any edit
72 ServerLevel.saveDebugReport skip:debug
73 ServerLevel.dumpEntities skip:debug
74 ServerLevel.dumpBlockEntityTickers skip:debug
75 ServerLevel.clearBlockEvents skip:debug test hook for game tests
76 ServerLevel.getWatchdogStats skip:server server watchdog crash text
77 ServerLevel.getTypeCount skip:debug
78 ServerLevel.onStructureStartsAvailable skip:other Horizon computes structure starts from the seed (VanillaTerrain) instead of caching them in a StructureCheck
79 ServerLevel.waitForEntities skip:other entities load together with their chunk, so a spawning player has nothing to wait for
80 ServerLevel.areEntitiesActuallyLoadedAndTicking skip:debug only game tests call it
81 ServerLevel.anyPlayerCloseEnoughForSpawning port crates/horizon-client/src/game/natural_spawning.rs::close_enough_for_spawning
82 ServerLevel.fillReportDetails skip:debug crash report detail
83 ServerLevel.EntityCallbacks.onCreated inline crates/horizon-client/src/lan/waypoints.rs::Waypoints::track players are the only waypoint transmitters Horizon has
84 ServerLevel.EntityCallbacks.onDestroyed inline crates/horizon-client/src/lan/waypoints.rs::Waypoints::untrack gap: minor: dead non-player entities keep their scores and team membership (vanilla Scoreboard.entityRemoved clears them), so a sidebar can keep listing a dead mob
85 ServerLevel.EntityCallbacks.onTrackingStart inline crates/horizon-client/src/lan/entity.rs::Entities::tick an entity is tracked the first tick the level lists it; guests, waypoints and the sleep list are polled each tick, and there are no separate dragon part entities
86 ServerLevel.EntityCallbacks.onTrackingEnd inline crates/horizon-client/src/lan/entity.rs::Entities::tick an entity the level stops listing is removed from every viewer (RemoveEntities)
87 ServerPlayer.<init> port crates/horizon-client/src/lan/guest.rs::Guest::new
88 ServerPlayer.readAdditionalSaveData port crates/horizon-client/src/save.rs::Level::read_player gap: minor: entered_nether_pos, last_explosion_impact_pos, spawn_extra_particles_on_fall, post_effects and previousPlayerGameType are not read back (kept verbatim in player_extra); recipe book, respawn, shoulders, warden tracker and raid omen are read
89 ServerPlayer.addAdditionalSaveData port crates/horizon-client/src/save.rs::Level::player_tag gap: minor: writes only what it reads; the keys above come from the loaded file unchanged
90 ServerPlayer.saveParentVehicle missing player: quitting while riding a horse, boat or minecart and reloading leaves the player standing next to the mount instead of still riding it
91 ServerPlayer.loadAndSpawnParentVehicle missing player: the player is never put back on its mount when the world loads
92 ServerPlayer.saveEnderPearls missing minor: a thrown ender pearl is not saved at all, so one in flight or hanging in a stasis chamber is gone after a reload
93 ServerPlayer.loadAndSpawnEnderPearl missing minor: ender pearls are not loaded back (spawn_loaded_entities has no pearl)
94 ServerPlayer.setExperiencePoints port crates/horizon-client/src/game/commands.rs::Game::change_experience /xp set points
95 ServerPlayer.setExperienceLevels port crates/horizon-client/src/game/commands.rs::Game::change_experience /xp set levels
96 ServerPlayer.onLeaveCombat skip:other the client ignores ClientboundPlayerCombatEnd
97 ServerPlayer.playShoulderEntityAmbientSound missing player: a parrot on the player's shoulder never chirps or imitates nearby mobs (1 in 200 ticks in vanilla)
98 ServerPlayer.respawnEntityOnShoulder port crates/horizon-client/src/game/shoulders.rs::Game::remove_entities_on_shoulder
99 ServerPlayer.trackStartFallingPosition missing player: the Caves & Cliffs (fall_from_height) and Who Needs Rockets? (fall_after_explosion) advancements can never be earned; neither trigger exists
100 ServerPlayer.trackEnteredOrExitedLavaOnVehicle missing player: the This Boat Has Legs advancement (ride_entity_in_lava) can never be earned; the trigger does not exist
101 ServerPlayer.updateScoreForCriteria port crates/horizon-client/src/game/scoreboard.rs::Game::tick_scoreboard health, food, air, armor, xp and level objectives
102 ServerPlayer.tellNeutralMobsThatIDied missing player: wolves, bees, piglins and other mobs that were angry at the player stay angry after the player dies and respawns (vanilla forgives them with forgive_dead_players)
103 ServerPlayer.handleTeamKill inline crates/horizon-client/src/game/scoreboard.rs::Game::score_player_killed teamkill and killedByTeam objectives
104 ServerPlayer.hurtServer port crates/horizon-client/src/game/lan_pvp.rs::Game::pvp_land pvp rule and team friendly fire gate the damage
105 ServerPlayer.addPostEffect port crates/horizon-client/src/game/commands/extra.rs::Game::cmd_posteffect gap: minor: one list shared by every target, nothing is sent to guests (an empty list at join) and no post shader is drawn
106 ServerPlayer.clearPostEffects port crates/horizon-client/src/game/commands/extra.rs::Game::cmd_posteffect gap: minor: same as addPostEffect
107 ServerPlayer.removePostEffect port crates/horizon-client/src/game/commands/extra.rs::Game::cmd_posteffect gap: minor: same as addPostEffect
108 ServerPlayer.forceSetRotation inline crates/horizon-client/src/game/commands/world_cmds.rs::Game::cmd_rotate /rotate turns a guest through a teleport packet with the new rotation
109 ServerPlayer.triggerDimensionChangeTriggers port crates/horizon-client/src/game/advancements.rs::Game::trigger_dimension gap: player: nether_travel is never triggered (entered_nether_pos is not kept), so the Subspace Bubble advancement can never be earned
110 ServerPlayer.broadcastToPlayer missing player: a spectator (the host or a LAN guest) is shown to the other players as an ordinary visible player; vanilla hides spectators from everyone who is not a spectator
111 ServerPlayer.startSleeping port crates/horizon-client/src/game.rs::Game::try_sleep
112 ServerPlayer.isReachableBedBlock inline crates/horizon-client/src/game.rs::Game::try_sleep the reachable closure: 3 blocks sideways, 2 vertically
113 ServerPlayer.isInvulnerableTo inline crates/horizon-client/src/game/lan_mobs.rs::Game::lan_guest_views gap: minor: only the not-loaded part (a guest that has not sent PlayerLoaded is ignored by mobs); no invulnerability while a dimension change is pending
114 ServerPlayer.openNautilusInventory missing player: sneak-using a tamed nautilus does nothing, so its saddle and armour screen never opens (items can only be put on by right-clicking with them)
115 ServerPlayer.doCloseContainer inline crates/horizon-client/src/lan/containers.rs::Hub::container_closed the carried stack and a crafting grid go back through Game::guest_carried_back and lan_crafting_closed
116 ServerPlayer.rideTick inline crates/horizon-client/src/game/stats.rs::Game::movement_stats only the riding statistics part; the ride itself is per vehicle
117 ServerPlayer.didNotMove inline crates/horizon-client/src/game/stats.rs::Game::movement_stats a move of 0 cm counts nothing
118 ServerPlayer.awardStat port crates/horizon-client/src/game/stats.rs::Stats::add scoreboard objectives follow in stat_criteria_changed
119 ServerPlayer.resetStat port crates/horizon-client/src/game/stats.rs::Stats::reset
120 ServerPlayer.disconnect inline crates/horizon-client/src/game/lan.rs::Game::tick_lan HostEvent::Left: the guest is saved and removed; its mount just loses its rider (no eject or forced wake)
121 ServerPlayer.transferInventoryXpAndScore inline crates/horizon-client/src/game/screens.rs::Game::respawn_player keep_inventory keeps the inventory and Experience::respawn keeps xp
122 ServerPlayer.onEffectUpdated port crates/horizon-client/src/lan/hub.rs::Hub::sync_effects gap: player: the effects_changed trigger does not exist, so How Did We Get Here? and A Furious Cocktail can never be earned
123 ServerPlayer.onEffectsRemoved port crates/horizon-client/src/lan/hub.rs::Hub::sync_effects gap: player: same missing effects_changed trigger
124 ServerPlayer.magicCrit port crates/horizon-client/src/lan/containers.rs::Hub::critical_hit
125 ServerPlayer.onUpdateAbilities inline crates/horizon-client/src/lan/hub.rs::Hub::set_game_mode abilities go out with a game mode change; there is no other way abilities change
126 ServerPlayer.createCommandSourceStack inline crates/horizon-client/src/game/lan_actions.rs::Game::run_guest_command the guest is swapped in as the acting player and its permission level applied
127 ServerPlayer.sendSystemMessage port crates/horizon-client/src/lan/hub.rs::Hub::system_message
128 ServerPlayer.sendBuildLimitMessage missing player: placing a block at the build limit fails silently; the red build.tooHigh / build.tooLow overlay never shows
129 ServerPlayer.getIpAddress skip:server for ban-ip and the dedicated server log
130 ServerPlayer.updateOptions port crates/horizon-client/src/lan/hub.rs::Hub::process_inbox the ClientInformation arm: view distance, main hand, model parts and chat visibility are kept
131 ServerPlayer.clientInformation skip:java getter
132 ServerPlayer.sendServerStatus port crates/horizon-client/src/lan/hub.rs::Hub::place_new_player ServerData with the motd and icon at join
133 ServerPlayer.updateInvisibilityStatus missing player: a spectator is not made invisible, so others see a full player model flying around
134 ServerPlayer.drop port crates/horizon-client/src/game.rs::Game::player_drop item_dropped and drop statistics, thrower set
135 ServerPlayer.calculateGameModeForNewPlayer port crates/horizon-client/src/game/lan.rs::Game::lan_guest_joined default or forced game mode for a new or force-gamemode guest
136 ServerPlayer.storeGameTypes port crates/horizon-client/src/save.rs::Level::player_tag gap: minor: playerGameType only; previousPlayerGameType is not saved, so the game mode switcher forgets the previous mode after a reload
137 ServerPlayer.shouldFilterMessageTo skip:service text filtering
138 ServerPlayer.mayInteract inline crates/horizon-client/src/game/lan_actions.rs::Game::under_spawn_protection gap: minor: same as ServerLevel.mayInteract, no world border check
139 ServerPlayer.onItemPickup missing player: the You've Got a Friend in Me advancement (thrown_item_picked_up_by_player) can never be earned
140 ServerPlayer.getChatSession skip:java getter with an expiry check
141 ServerPlayer.startRiding inline crates/horizon-client/src/game/lan_entities.rs::Game::lan_riding gap: minor: SetPassengers goes out, but the mount's active effects (a horse's speed) are not sent to the rider
142 ServerPlayer.removeVehicle inline crates/horizon-client/src/game/lan_entities.rs::Game::lan_riding gap: minor: SetPassengers updates, vehicle effects are not removed from the rider
143 ServerPlayer.getKnownSpeed port crates/horizon-client/src/game/spear.rs::Game::known_player_movement gap: minor: ignores the vehicle's speed for a rider who is not steering
144 ServerPlayer.onEquippedItemBroken port crates/horizon-client/src/game.rs::Game::damage_held gap: minor: only the held item counts toward the broken statistic; breaking armour is not counted
145 ServerPlayer.registerAndUpdateEnderPearlTicket missing minor: a thrown ender pearl does not keep its chunk loaded; none are saved either
146 ServerPlayer.debugSubscriptions skip:debug debug subscriptions for the debug screen
+146
View File
@@ -0,0 +1,146 @@
ServerPlayerGameMode.changeGameModeForPlayer port crates/horizon-client/src/game/commands.rs::Game::set_game_mode same-mode check, mode switch, abilities; a LAN guest goes through Hub::set_game_mode which also broadcasts PlayerInfo UPDATE_GAME_MODE
ServerPlayerGameMode.setGameModeForPlayer port crates/horizon-client/src/game/game_mode.rs::Game::set_mode previous mode kept, GameType.updatePlayerAbilities applied
ServerPlayerGameMode.isInRangeOfGround missing minor: spectator to creative near the ground keeps flying (set_mode always sets flying); vanilla stops flying within 1 block of the ground
ServerPlayerGameMode.incrementDestroyProgress inline crates/horizon-client/src/game/lan_actions.rs::Game::guest_dig_feedback gap: minor: crack stage is the client formula (progress*10 - 1), so other players' cracks on a guest's block run one stage behind the server value
ServerPlayerGameMode.debugLogging skip:debug DEBUG_BLOCK_BREAK logging
ServerPlayerGameMode.abortDestroyBlock inline crates/horizon-client/src/game/lan_actions.rs::Game::lan_guest_packet the abort action clears the guest's crack for everyone; no separate check of a mismatched destroy position
ServerPlayerGameMode.destroyAndAck missing minor: guest_destroy ignores whether the break succeeded, so a refused break never sends the block back to the guest
SimulationChunkTracker.getLevel port crates/horizon-client/src/ticket_levels.rs::Map::get simulation level per chunk, 33 where no ticket reaches
SimulationChunkTracker.setLevel inline crates/horizon-client/src/ticket_levels.rs::compute the whole level map is rebuilt from player and forced tickets instead of updated per node
ThreadedLevelLightEngine.checkBlock inline crates/horizon-client/src/light.rs::relight a block change relights resident chunks directly, no queued PRE_UPDATE task
ThreadedLevelLightEngine.updateChunkStatus skip:other Horizon lights a chunk in one flood fill and keeps no per-section light state to reset
ThreadedLevelLightEngine.updateSectionStatus skip:other no per-section empty flags: light_chunk reads the sections directly
ThreadedLevelLightEngine.propagateLightSources inline crates/horizon-client/src/light.rs::light_chunk light_chunk seeds sky and block sources and propagates in one pass
ThreadedLevelLightEngine.setLightEnabled skip:other no light-enabled flag per chunk; relight only touches resident, lit chunks
ThreadedLevelLightEngine.queueSectionData inline crates/horizon-client/src/light.rs::update_light_layers light layers from a chunk packet are applied at once, not queued
ThreadedLevelLightEngine.addTask skip:java light thread task queue
ThreadedLevelLightEngine.retainData skip:other no retained light data between chunk statuses
ThreadedLevelLightEngine.initializeLight skip:other INITIALIZE_LIGHT step marks sections and enables light; Horizon has no such step before light_chunk
ThreadedLevelLightEngine.lightChunk port crates/horizon-client/src/light.rs::light_chunk the chunk's light is computed from its 3x3 neighbourhood
ThreadedLevelLightEngine.tryScheduleUpdate skip:java schedules the light thread
ThreadedLevelLightEngine.runUpdate inline crates/horizon-client/src/light.rs::relight runLightUpdates: decrease then increase passes, run directly on the changed positions
ThreadedLevelLightEngine.waitForPendingTasks skip:java future that completes when the light queue drains
ThrottlingChunkTaskDispatcher.popTasks skip:other caps chunk tasks in flight; Horizon schedules chunk work on its own worker pool
ThrottlingChunkTaskDispatcher.getDebugStatus skip:debug
Ticket.toString skip:debug
Ticket.decreaseTicksLeft missing minor: only player and forced tickets exist; timed tickets (ender pearl 40, portal 300, post teleport 5 ticks) are not modelled
Ticket.isTimedOut missing minor: no timed tickets, so nothing expires
WorldGenRegion.<init> port crates/horizon-world/src/worldgen/feature_region.rs::TerrainRegion::new the region is a set of chunks around the centre
WorldGenRegion.hasChunk port crates/horizon-world/src/worldgen/feature_region.rs::TerrainRegion::chunk a chunk is there when it is in the region's index, not by the step's dependency distance
WorldGenRegion.warnIfReadOutsideWriteZone skip:debug logs an unsafe terrain read
WorldGenRegion.findBlocksIn skip:debug only adds the read-zone warnings to the default scan
WorldGenRegion.isWithinWriteZone port crates/horizon-world/src/worldgen/write_zone.rs::GenerationWriteZone::contains_block Chebyshev distance to the centre chunk within the write radius
LevelLoadProgressTracker.start inline crates/horizon-client/src/level_loading.rs::progress weights 10 + player chunks; no persistent (forced) chunk stage
LevelLoadProgressTracker.update inline crates/horizon-client/src/level_loading.rs::progress player chunks ready out of 49
LevelLoadProgressTracker.finishSegment inline crates/horizon-client/src/level_loading.rs::progress the 10 weight prepare segment counts as finished
LevelLoadProgressTracker.tracksStage inline crates/horizon-client/src/level_loading.rs::progress both stages tracked, player chunks included
LevelLoadProgressTracker.updateProgress port crates/horizon-client/src/level_loading.rs::progress
LoggingLevelLoadListener skip:server console progress log of a dedicated server or integrated server start
CompoundContainer.isEmpty port crates/horizon-client/src/game/machines.rs::Containers::is_empty a View of both halves is empty when every slot is
CompoundContainer.contains inline crates/horizon-client/src/game/block_entity_anims.rs::Game::container_openers_changed an opener of a chest counts on both halves (chest_other_half)
CompoundContainer.getItem port crates/horizon-client/src/game/machines.rs::Containers::get View::locate picks the half; lan/menu.rs Slots::get does the same for a guest's menu
CompoundContainer.removeItem inline crates/horizon-client/src/game/machines.rs::Game::slot_mut_at View::locate picks the half, the caller splits the stack
CompoundContainer.removeItemNoUpdate inline crates/horizon-client/src/game/machines.rs::Game::slot_mut_at View::locate picks the half, the caller takes the slot
CompoundContainer.setItem inline crates/horizon-client/src/game/machines.rs::Game::slot_mut_at View::locate picks the half
CompoundContainer.stillValid port crates/horizon-client/src/lan/menu.rs::Slots::still_valid both halves must still be there and in reach
CompoundContainer.canPlaceItem port crates/horizon-client/src/game/machines.rs::Containers::can_place
Container.countItem port crates/horizon-client/src/mobs/villager.rs::Ext::count_item villager inventory only, the one caller that needs it
Container.hasAnyOf inline crates/horizon-client/src/mobs/villager.rs::Ext::take_half_stack TradeWithVillager's hasAnyOf gate: no wanted item in the inventory, nothing is thrown
Container.hasAnyMatching inline crates/horizon-client/src/mobs/villager_brain.rs::harvest_tick Villager.hasFarmSeeds gate: a farmer sows only when a plantable seed is in the inventory; the hopper checks of chiseled bookshelf and jukebox canTakeItem are not ported as such
Container.getSlot port crates/horizon-client/src/game/commands/items.rs::Game::slot_get /item and execute if items read a container slot by number
Container.ContainerIterator.next skip:java iterator over slots
ContainerHelper.removeItem skip:java NonNullList helper: split a stack in a slot Vec; block entities take from their own slot vector
ContainerHelper.takeItem skip:java NonNullList helper: Option::take on the slot
ContainerHelper.clearOrCountMatchingItems port crates/horizon-client/src/game/commands.rs::Game::clear_matching /clear over main, armor, offhand, crafting grid and carried stack, count only when max is 0
DifficultyInstance.isHard skip:other no vanilla caller (isHarderThan is what Illusioner uses)
DifficultyInstance.getSpecialMultiplier port crates/horizon-client/src/mobs/spawning.rs::LocalDifficulty::special
DifficultyInstance.calculateDifficulty port crates/horizon-client/src/mobs/spawning.rs::LocalDifficulty::new
InteractionHand.asArm inline crates/horizon-client/src/mobs/ai.rs::Mob::swing_hand off_hand != main arm left; the player's first person hand does the same in game.rs hand_geometry
InteractionResult.Success.heldItemTransformedTo skip:java result builder; Horizon replaces the held item in place where the item is used
ItemStackWithSlot.isValidInContainer port crates/horizon-client-core/src/block_entity_nbt.rs::items slots outside 0..size are dropped when items load
LockCode.canUnlock missing minor: a lock on a container is kept in the NBT but never checked, so any player opens a command-locked chest
RandomSequences.createSequence port crates/horizon-items/src/random_sequences.rs::create
RandomSequences.DirtyMarkingRandomSource.nextInt skip:java marks the saved data dirty on each draw; Horizon saves every sequence
RandomSequences.DirtyMarkingRandomSource.equals skip:java wrapper equality
RandomizableContainer.trySaveLootTable port crates/horizon-client-core/src/block_entity_nbt.rs::Fields::loot_table saves LootTable and a non-zero seed, no items
SimpleContainer.getItem port crates/horizon-world/src/simple_container.rs::SimpleContainer::get library port; villager and piglin inventories are plain vectors
SimpleContainer.removeAllItems port crates/horizon-world/src/simple_container.rs::SimpleContainer::remove_all
SimpleContainer.removeItemNoUpdate port crates/horizon-world/src/simple_container.rs::SimpleContainer::remove_no_update
SimpleContainer.setItem port crates/horizon-world/src/simple_container.rs::SimpleContainer::set
SimpleContainer.isEmpty port crates/horizon-world/src/simple_container.rs::SimpleContainer::is_empty
SimpleContainer.fillStackedContents skip:other no vanilla caller: SimpleContainer is never a recipe input
SimpleContainer.toString skip:debug
SimpleContainer.moveItemToEmptySlots inline crates/horizon-world/src/simple_container.rs::SimpleContainer::add second pass of addItem; the villager's Ext::add_item does the same
SimpleContainer.moveItemToOccupiedSlotsWithSameType inline crates/horizon-world/src/simple_container.rs::SimpleContainer::add first pass of addItem
SimpleContainer.moveItemsBetweenStacks inline crates/horizon-world/src/simple_container.rs::SimpleContainer::add the grow and shrink with the per-stack limit
SimpleContainer.fromItemList inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt villager and piglin Inventory read; the piglin list is cut to 8 instead of re-added
SimpleContainer.storeAsItemList inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt villager and piglin Inventory written
Stopwatches.unpack port crates/horizon-client/src/stopwatches.rs::Stopwatches::load
Stopwatches.pack port crates/horizon-client/src/stopwatches.rs::Stopwatches::save
Stopwatches.add port crates/horizon-client/src/stopwatches.rs::Stopwatches::create
Stopwatches.update port crates/horizon-client/src/stopwatches.rs::Stopwatches::restart only the restart update that /stopwatch uses
Stopwatches.remove port crates/horizon-client/src/stopwatches.rs::Stopwatches::remove
Stopwatches.isDirty inline crates/horizon-client/src/stopwatches.rs::Stopwatches::save save skips the write when not dirty and empty
AttributeType.ofInterpolated skip:data attribute type definitions and codecs
AttributeType.ofNotInterpolated skip:data attribute type definitions and codecs
AttributeType.createModifierCodec skip:data attribute type definitions and codecs
AttributeType.checkAllowedModifier skip:data attribute type definitions and codecs
BedRule.Rule.test inline crates/horizon-client/src/game.rs::Game::try_sleep WHEN_DARK is the hard-coded night or thunder check; ALWAYS and NEVER are in bed_sets_spawn and the dimension checks
EnvironmentAttribute.valueCodec skip:data codec
EnvironmentAttribute.Builder.build skip:data attribute definition builder
EnvironmentAttributeMap.applyModifier inline crates/horizon-client/src/environment.rs::Environment::value gap: minor: only multiply and override are applied for visual tracks; and, or and maximum tracks are read by their own users
EnvironmentAttributeMap.equals skip:java
EnvironmentAttributeMap.Builder.modify skip:java builder
EnvironmentAttributeMap.Builder.build skip:java builder
EnvironmentAttributeMap.Entry.createCodec skip:data codec
EnvironmentAttributeMap.Entry.createFullCodec skip:data codec
EnvironmentAttributeProbe.reset skip:other Horizon keeps no probe state: render recomputes the biome weights each frame
EnvironmentAttributeProbe.getValue inline crates/horizon-client/src/game.rs::Game::render sky, fog and water fog are blended from Gaussian biome weights at the camera each frame, no last and new tick lerp
EnvironmentAttributeProbe.ValueProbe.getValueFromLevel inline crates/horizon-client/src/environment.rs::Environment::sample dimension and timeline value; biome blend is applied by the caller
EnvironmentAttributeProbe.ValueProbe.tick port crates/horizon-client/src/biome.rs::gaussian_weights the per-tick Gaussian sampling of noise biomes around the camera
EnvironmentAttributeProbe.ValueProbe.get inline crates/horizon-client/src/game.rs::Game::render per frame values from the camera position instead of lerping last and new tick values
EnvironmentAttributeReader.getValue skip:java overload that centres a BlockPos and passes no interpolator
EnvironmentAttributeSystem.bakeLayerSampler skip:java folds leading constant layers into the base value; load_dimension builds its base values the same way
EnvironmentAttributeSystem.addStaticLayers inline crates/horizon-client/src/environment.rs::Environment::load_dimension dimension attributes become base values; biome attributes are read in Biomes::load
EnvironmentAttributeSystem.addDynamicLayers inline crates/horizon-client/src/environment.rs::Environment::sample gap: minor: only day.json drives the visual attributes here; moon, early game and villager timelines are read by moon, patrol and villager code; weather is apply_weather
EnvironmentAttributeSystem.addBiomeLayer inline crates/horizon-client/src/biome.rs::Biomes::load biome attributes (sky, fog, water fog, spawns, fire burnout) are read into BiomeInfo
EnvironmentAttributeSystem.addBiomeLayerForAttribute inline crates/horizon-client/src/biome.rs::blend_rgb gap: minor: only sky, fog and water fog colours are blended by Gaussian weights; other biome attributes use the biome at the position
EnvironmentAttributeSystem.getDimensionValue inline crates/horizon-client/src/environment.rs::Environment::sample
EnvironmentAttributeSystem.getValue inline crates/horizon-client/src/environment.rs::Environment::sample the sky state at a time of day; other attributes are read straight from dimension and biome data by their users
EnvironmentAttributeSystem.getConstantBaseValue skip:debug VisibleForTesting
EnvironmentAttributeSystem.isAffectedByPosition skip:debug VisibleForTesting
EnvironmentAttributeSystem.Builder.addConstantLayer inline crates/horizon-client/src/environment.rs::Environment::load_dimension dimension attributes inserted as base values
EnvironmentAttributeSystem.Builder.addConstantEntry inline crates/horizon-client/src/environment.rs::Environment::load_dimension
EnvironmentAttributeSystem.Builder.addLayer skip:java builder
EnvironmentAttributeSystem.Builder.addTimelineLayer inline crates/horizon-client/src/environment.rs::Environment::load_dimension day timeline tracks loaded (overworld only)
EnvironmentAttributeSystem.Builder.addTimelineLayerForAttribute inline crates/horizon-client/src/environment.rs::Environment::load_dimension one Track per attribute with its easing
EnvironmentAttributeSystem.ValueSampler.getDimensionValue inline crates/horizon-client/src/environment.rs::Environment::sample no per-tick cache: recomputed per frame
EnvironmentAttributeSystem.ValueSampler.getValue inline crates/horizon-client/src/environment.rs::Environment::sample
EnvironmentAttributeSystem.ValueSampler.computeValuePositional inline crates/horizon-client/src/game.rs::Game::render base, timeline track, then biome blend, then weather, in that order
EnvironmentAttributeSystem.ValueSampler.computeValueNotPositional inline crates/horizon-client/src/environment.rs::Environment::sample base then timeline track
EnvironmentAttributes.register skip:data attribute registry
WeatherAttributes.addBuiltinLayers port crates/horizon-client/src/environment.rs::apply_weather rain and thunder layers over sky, fog, cloud, sky light, stars and sunrise; bees staying in the hive is bees_stay_in_hive in bee.rs
WeatherAttributes.addLayer port crates/horizon-client/src/environment.rs::apply_weather rain level minus thunder level, then thunder level, each lerped over the value
BooleanModifier.apply port crates/horizon-client/src/patrol.rs::BoolTrack::apply and, or, xor, nand, nor, xnor over the timeline track value
ColorModifier.BlendToGray.lerp skip:other only lerps blend_to_gray arguments between keyframes; no timeline uses that modifier
ListModifier.Append.apply inline crates/horizon-client/src/animate_tick.rs::AnimateTables::load a biome's ambient_particles list is its argument over an empty dimension list
MobSpawnSettingsModifier.Overlay.apply inline crates/horizon-client/src/biome.rs::Biomes::load no dimension sets natural_mob_spawns, so the overlay over the empty default is the biome's own spawns
ClockTimeMarker.getRepetitionCount skip:other no vanilla caller
ClockTimeMarker.resolveTimeToMoveTo port crates/horizon-client/src/game/chat.rs::TimeMarker::resolve
ClockTimeMarker.occursAt port crates/horizon-client/src/game/chat.rs::TimeMarker::occurs_at
ClockTimeMarker.durationToNext inline crates/horizon-client/src/game/chat.rs::TimeMarker::resolve the d > 0 else period + d step
ServerClockManager.init inline crates/horizon-client/src/game/chat.rs::Game::build_registries overworld timelines and their time markers are loaded; the End clock runs with game time
ServerClockManager.getInstance skip:java clock lookup; Horizon keeps one overworld clock in ui.clock
ServerClockManager.setTotalTicks inline crates/horizon-client/src/game/commands.rs::Game::cmd_time /time set <ticks>
ServerClockManager.moveToTimeMarker inline crates/horizon-client/src/game/commands.rs::Game::cmd_time /time set <marker>: not found, already there, or moved
ServerClockManager.addTicks inline crates/horizon-client/src/game/commands.rs::Game::cmd_time /time add, floored at 0
ServerClockManager.isAtTimeMarker inline crates/horizon-client/src/game/raids.rs::Game::tick_village_siege ROLL_VILLAGE_SIEGE marker as tick 18000 of the day
ServerClockManager.commandTimeMarkersForClock inline crates/horizon-client/src/game/chat.rs::Game::build_registries markers with show_in_commands go to the command suggestions
ServerClockManager.ServerClockInstance.loadFrom port crates/horizon-client/src/game/chat.rs::Game::load_world_state total ticks come from level data; rate, partial tick and paused are read from world_clocks.dat
ServerClockManager.ServerClockInstance.packState port crates/horizon-client/src/game/chat.rs::Game::save_world_state
WorldClocks.bootstrap skip:data clock registration
CombatTracker.getMessageForAssistedFall port crates/horizon-client/src/game/combat.rs::Game::combat_death_message_for gap: minor: the .item variants of the fell assist and finish messages are never used, a named weapon is not shown
CombatTracker.getCombatDuration skip:other only feeds ClientboundPlayerCombatEndPacket, which the client ignores
DamageSource.getLocalizedDeathMessage port crates/horizon-client/src/game/combat.rs::Game::combat_death_message_for gap: minor: no .item variant when the killer holds a custom-named item
DamageSource.isCreativePlayer port crates/horizon-world/src/damage_source.rs::DamageSource::creative_player
DamageSource.is port crates/horizon-world/src/damage_source.rs::DamageSource::in_tag tag form; the key form is is_type
1 ServerPlayerGameMode.changeGameModeForPlayer port crates/horizon-client/src/game/commands.rs::Game::set_game_mode same-mode check, mode switch, abilities; a LAN guest goes through Hub::set_game_mode which also broadcasts PlayerInfo UPDATE_GAME_MODE
2 ServerPlayerGameMode.setGameModeForPlayer port crates/horizon-client/src/game/game_mode.rs::Game::set_mode previous mode kept, GameType.updatePlayerAbilities applied
3 ServerPlayerGameMode.isInRangeOfGround missing minor: spectator to creative near the ground keeps flying (set_mode always sets flying); vanilla stops flying within 1 block of the ground
4 ServerPlayerGameMode.incrementDestroyProgress inline crates/horizon-client/src/game/lan_actions.rs::Game::guest_dig_feedback gap: minor: crack stage is the client formula (progress*10 - 1), so other players' cracks on a guest's block run one stage behind the server value
5 ServerPlayerGameMode.debugLogging skip:debug DEBUG_BLOCK_BREAK logging
6 ServerPlayerGameMode.abortDestroyBlock inline crates/horizon-client/src/game/lan_actions.rs::Game::lan_guest_packet the abort action clears the guest's crack for everyone; no separate check of a mismatched destroy position
7 ServerPlayerGameMode.destroyAndAck missing minor: guest_destroy ignores whether the break succeeded, so a refused break never sends the block back to the guest
8 SimulationChunkTracker.getLevel port crates/horizon-client/src/ticket_levels.rs::Map::get simulation level per chunk, 33 where no ticket reaches
9 SimulationChunkTracker.setLevel inline crates/horizon-client/src/ticket_levels.rs::compute the whole level map is rebuilt from player and forced tickets instead of updated per node
10 ThreadedLevelLightEngine.checkBlock inline crates/horizon-client/src/light.rs::relight a block change relights resident chunks directly, no queued PRE_UPDATE task
11 ThreadedLevelLightEngine.updateChunkStatus skip:other Horizon lights a chunk in one flood fill and keeps no per-section light state to reset
12 ThreadedLevelLightEngine.updateSectionStatus skip:other no per-section empty flags: light_chunk reads the sections directly
13 ThreadedLevelLightEngine.propagateLightSources inline crates/horizon-client/src/light.rs::light_chunk light_chunk seeds sky and block sources and propagates in one pass
14 ThreadedLevelLightEngine.setLightEnabled skip:other no light-enabled flag per chunk; relight only touches resident, lit chunks
15 ThreadedLevelLightEngine.queueSectionData inline crates/horizon-client/src/light.rs::update_light_layers light layers from a chunk packet are applied at once, not queued
16 ThreadedLevelLightEngine.addTask skip:java light thread task queue
17 ThreadedLevelLightEngine.retainData skip:other no retained light data between chunk statuses
18 ThreadedLevelLightEngine.initializeLight skip:other INITIALIZE_LIGHT step marks sections and enables light; Horizon has no such step before light_chunk
19 ThreadedLevelLightEngine.lightChunk port crates/horizon-client/src/light.rs::light_chunk the chunk's light is computed from its 3x3 neighbourhood
20 ThreadedLevelLightEngine.tryScheduleUpdate skip:java schedules the light thread
21 ThreadedLevelLightEngine.runUpdate inline crates/horizon-client/src/light.rs::relight runLightUpdates: decrease then increase passes, run directly on the changed positions
22 ThreadedLevelLightEngine.waitForPendingTasks skip:java future that completes when the light queue drains
23 ThrottlingChunkTaskDispatcher.popTasks skip:other caps chunk tasks in flight; Horizon schedules chunk work on its own worker pool
24 ThrottlingChunkTaskDispatcher.getDebugStatus skip:debug
25 Ticket.toString skip:debug
26 Ticket.decreaseTicksLeft missing minor: only player and forced tickets exist; timed tickets (ender pearl 40, portal 300, post teleport 5 ticks) are not modelled
27 Ticket.isTimedOut missing minor: no timed tickets, so nothing expires
28 WorldGenRegion.<init> port crates/horizon-world/src/worldgen/feature_region.rs::TerrainRegion::new the region is a set of chunks around the centre
29 WorldGenRegion.hasChunk port crates/horizon-world/src/worldgen/feature_region.rs::TerrainRegion::chunk a chunk is there when it is in the region's index, not by the step's dependency distance
30 WorldGenRegion.warnIfReadOutsideWriteZone skip:debug logs an unsafe terrain read
31 WorldGenRegion.findBlocksIn skip:debug only adds the read-zone warnings to the default scan
32 WorldGenRegion.isWithinWriteZone port crates/horizon-world/src/worldgen/write_zone.rs::GenerationWriteZone::contains_block Chebyshev distance to the centre chunk within the write radius
33 LevelLoadProgressTracker.start inline crates/horizon-client/src/level_loading.rs::progress weights 10 + player chunks; no persistent (forced) chunk stage
34 LevelLoadProgressTracker.update inline crates/horizon-client/src/level_loading.rs::progress player chunks ready out of 49
35 LevelLoadProgressTracker.finishSegment inline crates/horizon-client/src/level_loading.rs::progress the 10 weight prepare segment counts as finished
36 LevelLoadProgressTracker.tracksStage inline crates/horizon-client/src/level_loading.rs::progress both stages tracked, player chunks included
37 LevelLoadProgressTracker.updateProgress port crates/horizon-client/src/level_loading.rs::progress
38 LoggingLevelLoadListener skip:server console progress log of a dedicated server or integrated server start
39 CompoundContainer.isEmpty port crates/horizon-client/src/game/machines.rs::Containers::is_empty a View of both halves is empty when every slot is
40 CompoundContainer.contains inline crates/horizon-client/src/game/block_entity_anims.rs::Game::container_openers_changed an opener of a chest counts on both halves (chest_other_half)
41 CompoundContainer.getItem port crates/horizon-client/src/game/machines.rs::Containers::get View::locate picks the half; lan/menu.rs Slots::get does the same for a guest's menu
42 CompoundContainer.removeItem inline crates/horizon-client/src/game/machines.rs::Game::slot_mut_at View::locate picks the half, the caller splits the stack
43 CompoundContainer.removeItemNoUpdate inline crates/horizon-client/src/game/machines.rs::Game::slot_mut_at View::locate picks the half, the caller takes the slot
44 CompoundContainer.setItem inline crates/horizon-client/src/game/machines.rs::Game::slot_mut_at View::locate picks the half
45 CompoundContainer.stillValid port crates/horizon-client/src/lan/menu.rs::Slots::still_valid both halves must still be there and in reach
46 CompoundContainer.canPlaceItem port crates/horizon-client/src/game/machines.rs::Containers::can_place
47 Container.countItem port crates/horizon-client/src/mobs/villager.rs::Ext::count_item villager inventory only, the one caller that needs it
48 Container.hasAnyOf inline crates/horizon-client/src/mobs/villager.rs::Ext::take_half_stack TradeWithVillager's hasAnyOf gate: no wanted item in the inventory, nothing is thrown
49 Container.hasAnyMatching inline crates/horizon-client/src/mobs/villager_brain.rs::harvest_tick Villager.hasFarmSeeds gate: a farmer sows only when a plantable seed is in the inventory; the hopper checks of chiseled bookshelf and jukebox canTakeItem are not ported as such
50 Container.getSlot port crates/horizon-client/src/game/commands/items.rs::Game::slot_get /item and execute if items read a container slot by number
51 Container.ContainerIterator.next skip:java iterator over slots
52 ContainerHelper.removeItem skip:java NonNullList helper: split a stack in a slot Vec; block entities take from their own slot vector
53 ContainerHelper.takeItem skip:java NonNullList helper: Option::take on the slot
54 ContainerHelper.clearOrCountMatchingItems port crates/horizon-client/src/game/commands.rs::Game::clear_matching /clear over main, armor, offhand, crafting grid and carried stack, count only when max is 0
55 DifficultyInstance.isHard skip:other no vanilla caller (isHarderThan is what Illusioner uses)
56 DifficultyInstance.getSpecialMultiplier port crates/horizon-client/src/mobs/spawning.rs::LocalDifficulty::special
57 DifficultyInstance.calculateDifficulty port crates/horizon-client/src/mobs/spawning.rs::LocalDifficulty::new
58 InteractionHand.asArm inline crates/horizon-client/src/mobs/ai.rs::Mob::swing_hand off_hand != main arm left; the player's first person hand does the same in game.rs hand_geometry
59 InteractionResult.Success.heldItemTransformedTo skip:java result builder; Horizon replaces the held item in place where the item is used
60 ItemStackWithSlot.isValidInContainer port crates/horizon-client-core/src/block_entity_nbt.rs::items slots outside 0..size are dropped when items load
61 LockCode.canUnlock missing minor: a lock on a container is kept in the NBT but never checked, so any player opens a command-locked chest
62 RandomSequences.createSequence port crates/horizon-items/src/random_sequences.rs::create
63 RandomSequences.DirtyMarkingRandomSource.nextInt skip:java marks the saved data dirty on each draw; Horizon saves every sequence
64 RandomSequences.DirtyMarkingRandomSource.equals skip:java wrapper equality
65 RandomizableContainer.trySaveLootTable port crates/horizon-client-core/src/block_entity_nbt.rs::Fields::loot_table saves LootTable and a non-zero seed, no items
66 SimpleContainer.getItem port crates/horizon-world/src/simple_container.rs::SimpleContainer::get library port; villager and piglin inventories are plain vectors
67 SimpleContainer.removeAllItems port crates/horizon-world/src/simple_container.rs::SimpleContainer::remove_all
68 SimpleContainer.removeItemNoUpdate port crates/horizon-world/src/simple_container.rs::SimpleContainer::remove_no_update
69 SimpleContainer.setItem port crates/horizon-world/src/simple_container.rs::SimpleContainer::set
70 SimpleContainer.isEmpty port crates/horizon-world/src/simple_container.rs::SimpleContainer::is_empty
71 SimpleContainer.fillStackedContents skip:other no vanilla caller: SimpleContainer is never a recipe input
72 SimpleContainer.toString skip:debug
73 SimpleContainer.moveItemToEmptySlots inline crates/horizon-world/src/simple_container.rs::SimpleContainer::add second pass of addItem; the villager's Ext::add_item does the same
74 SimpleContainer.moveItemToOccupiedSlotsWithSameType inline crates/horizon-world/src/simple_container.rs::SimpleContainer::add first pass of addItem
75 SimpleContainer.moveItemsBetweenStacks inline crates/horizon-world/src/simple_container.rs::SimpleContainer::add the grow and shrink with the per-stack limit
76 SimpleContainer.fromItemList inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt villager and piglin Inventory read; the piglin list is cut to 8 instead of re-added
77 SimpleContainer.storeAsItemList inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt villager and piglin Inventory written
78 Stopwatches.unpack port crates/horizon-client/src/stopwatches.rs::Stopwatches::load
79 Stopwatches.pack port crates/horizon-client/src/stopwatches.rs::Stopwatches::save
80 Stopwatches.add port crates/horizon-client/src/stopwatches.rs::Stopwatches::create
81 Stopwatches.update port crates/horizon-client/src/stopwatches.rs::Stopwatches::restart only the restart update that /stopwatch uses
82 Stopwatches.remove port crates/horizon-client/src/stopwatches.rs::Stopwatches::remove
83 Stopwatches.isDirty inline crates/horizon-client/src/stopwatches.rs::Stopwatches::save save skips the write when not dirty and empty
84 AttributeType.ofInterpolated skip:data attribute type definitions and codecs
85 AttributeType.ofNotInterpolated skip:data attribute type definitions and codecs
86 AttributeType.createModifierCodec skip:data attribute type definitions and codecs
87 AttributeType.checkAllowedModifier skip:data attribute type definitions and codecs
88 BedRule.Rule.test inline crates/horizon-client/src/game.rs::Game::try_sleep WHEN_DARK is the hard-coded night or thunder check; ALWAYS and NEVER are in bed_sets_spawn and the dimension checks
89 EnvironmentAttribute.valueCodec skip:data codec
90 EnvironmentAttribute.Builder.build skip:data attribute definition builder
91 EnvironmentAttributeMap.applyModifier inline crates/horizon-client/src/environment.rs::Environment::value gap: minor: only multiply and override are applied for visual tracks; and, or and maximum tracks are read by their own users
92 EnvironmentAttributeMap.equals skip:java
93 EnvironmentAttributeMap.Builder.modify skip:java builder
94 EnvironmentAttributeMap.Builder.build skip:java builder
95 EnvironmentAttributeMap.Entry.createCodec skip:data codec
96 EnvironmentAttributeMap.Entry.createFullCodec skip:data codec
97 EnvironmentAttributeProbe.reset skip:other Horizon keeps no probe state: render recomputes the biome weights each frame
98 EnvironmentAttributeProbe.getValue inline crates/horizon-client/src/game.rs::Game::render sky, fog and water fog are blended from Gaussian biome weights at the camera each frame, no last and new tick lerp
99 EnvironmentAttributeProbe.ValueProbe.getValueFromLevel inline crates/horizon-client/src/environment.rs::Environment::sample dimension and timeline value; biome blend is applied by the caller
100 EnvironmentAttributeProbe.ValueProbe.tick port crates/horizon-client/src/biome.rs::gaussian_weights the per-tick Gaussian sampling of noise biomes around the camera
101 EnvironmentAttributeProbe.ValueProbe.get inline crates/horizon-client/src/game.rs::Game::render per frame values from the camera position instead of lerping last and new tick values
102 EnvironmentAttributeReader.getValue skip:java overload that centres a BlockPos and passes no interpolator
103 EnvironmentAttributeSystem.bakeLayerSampler skip:java folds leading constant layers into the base value; load_dimension builds its base values the same way
104 EnvironmentAttributeSystem.addStaticLayers inline crates/horizon-client/src/environment.rs::Environment::load_dimension dimension attributes become base values; biome attributes are read in Biomes::load
105 EnvironmentAttributeSystem.addDynamicLayers inline crates/horizon-client/src/environment.rs::Environment::sample gap: minor: only day.json drives the visual attributes here; moon, early game and villager timelines are read by moon, patrol and villager code; weather is apply_weather
106 EnvironmentAttributeSystem.addBiomeLayer inline crates/horizon-client/src/biome.rs::Biomes::load biome attributes (sky, fog, water fog, spawns, fire burnout) are read into BiomeInfo
107 EnvironmentAttributeSystem.addBiomeLayerForAttribute inline crates/horizon-client/src/biome.rs::blend_rgb gap: minor: only sky, fog and water fog colours are blended by Gaussian weights; other biome attributes use the biome at the position
108 EnvironmentAttributeSystem.getDimensionValue inline crates/horizon-client/src/environment.rs::Environment::sample
109 EnvironmentAttributeSystem.getValue inline crates/horizon-client/src/environment.rs::Environment::sample the sky state at a time of day; other attributes are read straight from dimension and biome data by their users
110 EnvironmentAttributeSystem.getConstantBaseValue skip:debug VisibleForTesting
111 EnvironmentAttributeSystem.isAffectedByPosition skip:debug VisibleForTesting
112 EnvironmentAttributeSystem.Builder.addConstantLayer inline crates/horizon-client/src/environment.rs::Environment::load_dimension dimension attributes inserted as base values
113 EnvironmentAttributeSystem.Builder.addConstantEntry inline crates/horizon-client/src/environment.rs::Environment::load_dimension
114 EnvironmentAttributeSystem.Builder.addLayer skip:java builder
115 EnvironmentAttributeSystem.Builder.addTimelineLayer inline crates/horizon-client/src/environment.rs::Environment::load_dimension day timeline tracks loaded (overworld only)
116 EnvironmentAttributeSystem.Builder.addTimelineLayerForAttribute inline crates/horizon-client/src/environment.rs::Environment::load_dimension one Track per attribute with its easing
117 EnvironmentAttributeSystem.ValueSampler.getDimensionValue inline crates/horizon-client/src/environment.rs::Environment::sample no per-tick cache: recomputed per frame
118 EnvironmentAttributeSystem.ValueSampler.getValue inline crates/horizon-client/src/environment.rs::Environment::sample
119 EnvironmentAttributeSystem.ValueSampler.computeValuePositional inline crates/horizon-client/src/game.rs::Game::render base, timeline track, then biome blend, then weather, in that order
120 EnvironmentAttributeSystem.ValueSampler.computeValueNotPositional inline crates/horizon-client/src/environment.rs::Environment::sample base then timeline track
121 EnvironmentAttributes.register skip:data attribute registry
122 WeatherAttributes.addBuiltinLayers port crates/horizon-client/src/environment.rs::apply_weather rain and thunder layers over sky, fog, cloud, sky light, stars and sunrise; bees staying in the hive is bees_stay_in_hive in bee.rs
123 WeatherAttributes.addLayer port crates/horizon-client/src/environment.rs::apply_weather rain level minus thunder level, then thunder level, each lerped over the value
124 BooleanModifier.apply port crates/horizon-client/src/patrol.rs::BoolTrack::apply and, or, xor, nand, nor, xnor over the timeline track value
125 ColorModifier.BlendToGray.lerp skip:other only lerps blend_to_gray arguments between keyframes; no timeline uses that modifier
126 ListModifier.Append.apply inline crates/horizon-client/src/animate_tick.rs::AnimateTables::load a biome's ambient_particles list is its argument over an empty dimension list
127 MobSpawnSettingsModifier.Overlay.apply inline crates/horizon-client/src/biome.rs::Biomes::load no dimension sets natural_mob_spawns, so the overlay over the empty default is the biome's own spawns
128 ClockTimeMarker.getRepetitionCount skip:other no vanilla caller
129 ClockTimeMarker.resolveTimeToMoveTo port crates/horizon-client/src/game/chat.rs::TimeMarker::resolve
130 ClockTimeMarker.occursAt port crates/horizon-client/src/game/chat.rs::TimeMarker::occurs_at
131 ClockTimeMarker.durationToNext inline crates/horizon-client/src/game/chat.rs::TimeMarker::resolve the d > 0 else period + d step
132 ServerClockManager.init inline crates/horizon-client/src/game/chat.rs::Game::build_registries overworld timelines and their time markers are loaded; the End clock runs with game time
133 ServerClockManager.getInstance skip:java clock lookup; Horizon keeps one overworld clock in ui.clock
134 ServerClockManager.setTotalTicks inline crates/horizon-client/src/game/commands.rs::Game::cmd_time /time set <ticks>
135 ServerClockManager.moveToTimeMarker inline crates/horizon-client/src/game/commands.rs::Game::cmd_time /time set <marker>: not found, already there, or moved
136 ServerClockManager.addTicks inline crates/horizon-client/src/game/commands.rs::Game::cmd_time /time add, floored at 0
137 ServerClockManager.isAtTimeMarker inline crates/horizon-client/src/game/raids.rs::Game::tick_village_siege ROLL_VILLAGE_SIEGE marker as tick 18000 of the day
138 ServerClockManager.commandTimeMarkersForClock inline crates/horizon-client/src/game/chat.rs::Game::build_registries markers with show_in_commands go to the command suggestions
139 ServerClockManager.ServerClockInstance.loadFrom port crates/horizon-client/src/game/chat.rs::Game::load_world_state total ticks come from level data; rate, partial tick and paused are read from world_clocks.dat
140 ServerClockManager.ServerClockInstance.packState port crates/horizon-client/src/game/chat.rs::Game::save_world_state
141 WorldClocks.bootstrap skip:data clock registration
142 CombatTracker.getMessageForAssistedFall port crates/horizon-client/src/game/combat.rs::Game::combat_death_message_for gap: minor: the .item variants of the fell assist and finish messages are never used, a named weapon is not shown
143 CombatTracker.getCombatDuration skip:other only feeds ClientboundPlayerCombatEndPacket, which the client ignores
144 DamageSource.getLocalizedDeathMessage port crates/horizon-client/src/game/combat.rs::Game::combat_death_message_for gap: minor: no .item variant when the killer holds a custom-named item
145 DamageSource.isCreativePlayer port crates/horizon-world/src/damage_source.rs::DamageSource::creative_player
146 DamageSource.is port crates/horizon-world/src/damage_source.rs::DamageSource::in_tag tag form; the key form is is_type
+105
View File
@@ -0,0 +1,105 @@
DamageSources.source port crates/horizon-client/src/mobs.rs::Damage::of a damage source is a DamageKind plus attacker and origin; type ids are resolved in creatures.rs::damage_type
DamageSources.fireball inline crates/horizon-client/src/game/creatures.rs::damage_type gap: minor: always minecraft:fireball; an owner-less fireball is not the unattributed_fireball type (death message and loot condition only)
DamageSources.explosion inline crates/horizon-client/src/game/creatures.rs::damage_type gap: minor: player_explosion only when the attacker is the player; vanilla uses it whenever a causing entity exists (a creeper too), so that death message differs
FallLocation.blockToFallLocation port crates/horizon-client/src/game/combat.rs::Game::fall_location gap: minor: trapdoors are not mapped to the ladder location, they count as other_climbable
AbsorptionMobEffect.onEffectStarted port crates/horizon-client/src/game/potions.rs::Game::add_player_effect gap: minor: sets absorption to max(current, 4 * (level + 1)) for the player only; a mob given absorption gets none
BadOmenMobEffect.applyEffectTick port crates/horizon-client/src/game/raids.rs::Game::omen_tick bad omen in a village (not peaceful, not spectator, raid below max omen level) becomes Raid Omen 600 ticks and records the position
HealOrHarmMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic instant_health heals 4 << level, instant_damage hurts 6 << level (magic); mobs get the instant effects from splash and cloud code in potions.rs
HungerMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic exhaustion 0.005 * (level + 1) every tick, applied by Game::apply_effect_action; player only like vanilla
InfestedMobEffect.spawnSilverfish inline crates/horizon-client/src/game/potions.rs::Game::infested_hurt the 10 percent roll and the one or two silverfish thrown along the look direction, with the hurt sound; player and mobs
MobEffect.getOrCreateDescriptionId skip:java lazy translation key cache
MobEffect.setBlendDuration inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::tick_spinning nausea fades in over 150 and out over 20 ticks, darkness over 22 (sculk.rs::Game::tick_darkness_blend); no other effect blends
MobEffect.removeAttributeModifiers inline crates/horizon-client/src/game/potions.rs::Game::apply_effect_status modifiers that left the effect list are removed in the diff loop; horizon-world has an unused kernel (effect_attribute_modifiers.rs::remove_modifiers)
MobEffectInstance.<init> port crates/horizon-client/src/effects.rs::EffectInstance::new gap: minor: no showIcon flag, so an effect given without particles still shows its icon; amplifier clamps to 0..255
MobEffectInstance.asDetails inline crates/horizon-client/src/effects.rs::PlayerEffects::saved gap: minor: only id, duration, amplifier, ambient and particles are saved; hidden_effect is lost on save and show_icon is written as the particles flag
MobEffectInstance.setDetailsFrom inline crates/horizon-client/src/effects.rs::EffectInstance::downgrade copies the hidden effect's details when the active one runs out; the copy constructor is Clone
MobEffectInstance.isShorterDurationThan port crates/horizon-client/src/effects.rs::EffectInstance::shorter_than
MobEffectInstance.withScaledDuration inline crates/horizon-client/src/game/potions.rs::Game::cloud_affect the scaled closure: floor(duration * 0.25) at least 1 for lingering clouds; fixed 0.25, the stack's potion_duration_scale is not read
MobEffectInstance.mapDuration inline crates/horizon-client/src/game/potions.rs::Game::splash the (int)(scale * duration + 0.5) of a splash potion on mobs (splash_on_player for the player); potions are never infinite
MobEffectInstance.tickDownDuration port crates/horizon-client/src/effects.rs::EffectInstance::tick_down hidden effect ticks down too; infinite stays
MobEffectInstance.downgradeToHiddenEffect port crates/horizon-client/src/effects.rs::EffectInstance::downgrade gap: minor: mobs keep no hidden effects (Mob::add_effect drops a weaker one)
MobEffectInstance.onMobRemoved inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death oozing, weaving and wind charged run when their bearer dies (player or mob)
MobEffectInstance.onMobHurt inline crates/horizon-client/src/game/potions.rs::Game::infested_hurt only infested reacts to being hurt; called for the player from combat.rs and for mobs from creatures.rs
MobEffectInstance.toString skip:debug debug string
MobEffectInstance.equals skip:java value equality
MobEffectInstance.hashCode skip:java value hash
MobEffectInstance.BlendState.setImmediate missing minor: skipBlending is never used, so nausea and darkness restored on login or a dimension change fade in from 0 instead of starting full
MobEffectInstance.BlendState.getFactor port crates/horizon-client/src/game/fov.rs::Game::nausea_blend lerp of the previous and current factor; darkness has its own in sculk.rs::Game::darkness_blend
MobEffectInstance.Details.create skip:java record constructor for the codec
MobEffectUtil.hasDigSpeed inline crates/horizon-client/src/effects.rs::PlayerEffects::mining_speed_factor haste or conduit power, also read for the arm swing duration in first_person.rs
MobEffectUtil.hasWaterBreathing inline crates/horizon-client/src/effects.rs::PlayerEffects::status water_breathing flag is water breathing or conduit power; breath of the nautilus is its own flag read with it
MobEffectUtil.shouldEffectsRefillAirsupply inline crates/horizon-client/src/motion/environment.rs::MotionWorld::tick_environment_damage air refills unless only breath of the nautilus is active
OozingMobEffect.onMobRemoved inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death oozing branch: two slimes, fewer when slimes within 2 blocks fill max_entity_cramming
OozingMobEffect.spawnSlimeOffspring inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death size 2 slime half a block up
PoisonMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic one magic damage while above 1 health; mobs in mobs/ai.rs::tick_effects
PoisonMobEffect.shouldApplyEffectTickThisTick port crates/horizon-client/src/effects.rs::periodic 25 >> level interval
RegenerationMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic heal 1; mobs in mobs/ai.rs::tick_effects
RegenerationMobEffect.shouldApplyEffectTickThisTick port crates/horizon-client/src/effects.rs::periodic 50 >> level interval
SaturationMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic Eat(level + 1, 1.0) applied to the food data; player only
WeavingMobEffect.onMobRemoved inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death weaving branch (killed, player or mob_griefing) calls spawn_cobwebs_around: 2 or 3 cobwebs among 15 random blocks
WitherMobEffect.shouldApplyEffectTickThisTick port crates/horizon-client/src/effects.rs::periodic 40 >> level interval; mobs in mobs/ai.rs::tick_effects take magic damage, not wither damage
AbstractInterpolationHandler.adjustInterpolationPosition skip:other Horizon moves a remote entity only through SteppedInterpolation, so there is no client-side move to add to the target
AbstractInterpolationHandler.adjustInterpolationTargetFromDeltas skip:other same: the entity never drifts from where the interpolation put it (see SteppedInterpolation::interpolate)
AbstractInterpolationHandler.setLastPositionAndRotation skip:other only feeds the delta adjustments above; Horizon's own last is the start of the step
AgeableMob.mobInteract missing player: using a golden dandelion on a baby animal does nothing; vanilla uses one up, locks its growth and plays a sound (no golden_dandelion handling exists)
AgeableMob.canUseGoldenDandelion missing player: part of the golden dandelion age lock, which is not implemented
AgeableMob.setAgeLockedData missing player: nothing toggles AgeLocked in play (only NBT, buckets and spawn data set it); golden dandelion age lock is missing
AgeableMob.setAgeLocked missing player: golden dandelion consumption, persistence and the use or unuse sound are missing
AgeableMob.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the baby flag is sent (baby_index); the age-locked entry is not
AgeableMob.getAge inline crates/horizon-client/src/game/remote_mob_data.rs::apply m.extra.age on the host; a remote client only learns baby or not (-1 or 0)
AgeableMob.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Age, ForcedAge and AgeLocked for creatures
AgeableMob.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt Age, ForcedAge and AgeLocked
AgeableMob.makeAgeLockedParticle missing player: no age lock particle timer, so no pause or reset growth particles; the particle types exist
AnimationState.getTimeInMillis port crates/horizon-client/src/mobs/keyframes.rs::AnimationState::millis
AreaEffectCloud.defineSynchedData port crates/horizon-client/src/game/lan_entities.rs::Game::lan_projectile_states radius, waiting and particle for dragon breath and lingering clouds; read back in remote_projectiles.rs::remote_projectile_data
AreaEffectCloud.setRadius inline crates/horizon-client/src/game/potions.rs::Game::tick_potion_cloud radius shrinks per tick and per victim; the 0..32 clamp is not needed
AreaEffectCloud.refreshDimensions inline crates/horizon-client/src/game/potions.rs::Game::tick_potion_cloud the affected box is rebuilt from the radius every check
AreaEffectCloud.readAdditionalSaveData missing minor: clouds are not loaded from a world; a saved lingering or breath cloud, or one made by /summon, does not appear
AreaEffectCloud.addAdditionalSaveData missing minor: a lingering potion or dragon breath cloud is gone after the world is saved and reopened
AreaEffectCloud.get skip:other entity data component accessor for predicates and /data; Horizon keeps the cloud's potion in PotionCloud
AreaEffectCloud.applyImplicitComponents inline crates/horizon-client/src/game/potions.rs::Game::splash the lingering branch takes the thrown stack's potion effects and colour; potion_duration_scale is fixed at 0.25
AreaEffectCloud.applyImplicitComponent inline crates/horizon-client/src/game/potions.rs::Game::splash same: potion contents only
Avatar.defineSynchedData port crates/horizon-client/src/lan/hub.rs::Hub::player_state gap: minor: skin parts (entry 16) are sent, the main hand entry is not
Avatar.isModelPartShown missing player: Options > Skin Customization is an inactive button and the client always sends all parts shown, so hat, jacket, sleeve and pants layers and the cape cannot be switched off
Bucketable.loadDefaultDataFromBucketTag port crates/horizon-client/src/entity_nbt.rs::load_bucket_data NoAI, Silent, NoGravity, Glowing, Invulnerable, PersistenceRequired and Health
ContainerUser.getLivingEntity skip:java interface cast; every container user here is the player
ConversionTracker.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: DrownedConversionTime and InWaterTime are kept from the loaded NBT or written as -1; live progress is not saved, and skeletons write no FreezingTime or StrayConversionTime
ConversionTracker.readAdditionalSaveData missing minor: saved conversion and affliction times are not read, a half converted zombie or skeleton starts over
ConversionTracker.doConversion inline crates/horizon-client/src/mobs/undead.rs::custom_server_ai_step gap: player: zombie to drowned, husk to zombie and skeleton to stray (and piglin to zombified piglin, hoglin to zoglin) spawn a fresh mob through SpawnKind, so the old one's armor, held items, name tag and effects are lost
ConversionType.convertCommon port crates/horizon-client/src/game/zombie_villagers.rs::carry_over gap: player: only villager and zombie villager conversions use it (dispenser.rs::Game::convert_mob copies the flags for shearing); drowned, stray, zombified piglin, zoglin, frog and witch conversions go through SpawnKind and carry only baby, yaw and persistence, so name tag, armor, held items and effects are lost; absorption and tags are never copied
ConversionType.copyComponent inline crates/horizon-client/src/game/zombie_villagers.rs::carry_over gap: minor: the custom name is kept by carry_over and convert_mob, custom data is not
Crackiness.byFraction port crates/horizon-client/src/mobs/golem.rs::crackiness iron golem thresholds 0.75, 0.5, 0.25; wolf armor 0.95, 0.69, 0.32 are in mobs/render.rs::layers and mobs.rs::Mob::hurt_wolf_armor
Crackiness.byDamage inline crates/horizon-client/src/mobs/render.rs::layers wolf armor: durability left over max picks the crack texture; a golem uses its health instead
Display.onSyncedDataUpdated port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::metadata gap: minor: text displays a remote server sends only; start delay, duration and render state flags are tracked, width and height do not update a culling box
Display.createTransformation port crates/horizon-client/src/text_display.rs::TextDisplayData::matrix translation, left rotation, scale, right rotation plus the billboard turn
Display.tick port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick start tick, interpolation duration and render state refresh; text displays only
Display.defineSynchedData port crates/horizon-client/src/text_display.rs::TextDisplayData::default the defaults of entries 8 to 22
Display.readAdditionalSaveData missing player: display entities saved in a world (made by commands, datapacks or maps) are not loaded; the local game has no display entity, only a remote server's text displays are drawn
Display.setTransformation missing minor: server side setter; there is no local display entity
Display.addAdditionalSaveData missing minor: no local display entity to save
Display.getInterpolatedBoundingBox missing minor: no culling box, a text display is drawn whenever it is within its view range, even off screen
Display.setBrightnessOverride missing minor: server side setter; there is no local display entity
Display.getBrightnessOverride inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry the packed sky and block light of the brightness entry (-1 uses the world light)
Display.calculateInterpolationProgress port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::progress
Display.updateCulling missing minor: width and height are stored but no culling box is built
Display.shouldRenderAtSqrDistance inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry view_range * 64 * view scale squared
Display.getTeamColor missing minor: glow_color_override is read but a glowing display gets no coloured outline
Display.createFreshRenderState inline crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick the copy of the synced data when no interpolation runs
Display.createInterpolatedRenderState inline crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick the new start state is the old one blended to the last drawn progress (TextDisplayData::blend)
Display.BlockDisplay missing player: block displays a server or map places are not drawn at all (only text displays are); command and datapack made decorations are invisible
Display.ItemDisplay missing player: item displays (floating items, custom models on servers) are not drawn at all; only text displays are
Display.TextDisplay.defineSynchedData port crates/horizon-client/src/text_display.rs::TextDisplayData::default text, line width 200, background 0x40000000, opacity -1, flags 0
Display.TextDisplay.onSyncedDataUpdated port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::metadata the text render state ids mark the render state dirty
Display.TextDisplay.loadFlag missing minor: reads the NBT booleans into the style flags; no local display entity
Display.TextDisplay.readAdditionalSaveData missing player: text displays saved in a world are not loaded (see Display.readAdditionalSaveData)
Display.TextDisplay.storeFlag missing minor: writes the style flags to NBT; no local display entity
Display.TextDisplay.addAdditionalSaveData missing minor: no local display entity to save
Display.TextDisplay.updateRenderSubState port crates/horizon-client/src/text_display.rs::TextDisplayData::blend text, line width, opacity and background blend over the interpolation
Display.TextDisplay.createFreshTextRenderState inline crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick the plain copy of the synced text data
Display.TextDisplay.createInterpolatedTextRenderState port crates/horizon-client/src/text_display.rs::TextDisplayData::blend opacity and the four background channels interpolate linearly
Display.TextDisplay.cacheDisplay inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry the split lines and widths are cached in RemoteTextDisplay::lines until the render state changes
Display.TransformationInterpolator.get port crates/horizon-client/src/text_display.rs::TextDisplayData::blend translation and scale lerp, both rotations slerp
DropChances.filterDefaultValues missing minor: drop_chances is neither read from nor written to a mob's NBT, so custom drop chances (guaranteed drops) are lost on save and reload
DropChances.toEnumMap missing minor: the saved drop_chances map is not read back, a loaded mob uses the default 0.085 or species rule
DropChances.withEquipmentChance port crates/horizon-client/src/mobs/finalize.rs::set_drop_chance stored per slot in extra.drop_chances
ElytraAnimationState.tick port crates/horizon-client/src/mobs.rs::ElytraAnimation::tick
1 DamageSources.source port crates/horizon-client/src/mobs.rs::Damage::of a damage source is a DamageKind plus attacker and origin; type ids are resolved in creatures.rs::damage_type
2 DamageSources.fireball inline crates/horizon-client/src/game/creatures.rs::damage_type gap: minor: always minecraft:fireball; an owner-less fireball is not the unattributed_fireball type (death message and loot condition only)
3 DamageSources.explosion inline crates/horizon-client/src/game/creatures.rs::damage_type gap: minor: player_explosion only when the attacker is the player; vanilla uses it whenever a causing entity exists (a creeper too), so that death message differs
4 FallLocation.blockToFallLocation port crates/horizon-client/src/game/combat.rs::Game::fall_location gap: minor: trapdoors are not mapped to the ladder location, they count as other_climbable
5 AbsorptionMobEffect.onEffectStarted port crates/horizon-client/src/game/potions.rs::Game::add_player_effect gap: minor: sets absorption to max(current, 4 * (level + 1)) for the player only; a mob given absorption gets none
6 BadOmenMobEffect.applyEffectTick port crates/horizon-client/src/game/raids.rs::Game::omen_tick bad omen in a village (not peaceful, not spectator, raid below max omen level) becomes Raid Omen 600 ticks and records the position
7 HealOrHarmMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic instant_health heals 4 << level, instant_damage hurts 6 << level (magic); mobs get the instant effects from splash and cloud code in potions.rs
8 HungerMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic exhaustion 0.005 * (level + 1) every tick, applied by Game::apply_effect_action; player only like vanilla
9 InfestedMobEffect.spawnSilverfish inline crates/horizon-client/src/game/potions.rs::Game::infested_hurt the 10 percent roll and the one or two silverfish thrown along the look direction, with the hurt sound; player and mobs
10 MobEffect.getOrCreateDescriptionId skip:java lazy translation key cache
11 MobEffect.setBlendDuration inline crates/horizon-client/src/screen_effects.rs::ScreenEffects::tick_spinning nausea fades in over 150 and out over 20 ticks, darkness over 22 (sculk.rs::Game::tick_darkness_blend); no other effect blends
12 MobEffect.removeAttributeModifiers inline crates/horizon-client/src/game/potions.rs::Game::apply_effect_status modifiers that left the effect list are removed in the diff loop; horizon-world has an unused kernel (effect_attribute_modifiers.rs::remove_modifiers)
13 MobEffectInstance.<init> port crates/horizon-client/src/effects.rs::EffectInstance::new gap: minor: no showIcon flag, so an effect given without particles still shows its icon; amplifier clamps to 0..255
14 MobEffectInstance.asDetails inline crates/horizon-client/src/effects.rs::PlayerEffects::saved gap: minor: only id, duration, amplifier, ambient and particles are saved; hidden_effect is lost on save and show_icon is written as the particles flag
15 MobEffectInstance.setDetailsFrom inline crates/horizon-client/src/effects.rs::EffectInstance::downgrade copies the hidden effect's details when the active one runs out; the copy constructor is Clone
16 MobEffectInstance.isShorterDurationThan port crates/horizon-client/src/effects.rs::EffectInstance::shorter_than
17 MobEffectInstance.withScaledDuration inline crates/horizon-client/src/game/potions.rs::Game::cloud_affect the scaled closure: floor(duration * 0.25) at least 1 for lingering clouds; fixed 0.25, the stack's potion_duration_scale is not read
18 MobEffectInstance.mapDuration inline crates/horizon-client/src/game/potions.rs::Game::splash the (int)(scale * duration + 0.5) of a splash potion on mobs (splash_on_player for the player); potions are never infinite
19 MobEffectInstance.tickDownDuration port crates/horizon-client/src/effects.rs::EffectInstance::tick_down hidden effect ticks down too; infinite stays
20 MobEffectInstance.downgradeToHiddenEffect port crates/horizon-client/src/effects.rs::EffectInstance::downgrade gap: minor: mobs keep no hidden effects (Mob::add_effect drops a weaker one)
21 MobEffectInstance.onMobRemoved inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death oozing, weaving and wind charged run when their bearer dies (player or mob)
22 MobEffectInstance.onMobHurt inline crates/horizon-client/src/game/potions.rs::Game::infested_hurt only infested reacts to being hurt; called for the player from combat.rs and for mobs from creatures.rs
23 MobEffectInstance.toString skip:debug debug string
24 MobEffectInstance.equals skip:java value equality
25 MobEffectInstance.hashCode skip:java value hash
26 MobEffectInstance.BlendState.setImmediate missing minor: skipBlending is never used, so nausea and darkness restored on login or a dimension change fade in from 0 instead of starting full
27 MobEffectInstance.BlendState.getFactor port crates/horizon-client/src/game/fov.rs::Game::nausea_blend lerp of the previous and current factor; darkness has its own in sculk.rs::Game::darkness_blend
28 MobEffectInstance.Details.create skip:java record constructor for the codec
29 MobEffectUtil.hasDigSpeed inline crates/horizon-client/src/effects.rs::PlayerEffects::mining_speed_factor haste or conduit power, also read for the arm swing duration in first_person.rs
30 MobEffectUtil.hasWaterBreathing inline crates/horizon-client/src/effects.rs::PlayerEffects::status water_breathing flag is water breathing or conduit power; breath of the nautilus is its own flag read with it
31 MobEffectUtil.shouldEffectsRefillAirsupply inline crates/horizon-client/src/motion/environment.rs::MotionWorld::tick_environment_damage air refills unless only breath of the nautilus is active
32 OozingMobEffect.onMobRemoved inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death oozing branch: two slimes, fewer when slimes within 2 blocks fill max_entity_cramming
33 OozingMobEffect.spawnSlimeOffspring inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death size 2 slime half a block up
34 PoisonMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic one magic damage while above 1 health; mobs in mobs/ai.rs::tick_effects
35 PoisonMobEffect.shouldApplyEffectTickThisTick port crates/horizon-client/src/effects.rs::periodic 25 >> level interval
36 RegenerationMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic heal 1; mobs in mobs/ai.rs::tick_effects
37 RegenerationMobEffect.shouldApplyEffectTickThisTick port crates/horizon-client/src/effects.rs::periodic 50 >> level interval
38 SaturationMobEffect.applyEffectTick port crates/horizon-client/src/effects.rs::periodic Eat(level + 1, 1.0) applied to the food data; player only
39 WeavingMobEffect.onMobRemoved inline crates/horizon-client/src/game/potions.rs::Game::effects_on_death weaving branch (killed, player or mob_griefing) calls spawn_cobwebs_around: 2 or 3 cobwebs among 15 random blocks
40 WitherMobEffect.shouldApplyEffectTickThisTick port crates/horizon-client/src/effects.rs::periodic 40 >> level interval; mobs in mobs/ai.rs::tick_effects take magic damage, not wither damage
41 AbstractInterpolationHandler.adjustInterpolationPosition skip:other Horizon moves a remote entity only through SteppedInterpolation, so there is no client-side move to add to the target
42 AbstractInterpolationHandler.adjustInterpolationTargetFromDeltas skip:other same: the entity never drifts from where the interpolation put it (see SteppedInterpolation::interpolate)
43 AbstractInterpolationHandler.setLastPositionAndRotation skip:other only feeds the delta adjustments above; Horizon's own last is the start of the step
44 AgeableMob.mobInteract missing player: using a golden dandelion on a baby animal does nothing; vanilla uses one up, locks its growth and plays a sound (no golden_dandelion handling exists)
45 AgeableMob.canUseGoldenDandelion missing player: part of the golden dandelion age lock, which is not implemented
46 AgeableMob.setAgeLockedData missing player: nothing toggles AgeLocked in play (only NBT, buckets and spawn data set it); golden dandelion age lock is missing
47 AgeableMob.setAgeLocked missing player: golden dandelion consumption, persistence and the use or unuse sound are missing
48 AgeableMob.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the baby flag is sent (baby_index); the age-locked entry is not
49 AgeableMob.getAge inline crates/horizon-client/src/game/remote_mob_data.rs::apply m.extra.age on the host; a remote client only learns baby or not (-1 or 0)
50 AgeableMob.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Age, ForcedAge and AgeLocked for creatures
51 AgeableMob.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt Age, ForcedAge and AgeLocked
52 AgeableMob.makeAgeLockedParticle missing player: no age lock particle timer, so no pause or reset growth particles; the particle types exist
53 AnimationState.getTimeInMillis port crates/horizon-client/src/mobs/keyframes.rs::AnimationState::millis
54 AreaEffectCloud.defineSynchedData port crates/horizon-client/src/game/lan_entities.rs::Game::lan_projectile_states radius, waiting and particle for dragon breath and lingering clouds; read back in remote_projectiles.rs::remote_projectile_data
55 AreaEffectCloud.setRadius inline crates/horizon-client/src/game/potions.rs::Game::tick_potion_cloud radius shrinks per tick and per victim; the 0..32 clamp is not needed
56 AreaEffectCloud.refreshDimensions inline crates/horizon-client/src/game/potions.rs::Game::tick_potion_cloud the affected box is rebuilt from the radius every check
57 AreaEffectCloud.readAdditionalSaveData missing minor: clouds are not loaded from a world; a saved lingering or breath cloud, or one made by /summon, does not appear
58 AreaEffectCloud.addAdditionalSaveData missing minor: a lingering potion or dragon breath cloud is gone after the world is saved and reopened
59 AreaEffectCloud.get skip:other entity data component accessor for predicates and /data; Horizon keeps the cloud's potion in PotionCloud
60 AreaEffectCloud.applyImplicitComponents inline crates/horizon-client/src/game/potions.rs::Game::splash the lingering branch takes the thrown stack's potion effects and colour; potion_duration_scale is fixed at 0.25
61 AreaEffectCloud.applyImplicitComponent inline crates/horizon-client/src/game/potions.rs::Game::splash same: potion contents only
62 Avatar.defineSynchedData port crates/horizon-client/src/lan/hub.rs::Hub::player_state gap: minor: skin parts (entry 16) are sent, the main hand entry is not
63 Avatar.isModelPartShown missing player: Options > Skin Customization is an inactive button and the client always sends all parts shown, so hat, jacket, sleeve and pants layers and the cape cannot be switched off
64 Bucketable.loadDefaultDataFromBucketTag port crates/horizon-client/src/entity_nbt.rs::load_bucket_data NoAI, Silent, NoGravity, Glowing, Invulnerable, PersistenceRequired and Health
65 ContainerUser.getLivingEntity skip:java interface cast; every container user here is the player
66 ConversionTracker.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: DrownedConversionTime and InWaterTime are kept from the loaded NBT or written as -1; live progress is not saved, and skeletons write no FreezingTime or StrayConversionTime
67 ConversionTracker.readAdditionalSaveData missing minor: saved conversion and affliction times are not read, a half converted zombie or skeleton starts over
68 ConversionTracker.doConversion inline crates/horizon-client/src/mobs/undead.rs::custom_server_ai_step gap: player: zombie to drowned, husk to zombie and skeleton to stray (and piglin to zombified piglin, hoglin to zoglin) spawn a fresh mob through SpawnKind, so the old one's armor, held items, name tag and effects are lost
69 ConversionType.convertCommon port crates/horizon-client/src/game/zombie_villagers.rs::carry_over gap: player: only villager and zombie villager conversions use it (dispenser.rs::Game::convert_mob copies the flags for shearing); drowned, stray, zombified piglin, zoglin, frog and witch conversions go through SpawnKind and carry only baby, yaw and persistence, so name tag, armor, held items and effects are lost; absorption and tags are never copied
70 ConversionType.copyComponent inline crates/horizon-client/src/game/zombie_villagers.rs::carry_over gap: minor: the custom name is kept by carry_over and convert_mob, custom data is not
71 Crackiness.byFraction port crates/horizon-client/src/mobs/golem.rs::crackiness iron golem thresholds 0.75, 0.5, 0.25; wolf armor 0.95, 0.69, 0.32 are in mobs/render.rs::layers and mobs.rs::Mob::hurt_wolf_armor
72 Crackiness.byDamage inline crates/horizon-client/src/mobs/render.rs::layers wolf armor: durability left over max picks the crack texture; a golem uses its health instead
73 Display.onSyncedDataUpdated port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::metadata gap: minor: text displays a remote server sends only; start delay, duration and render state flags are tracked, width and height do not update a culling box
74 Display.createTransformation port crates/horizon-client/src/text_display.rs::TextDisplayData::matrix translation, left rotation, scale, right rotation plus the billboard turn
75 Display.tick port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick start tick, interpolation duration and render state refresh; text displays only
76 Display.defineSynchedData port crates/horizon-client/src/text_display.rs::TextDisplayData::default the defaults of entries 8 to 22
77 Display.readAdditionalSaveData missing player: display entities saved in a world (made by commands, datapacks or maps) are not loaded; the local game has no display entity, only a remote server's text displays are drawn
78 Display.setTransformation missing minor: server side setter; there is no local display entity
79 Display.addAdditionalSaveData missing minor: no local display entity to save
80 Display.getInterpolatedBoundingBox missing minor: no culling box, a text display is drawn whenever it is within its view range, even off screen
81 Display.setBrightnessOverride missing minor: server side setter; there is no local display entity
82 Display.getBrightnessOverride inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry the packed sky and block light of the brightness entry (-1 uses the world light)
83 Display.calculateInterpolationProgress port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::progress
84 Display.updateCulling missing minor: width and height are stored but no culling box is built
85 Display.shouldRenderAtSqrDistance inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry view_range * 64 * view scale squared
86 Display.getTeamColor missing minor: glow_color_override is read but a glowing display gets no coloured outline
87 Display.createFreshRenderState inline crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick the copy of the synced data when no interpolation runs
88 Display.createInterpolatedRenderState inline crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick the new start state is the old one blended to the last drawn progress (TextDisplayData::blend)
89 Display.BlockDisplay missing player: block displays a server or map places are not drawn at all (only text displays are); command and datapack made decorations are invisible
90 Display.ItemDisplay missing player: item displays (floating items, custom models on servers) are not drawn at all; only text displays are
91 Display.TextDisplay.defineSynchedData port crates/horizon-client/src/text_display.rs::TextDisplayData::default text, line width 200, background 0x40000000, opacity -1, flags 0
92 Display.TextDisplay.onSyncedDataUpdated port crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::metadata the text render state ids mark the render state dirty
93 Display.TextDisplay.loadFlag missing minor: reads the NBT booleans into the style flags; no local display entity
94 Display.TextDisplay.readAdditionalSaveData missing player: text displays saved in a world are not loaded (see Display.readAdditionalSaveData)
95 Display.TextDisplay.storeFlag missing minor: writes the style flags to NBT; no local display entity
96 Display.TextDisplay.addAdditionalSaveData missing minor: no local display entity to save
97 Display.TextDisplay.updateRenderSubState port crates/horizon-client/src/text_display.rs::TextDisplayData::blend text, line width, opacity and background blend over the interpolation
98 Display.TextDisplay.createFreshTextRenderState inline crates/horizon-client/src/game/text_displays.rs::RemoteTextDisplay::tick the plain copy of the synced text data
99 Display.TextDisplay.createInterpolatedTextRenderState port crates/horizon-client/src/text_display.rs::TextDisplayData::blend opacity and the four background channels interpolate linearly
100 Display.TextDisplay.cacheDisplay inline crates/horizon-client/src/game/text_displays.rs::Game::text_display_geometry the split lines and widths are cached in RemoteTextDisplay::lines until the render state changes
101 Display.TransformationInterpolator.get port crates/horizon-client/src/text_display.rs::TextDisplayData::blend translation and scale lerp, both rotations slerp
102 DropChances.filterDefaultValues missing minor: drop_chances is neither read from nor written to a mob's NBT, so custom drop chances (guaranteed drops) are lost on save and reload
103 DropChances.toEnumMap missing minor: the saved drop_chances map is not read back, a loaded mob uses the default 0.085 or species rule
104 DropChances.withEquipmentChance port crates/horizon-client/src/mobs/finalize.rs::set_drop_chance stored per slot in extra.drop_chances
105 ElytraAnimationState.tick port crates/horizon-client/src/mobs.rs::ElytraAnimation::tick
+143
View File
@@ -0,0 +1,143 @@
Entity.<init> port crates/horizon-client/src/mobs.rs::Mob::new mobs only; players and projectiles are built by their own structs and the synched defaults (flags, air, name, pose) are plain fields
Entity.isColliding missing minor: a block change that a server refuses and that comes back inside the player does not snap the player to the position of the prediction (end_predictions only restores the block)
Entity.canInteractWithLevel inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: only the leashed mob's life is tested (a dead one drops its lead); a dead or spectating holder is not tested
Entity.unRide inline crates/horizon-client/src/game/consume.rs::Game::stop_riding gap: minor: the player's half (boat, minecart or mob mount); riders of a vehicle are let go by sync_riders and eject_boat_mobs
Entity.addTag port crates/horizon-client/src/game/commands/data.rs::Game::cmd_tag the tag.add branch, with the 1024 tag limit
Entity.equals skip:java entities are compared by id
Entity.setRot skip:other plain setter; yaw and pitch are struct fields and the callers clamp pitch
Entity.reapplyPosition skip:other bounding boxes are built from the position on demand (Mob::bounds_at), so there is no cached box to refresh
Entity.commonTick inline crates/horizon-client/src/mobs/ai.rs::tick previous position and rotations saved and age counted; invulnerable time counts down in base_tick; remote mobs do the same in tick_remote_entities
Entity.computeSpeed missing minor: lastKnownSpeed is not tracked; only FollowPlayerRiddenEntityGoal reads it and Horizon has no such goal
Entity.setSharedFlagOnFire inline crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: flag 0x01 is fire_ticks > 0, packed only when a mob goes to LAN guests; HasVisualFire is not read
Entity.isSupportedBy inline crates/horizon-client/src/game/piston_push.rs::Game::push_body supporting block equal to the piston's block decides whether the body rides it
Entity.getBlockBounciness port crates/horizon-world/src/movement_restitution.rs::restitute_movement gap: player: only the player uses block restitution; mobs ignore it (Mob::do_move says so), so a mob falling on a slime block or bed does not bounce
Entity.addMovementThisTick port crates/horizon-world/src/entity_move.rs::MovementHistory::add the 100 record cap merges the first two (MovementHistory); only the player keeps a history, mobs and arrows sweep from the start to the end of their move
Entity.hasMovedHorizontallyRecently missing player: dolphins never swim after and escort a boat or nautilus a player is steering (no FollowPlayerRiddenEntityGoal); nothing tracks horizontal speed
Entity.isStateClimbable port crates/horizon-world/src/movement_emission.rs::climbable climbable tag or powder snow
Entity.applyPistonMovementRestriction port crates/horizon-world/src/piston_movement.rs::PistonMovement::limit the 0.51 per axis budget for each game tick
Entity.getAvailableSpaceBelow missing player: /gamemode creative from spectator while standing on the ground leaves the player flying (vanilla drops flight when the ground is under 1 block away and nothing blocks the box)
Entity.collectAllColliders inline crates/horizon-world/src/world_movement.rs::resolve_world_movement entity, border and block shapes are gathered inside resolve_world_movement; no standalone list exists, and the creative flight drop on a mode switch has no use of it
Entity.collideWithShapes port crates/horizon-core/src/geometry/movement.rs::resolve_shape_movement axis step order from the movement size
Entity.debugBlockIntersection skip:debug debug subscription for the entity block intersection overlay
Entity.gameEvent port crates/horizon-client/src/game/sculk.rs::Game::post_entity_event gap: minor: only players and mobs (Who) can be the source
Entity.playMuffledStepSound port crates/horizon-client/src/motion.rs::MotionWorld::walking_step_sound gap: minor: players only; mobs play the floor block's own step and never the muffled floor sound under snow, carpet or other combination blocks
Entity.shouldPlayAmethystStepSound port crates/horizon-client/src/motion.rs::MotionWorld::walking_step_sound gap: minor: only the player chimes on crystal blocks; mobs walking on amethyst stay silent
Entity.isInClouds missing minor: a happy ghast above the cloud layer should heal a point a second like in rain; only rain and snow count
Entity.updateSwimming port crates/horizon-world/src/swimming.rs::update the player goes through update_player; mobs never swim in the player sense
Entity.doWaterSplashEffect port crates/horizon-world/src/water_splash.rs::water_splash sound, bubbles, splashes and the splash event; arrows, mobs and the player each supply a world
Entity.spawnSprintParticle port crates/horizon-client/src/game/client_ambient.rs::Game::sprint_dust gap: minor: players only; sprinting cats and ocelots raise no block dust
Entity.absSnapTo skip:other plain position setter; Horizon writes position and previous position fields directly
Entity.absSnapRotationTo skip:other plain rotation setter with the pitch clamp; teleports clamp pitch where they set it
Entity.snapTo skip:other plain position and rotation setter; spawns and teleports write the fields (Mob::new, teleport_to_in_level)
Entity.setOldPos skip:other previous position is a field set where a move starts
Entity.setOldRot skip:other previous rotations are fields set where a tick starts
Entity.distanceToSqr port crates/horizon-client/src/mobs.rs::Mob::distance_sqr plain arithmetic; other entities use Vec3::distance_squared
Entity.hurtOrSimulate skip:other dispatches to the server or client hurt; the owning side applies damage directly
Entity.calculateViewQuaternion inline crates/horizon-client/src/game/enchant_effects.rs::Game::apply_piercing_effect its only use is the lunge enchantment's apply_impulse, which rotates the direction by pitch then yaw by hand
Entity.getPosition port crates/horizon-core/src/geometry/mod.rs::Vec3::lerp previous to current position at the frame fraction
Entity.awardKillScore inline crates/horizon-client/src/game.rs::Game::tick the player's death branch fires entity_killed_player with the killer's type
Entity.shouldRender port crates/horizon-client/src/game/entity_culling.rs::Game::entity_in_view range from default_range (64 times the mean box edge times the view scale), then the frustum
Entity.saveAsPassenger port crates/horizon-client/src/game/persist.rs::Game::mob_tree_nbt a mob with its riders nested under Passengers; players and unsaved types are skipped
Entity.getEncodeId inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt the id written is the mob type's id
Entity.dropAllLeashConnections port crates/horizon-client/src/game/dispenser.rs::Game::shear_off_leashes gap: minor: only shears (dispenser) reach it; a firework used while gliding does not drop the player's leads
Entity.canCollideWith inline crates/horizon-client/src/game/ghasts.rs::Game::player_entity_collisions gap: player: the entities a player cannot walk through are boats and happy ghasts only; a live shulker (canBeCollidedWith) is not solid, so the player walks through it
Entity.getDefaultPassengerAttachmentPoint inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment one point per vehicle, so the passenger index is always 0; default is the top of the box
Entity.ejectPassengers port crates/horizon-client/src/game/boat_passengers.rs::Game::eject_boat_mobs gap: minor: boats place riders at the dismount spot; when a mob vehicle dies sync_riders only lets go and the rider stays where it was seated
Entity.removeVehicle inline crates/horizon-client/src/game/commands/world_cmds.rs::Game::dismount_mob gap: minor: no entity_dismount game event, so sculk sensors and wardens never hear a dismount
Entity.moveOrInterpolateTo port crates/horizon-world/src/stepped_interpolation.rs::SteppedInterpolation::interpolate_to living entities from a server; boats and other objects use a three tick Lerp
Entity.getHandHoldingItemAngle missing player: the rocket of a gliding player starts at the player's position, not 0.5 block out toward the hand holding it, so its trail sparks and burst start slightly off
Entity.teleportToPortalDestination inline crates/horizon-client/src/game/nether_portal.rs::Game::send_through_portal may_enter checks isAllowedToEnterPortal; the entity is saved and waits for its dimension
Entity.getDimensionChangingDelay inline crates/horizon-client/src/game/nether_portal.rs::Game::set_portal_cooldown 300 ticks for entities (ENTITY_DELAY) and 10 for the player (PLAYER_DELAY); a vehicle with the player on it never goes through a portal
Entity.getSharedFlag inline crates/horizon-client/src/game/lan.rs::mob_meta flags are separate fields (fire_ticks, invisible, glowing, sprinting) packed into the shared flags byte only for LAN guests
Entity.setSharedFlag inline crates/horizon-client/src/game/lan.rs::mob_meta flags are separate fields (fire_ticks, invisible, glowing, sprinting) packed into the shared flags byte only for LAN guests
Entity.handleOnInsideBubbleColumn port crates/horizon-client/src/motion/fluids.rs::bubble_column_push mobs, items and pearls; arrows have Ticker::bubble_column and the player motion/environment.rs
Entity.removeAction skip:other a mob's custom name is kept as plain text, so it carries no click event; other entities show the stored CustomName as it is
Entity.getName inline crates/horizon-client/src/game/commands.rs::Game::target_name custom name, else the entity type's translated name
Entity.toString skip:debug debug text
Entity.isInvulnerableToBase port crates/horizon-world/src/damage_immunity.rs::base_immunity removed, invulnerable without bypass, fire immune and fall immune
Entity.copyPosition inline crates/horizon-client/src/game/dispenser.rs::Game::convert_mob a converted mob takes the old one's position, previous position and yaws; zombie villager cures copy them in zombie_villagers.rs
Entity.restoreFrom inline crates/horizon-client/src/game/nether_portal.rs::Game::resolve_arrivals the saved tag is loaded again as the new entity; PortalCooldown is written into the tag
Entity.teleport inline crates/horizon-client/src/game/commands.rs::Game::teleport_to_in_level gap: minor: same level /tp only; a riding mob is not dismounted first, so it is pulled back onto its vehicle next tick (the player does stop riding); portals use send_through_portal
Entity.teleportSameDimension inline crates/horizon-client/src/game/commands.rs::Game::teleport_to_in_level position, rotation and old rotation set; riders are re-seated each tick by position_riders
Entity.teleportSpectators inline crates/horizon-client/src/game/commands/extra.rs::Game::tick_camera a spectator's camera follows its target every tick, so no teleport is needed; it drops when the target is gone
Entity.calculatePassengerTransition inline crates/horizon-client/src/game/passengers.rs::Game::position_riders riders are seated on the vehicle each tick instead of getting an offset transition
Entity.sendTeleportTransitionToPlayers inline crates/horizon-client/src/lan/entity.rs::ServerEntity::send_changes a LAN guest sees a teleport as an EntityPositionSync when the jump is too big for a relative move; no ClientboundTeleportEntity is sent
Entity.forceSetRotation inline crates/horizon-client/src/game/commands/world_cmds.rs::Game::cmd_rotate /rotate goes through teleport_to_in_level with the new rotation; the pitch of non-players is not clamped separately
Entity.placePortalTicket skip:other only one dimension is loaded at a time; arriving entities wait in portals.arrivals until resolve_arrivals can place them
Entity.canTeleport inline crates/horizon-client/src/game/end.rs::Game::tick_end leaving the End before the credits have been seen shows the credits instead of teleporting the player
Entity.fillCrashReportCategory skip:debug crash report detail
Entity.teleportPassengers inline crates/horizon-client/src/game/passengers.rs::Game::position_riders riders and riders of riders are seated again each tick
Entity.teleportRelative port crates/horizon-client/src/landing.rs::MotionWorld::teleport_relative gap: minor: only the player is lifted out of a block that turns solid; mobs are lifted by trample_farmland, dropped items and boats are not
Entity.fixupDimensions inline crates/horizon-client/src/mobs/living.rs::Mob::dims dimensions are worked out on each call from size, age and pose, so there is nothing to refresh after a slime resize
Entity.createHoverEvent inline crates/horizon-client/src/game/lan_trading.rs::Game::merchant_display_name gap: minor: only players and merchants get the show_entity hover in chat; other mobs' names have none
Entity.getInterpolatedBoundingBox port crates/horizon-client/src/game/entity_culling.rs::Game::standing_entity_in_view the box is moved to the interpolated position for culling
Entity.getFirstPassenger inline crates/horizon-client/src/game/passengers.rs::Game::sync_riders gap: minor: one rider id per mob vehicle (extra.rider), not a list
Entity.hasPassenger inline crates/horizon-client/src/game/passengers.rs::Game::sync_riders gap: minor: one rider id per mob vehicle (extra.rider); the player's vehicle is Game.riding
Entity.hasIndirectPassenger skip:other vehicle chains are seated by position_riders in three passes; no separate lookup is kept
Entity.isLocalInstanceAuthoritative port crates/horizon-client/src/motion.rs::MotionWorld::locally_authoritative the player's server copy is not authoritative; mobs are always local
Entity.isLocalClientAuthoritative inline crates/horizon-client/src/motion.rs::MotionWorld::locally_authoritative a ridden vehicle's passenger check is not modelled; the player's own copy decides
Entity.isClientAuthoritative skip:other the host trusts its own player and LAN guests send their moves; there is no per-vehicle authority switch
Entity.canSimulateMovement port crates/horizon-client/src/motion.rs::MotionWorld::can_simulate gap: minor: always true; the move simulation type of vehicles and remote entities is not consulted
Entity.getCollisionHorizontalEscapeVector inline crates/horizon-client/src/game/boats.rs::Game::boat_dismount_target gap: minor: only boats use the formula; horses and striders use a plain side offset in dismount_mount
Entity.getControlledVehicle skip:other the player's vehicle is Game.riding and a mob's is extra.mount; the controlling passenger is the first rider
Entity.createCommandSourceStackForNameResolution inline crates/horizon-client/src/game/scoreboard.rs::Game::resolve_component gap: minor: selector and score parts resolve from the player's view, not from the entity's own position and no-permission source
Entity.touchingUnloadedChunk missing minor: fall damage checks and spectator ticks are not skipped at the edge of the loaded area (a LAN guest there)
Entity.getX skip:other plain position field read
Entity.getRandomY skip:other a random point in the box; each effect draws its own offsets inline
Entity.getZ skip:other plain position field read
Entity.getRandomZ skip:other a random point in the box; each effect draws its own offsets inline
Entity.getRopeHoldPosition inline crates/horizon-client/src/game/leads.rs::Game::leash_geometry a mob holder's end is its interpolated position plus 0.7 of its eye height; a player's comes from player_rope_hold
Entity.setYRot skip:other plain setter; yaw is a struct field
Entity.getClientPosition port crates/horizon-world/src/stepped_interpolation.rs::SteppedInterpolation::heading the interpolation target while it runs, else the entity's position
Entity.shouldBeSaved inline crates/horizon-client/src/game/persist.rs::Game::put_mob_passengers riders are saved inside their vehicle's tag, not on their own
Entity.lerpPositionAndRotationStep inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities boats, minecarts, projectiles and orbs of a server step toward the packet's target by 1/steps each tick
Entity.applyImplicitComponents missing player: a spawn egg (or armor stand, boat or minecart item) renamed in an anvil spawns an unnamed entity; the item's custom_name and custom_data are not applied
Entity.applyImplicitComponent missing player: custom_name and custom_data of a placed item are not applied to the new entity; only name tags (name_mob) and buckets copy data
Entity.applyImplicitComponentIfPresent missing player: same gap, no item component reaches a freshly spawned entity
EntityAttachments.scale missing minor: attachment points are not scaled with the mob, so riders on a resized or baby vehicle sit at the unscaled height
EntityAttachments.getNullable inline crates/horizon-client/src/game/names.rs::Game::name_tags gap: minor: only the NAME_TAG default (0.5 above the height) is used, so a sniffer's tag (offset 2.05) sits 0.2 too high
EntityAttachments.get inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment the point is always found: the species table or the top of the box
EntityAttachments.getAverage inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: one point; a sheared harness or sulfur cube item spawns at the mob's centre or box top rather than at the average passenger point
EntityAttachments.getClamped inline crates/horizon-client/src/mobs/riders.rs::seat the point turned by the vehicle's yaw and added to its position
EntityAttachments.Builder.attach inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment attachment points are a match per species; only PASSENGER (and VEHICLE in vehicle_attachment) exist
EntityAttachments.Builder.build inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment the fallback when a species has no point is the top of its box
EntityDimensions.scale port crates/horizon-client/src/mobs/living.rs::Mob::dims baby and size scaling multiply width, height and eye height; gap: minor: attachments are not scaled
EntityDimensions.withEyeHeight skip:data eye heights come from entity-types.json (MobType.eye_height)
EntityDimensions.withAttachments inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment attachments are a per species table, not part of a dimensions value
EntityEquipment.isEmpty port crates/horizon-world/src/player_inventory.rs::PlayerInventory::is_empty
EntityEquipment.tick port crates/horizon-world/src/inventory_tick.rs::tick_equipment gap: minor: the player's worn items only; items on mobs never tick
EntityEquipment.dropAll port crates/horizon-client/src/game.rs::Game::drop_inventory the main inventory, armour and off hand are thrown in random directions on death (Inventory.dropAll)
EntityFluidInteraction.getOrCreateTrackerFor inline crates/horizon-world/src/entity_fluid.rs::EntityFluidInteraction::update a tracker is found or pushed while scanning the box
EntityFluidInteraction.getCurrentAccumulatorFor inline crates/horizon-world/src/entity_fluid.rs::EntityFluidInteraction::new one accumulator is made per fluid tag up front
EntityFluidInteraction.CurrentAccumulator.accumulate port crates/horizon-world/src/entity_fluid.rs::CurrentAccumulator::accumulate
EntityFluidInteraction.Tracker.reset inline crates/horizon-world/src/entity_fluid.rs::EntityFluidInteraction::update the retain_mut at the start: idle trackers are dropped, the others get height 0 and eyes outside
EntityReference.of skip:java references are plain UUID arrays (extra.owner), looked up when used
EntityReference.getEntity port crates/horizon-client/src/game/persist.rs::Game::mob_by_uuid gap: minor: mobs only; the player is matched by its own UUID where it is needed
EntityReference.resolve skip:java class cast check
EntityReference.store inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Owner is written as an int array UUID
EntityReference.readWithOldOwnerConversion inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: Owner is read as an int array UUID; an owner saved as a player name (worlds from before 1.7.6) is not converted
EntityReference.equals skip:java UUIDs are compared directly
world/entity/EntitySelector.withinDistance port crates/horizon-client/src/game/dragon.rs::Game::fight_has_players the 192 block range around (0, 128, 0) for the dragon fight's valid players
EntityType.appendCustomEntityStackConfig missing player: a spawn egg or entity item with an entity_data component spawns a plain entity (use_spawn_egg ignores the stack's data)
EntityType.updateCustomEntityTag missing player: entity_data of a spawn egg (from /give or a data pack) is never loaded into the spawned entity
EntityType.getDescription inline crates/horizon-client/src/game/commands.rs::Game::target_name entity.<namespace>.<name> translated
EntityType.toShortString skip:debug only a game test message uses it
EntityType.loadPassengersRecursive port crates/horizon-client/src/game/persist.rs::Game::load_mob riders under Passengers are loaded after the vehicle; gap: minor: only mobs Horizon simulates, the rest stay in the tag
EntityType.loadEntitiesRecursive inline crates/horizon-client/src/game/persist.rs::Game::load_mob chunk entity lists, spawner and structure entities load each tag through load_mob
EntityType.loadStaticEntity port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt a bad tag gives None instead of an exception
EntityType.Builder.passengerAttachments inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment per species heights for the vehicles that carry riders; others use the box top
EntityType.Builder.attach inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment only the PASSENGER point is a table; NAME_TAG and the rest use their defaults
EntityType.Builder.build skip:data entity types are read from entity-types.json (MobType) instead of being built in code
EquipmentSlot.isArmor skip:other slots are plain head, chest, legs and feet constants; armour logic names them (Ctx::armor)
EquipmentSlot.byName skip:data slot names are read as strings from data and NBT
EquipmentSlotGroup.bySlot inline crates/horizon-client/src/game/lan_attributes.rs::slot_in_group a slot is its own group, so the test is group == slot
EquipmentTable.createForAllSlots skip:data drop chances come from the loot and entity data
ExperienceOrb.<init> port crates/horizon-client/src/game.rs::Game::add_orb random yaw and motion from the orb's own random; gap: minor: no rough direction offset and no unstuck when the orb spawns inside a block
ExperienceOrb.unstuckIfPossible missing minor: an orb that spawns inside blocks (a kill in a 1x1 hole) is not nudged to the nearest free spot; Mob has free_position, orbs do not use it
ExperienceOrb.awardWithDirection port crates/horizon-client/src/game.rs::Game::spawn_orbs gap: minor: the rough direction is never given, so xp bottle orbs do not fly away from the surface they hit
ExperienceOrb.setUnderwaterMovement port crates/horizon-client/src/entities.rs::ExperienceOrb::tick gap: minor: tests the block at the orb's feet, not its eyes
ExperienceOrb.hurtServer missing player: xp orbs have no health, so explosions, fire and lava never destroy them (vanilla orbs have 5)
ExperienceOrb.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::orb_to_nbt gap: minor: Health is always written as 5
ExperienceOrb.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::orbs_from_nbt gap: minor: Health is ignored
HumanoidArm.getOpposite inline crates/horizon-client/src/game.rs::Game::hand_geometry the main hand's side is main_hand_left; the off hand is the other side
InsideBlockEffectApplier.StepBasedCollector.flushStep port crates/horizon-client/src/arrows.rs::Collector::flush gap: minor: the arrow collector has four effects (clear freeze, fire, lava, extinguish); the player's collector sits in motion.rs check_inside_blocks
1 Entity.<init> port crates/horizon-client/src/mobs.rs::Mob::new mobs only; players and projectiles are built by their own structs and the synched defaults (flags, air, name, pose) are plain fields
2 Entity.isColliding missing minor: a block change that a server refuses and that comes back inside the player does not snap the player to the position of the prediction (end_predictions only restores the block)
3 Entity.canInteractWithLevel inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: only the leashed mob's life is tested (a dead one drops its lead); a dead or spectating holder is not tested
4 Entity.unRide inline crates/horizon-client/src/game/consume.rs::Game::stop_riding gap: minor: the player's half (boat, minecart or mob mount); riders of a vehicle are let go by sync_riders and eject_boat_mobs
5 Entity.addTag port crates/horizon-client/src/game/commands/data.rs::Game::cmd_tag the tag.add branch, with the 1024 tag limit
6 Entity.equals skip:java entities are compared by id
7 Entity.setRot skip:other plain setter; yaw and pitch are struct fields and the callers clamp pitch
8 Entity.reapplyPosition skip:other bounding boxes are built from the position on demand (Mob::bounds_at), so there is no cached box to refresh
9 Entity.commonTick inline crates/horizon-client/src/mobs/ai.rs::tick previous position and rotations saved and age counted; invulnerable time counts down in base_tick; remote mobs do the same in tick_remote_entities
10 Entity.computeSpeed missing minor: lastKnownSpeed is not tracked; only FollowPlayerRiddenEntityGoal reads it and Horizon has no such goal
11 Entity.setSharedFlagOnFire inline crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: flag 0x01 is fire_ticks > 0, packed only when a mob goes to LAN guests; HasVisualFire is not read
12 Entity.isSupportedBy inline crates/horizon-client/src/game/piston_push.rs::Game::push_body supporting block equal to the piston's block decides whether the body rides it
13 Entity.getBlockBounciness port crates/horizon-world/src/movement_restitution.rs::restitute_movement gap: player: only the player uses block restitution; mobs ignore it (Mob::do_move says so), so a mob falling on a slime block or bed does not bounce
14 Entity.addMovementThisTick port crates/horizon-world/src/entity_move.rs::MovementHistory::add the 100 record cap merges the first two (MovementHistory); only the player keeps a history, mobs and arrows sweep from the start to the end of their move
15 Entity.hasMovedHorizontallyRecently missing player: dolphins never swim after and escort a boat or nautilus a player is steering (no FollowPlayerRiddenEntityGoal); nothing tracks horizontal speed
16 Entity.isStateClimbable port crates/horizon-world/src/movement_emission.rs::climbable climbable tag or powder snow
17 Entity.applyPistonMovementRestriction port crates/horizon-world/src/piston_movement.rs::PistonMovement::limit the 0.51 per axis budget for each game tick
18 Entity.getAvailableSpaceBelow missing player: /gamemode creative from spectator while standing on the ground leaves the player flying (vanilla drops flight when the ground is under 1 block away and nothing blocks the box)
19 Entity.collectAllColliders inline crates/horizon-world/src/world_movement.rs::resolve_world_movement entity, border and block shapes are gathered inside resolve_world_movement; no standalone list exists, and the creative flight drop on a mode switch has no use of it
20 Entity.collideWithShapes port crates/horizon-core/src/geometry/movement.rs::resolve_shape_movement axis step order from the movement size
21 Entity.debugBlockIntersection skip:debug debug subscription for the entity block intersection overlay
22 Entity.gameEvent port crates/horizon-client/src/game/sculk.rs::Game::post_entity_event gap: minor: only players and mobs (Who) can be the source
23 Entity.playMuffledStepSound port crates/horizon-client/src/motion.rs::MotionWorld::walking_step_sound gap: minor: players only; mobs play the floor block's own step and never the muffled floor sound under snow, carpet or other combination blocks
24 Entity.shouldPlayAmethystStepSound port crates/horizon-client/src/motion.rs::MotionWorld::walking_step_sound gap: minor: only the player chimes on crystal blocks; mobs walking on amethyst stay silent
25 Entity.isInClouds missing minor: a happy ghast above the cloud layer should heal a point a second like in rain; only rain and snow count
26 Entity.updateSwimming port crates/horizon-world/src/swimming.rs::update the player goes through update_player; mobs never swim in the player sense
27 Entity.doWaterSplashEffect port crates/horizon-world/src/water_splash.rs::water_splash sound, bubbles, splashes and the splash event; arrows, mobs and the player each supply a world
28 Entity.spawnSprintParticle port crates/horizon-client/src/game/client_ambient.rs::Game::sprint_dust gap: minor: players only; sprinting cats and ocelots raise no block dust
29 Entity.absSnapTo skip:other plain position setter; Horizon writes position and previous position fields directly
30 Entity.absSnapRotationTo skip:other plain rotation setter with the pitch clamp; teleports clamp pitch where they set it
31 Entity.snapTo skip:other plain position and rotation setter; spawns and teleports write the fields (Mob::new, teleport_to_in_level)
32 Entity.setOldPos skip:other previous position is a field set where a move starts
33 Entity.setOldRot skip:other previous rotations are fields set where a tick starts
34 Entity.distanceToSqr port crates/horizon-client/src/mobs.rs::Mob::distance_sqr plain arithmetic; other entities use Vec3::distance_squared
35 Entity.hurtOrSimulate skip:other dispatches to the server or client hurt; the owning side applies damage directly
36 Entity.calculateViewQuaternion inline crates/horizon-client/src/game/enchant_effects.rs::Game::apply_piercing_effect its only use is the lunge enchantment's apply_impulse, which rotates the direction by pitch then yaw by hand
37 Entity.getPosition port crates/horizon-core/src/geometry/mod.rs::Vec3::lerp previous to current position at the frame fraction
38 Entity.awardKillScore inline crates/horizon-client/src/game.rs::Game::tick the player's death branch fires entity_killed_player with the killer's type
39 Entity.shouldRender port crates/horizon-client/src/game/entity_culling.rs::Game::entity_in_view range from default_range (64 times the mean box edge times the view scale), then the frustum
40 Entity.saveAsPassenger port crates/horizon-client/src/game/persist.rs::Game::mob_tree_nbt a mob with its riders nested under Passengers; players and unsaved types are skipped
41 Entity.getEncodeId inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt the id written is the mob type's id
42 Entity.dropAllLeashConnections port crates/horizon-client/src/game/dispenser.rs::Game::shear_off_leashes gap: minor: only shears (dispenser) reach it; a firework used while gliding does not drop the player's leads
43 Entity.canCollideWith inline crates/horizon-client/src/game/ghasts.rs::Game::player_entity_collisions gap: player: the entities a player cannot walk through are boats and happy ghasts only; a live shulker (canBeCollidedWith) is not solid, so the player walks through it
44 Entity.getDefaultPassengerAttachmentPoint inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment one point per vehicle, so the passenger index is always 0; default is the top of the box
45 Entity.ejectPassengers port crates/horizon-client/src/game/boat_passengers.rs::Game::eject_boat_mobs gap: minor: boats place riders at the dismount spot; when a mob vehicle dies sync_riders only lets go and the rider stays where it was seated
46 Entity.removeVehicle inline crates/horizon-client/src/game/commands/world_cmds.rs::Game::dismount_mob gap: minor: no entity_dismount game event, so sculk sensors and wardens never hear a dismount
47 Entity.moveOrInterpolateTo port crates/horizon-world/src/stepped_interpolation.rs::SteppedInterpolation::interpolate_to living entities from a server; boats and other objects use a three tick Lerp
48 Entity.getHandHoldingItemAngle missing player: the rocket of a gliding player starts at the player's position, not 0.5 block out toward the hand holding it, so its trail sparks and burst start slightly off
49 Entity.teleportToPortalDestination inline crates/horizon-client/src/game/nether_portal.rs::Game::send_through_portal may_enter checks isAllowedToEnterPortal; the entity is saved and waits for its dimension
50 Entity.getDimensionChangingDelay inline crates/horizon-client/src/game/nether_portal.rs::Game::set_portal_cooldown 300 ticks for entities (ENTITY_DELAY) and 10 for the player (PLAYER_DELAY); a vehicle with the player on it never goes through a portal
51 Entity.getSharedFlag inline crates/horizon-client/src/game/lan.rs::mob_meta flags are separate fields (fire_ticks, invisible, glowing, sprinting) packed into the shared flags byte only for LAN guests
52 Entity.setSharedFlag inline crates/horizon-client/src/game/lan.rs::mob_meta flags are separate fields (fire_ticks, invisible, glowing, sprinting) packed into the shared flags byte only for LAN guests
53 Entity.handleOnInsideBubbleColumn port crates/horizon-client/src/motion/fluids.rs::bubble_column_push mobs, items and pearls; arrows have Ticker::bubble_column and the player motion/environment.rs
54 Entity.removeAction skip:other a mob's custom name is kept as plain text, so it carries no click event; other entities show the stored CustomName as it is
55 Entity.getName inline crates/horizon-client/src/game/commands.rs::Game::target_name custom name, else the entity type's translated name
56 Entity.toString skip:debug debug text
57 Entity.isInvulnerableToBase port crates/horizon-world/src/damage_immunity.rs::base_immunity removed, invulnerable without bypass, fire immune and fall immune
58 Entity.copyPosition inline crates/horizon-client/src/game/dispenser.rs::Game::convert_mob a converted mob takes the old one's position, previous position and yaws; zombie villager cures copy them in zombie_villagers.rs
59 Entity.restoreFrom inline crates/horizon-client/src/game/nether_portal.rs::Game::resolve_arrivals the saved tag is loaded again as the new entity; PortalCooldown is written into the tag
60 Entity.teleport inline crates/horizon-client/src/game/commands.rs::Game::teleport_to_in_level gap: minor: same level /tp only; a riding mob is not dismounted first, so it is pulled back onto its vehicle next tick (the player does stop riding); portals use send_through_portal
61 Entity.teleportSameDimension inline crates/horizon-client/src/game/commands.rs::Game::teleport_to_in_level position, rotation and old rotation set; riders are re-seated each tick by position_riders
62 Entity.teleportSpectators inline crates/horizon-client/src/game/commands/extra.rs::Game::tick_camera a spectator's camera follows its target every tick, so no teleport is needed; it drops when the target is gone
63 Entity.calculatePassengerTransition inline crates/horizon-client/src/game/passengers.rs::Game::position_riders riders are seated on the vehicle each tick instead of getting an offset transition
64 Entity.sendTeleportTransitionToPlayers inline crates/horizon-client/src/lan/entity.rs::ServerEntity::send_changes a LAN guest sees a teleport as an EntityPositionSync when the jump is too big for a relative move; no ClientboundTeleportEntity is sent
65 Entity.forceSetRotation inline crates/horizon-client/src/game/commands/world_cmds.rs::Game::cmd_rotate /rotate goes through teleport_to_in_level with the new rotation; the pitch of non-players is not clamped separately
66 Entity.placePortalTicket skip:other only one dimension is loaded at a time; arriving entities wait in portals.arrivals until resolve_arrivals can place them
67 Entity.canTeleport inline crates/horizon-client/src/game/end.rs::Game::tick_end leaving the End before the credits have been seen shows the credits instead of teleporting the player
68 Entity.fillCrashReportCategory skip:debug crash report detail
69 Entity.teleportPassengers inline crates/horizon-client/src/game/passengers.rs::Game::position_riders riders and riders of riders are seated again each tick
70 Entity.teleportRelative port crates/horizon-client/src/landing.rs::MotionWorld::teleport_relative gap: minor: only the player is lifted out of a block that turns solid; mobs are lifted by trample_farmland, dropped items and boats are not
71 Entity.fixupDimensions inline crates/horizon-client/src/mobs/living.rs::Mob::dims dimensions are worked out on each call from size, age and pose, so there is nothing to refresh after a slime resize
72 Entity.createHoverEvent inline crates/horizon-client/src/game/lan_trading.rs::Game::merchant_display_name gap: minor: only players and merchants get the show_entity hover in chat; other mobs' names have none
73 Entity.getInterpolatedBoundingBox port crates/horizon-client/src/game/entity_culling.rs::Game::standing_entity_in_view the box is moved to the interpolated position for culling
74 Entity.getFirstPassenger inline crates/horizon-client/src/game/passengers.rs::Game::sync_riders gap: minor: one rider id per mob vehicle (extra.rider), not a list
75 Entity.hasPassenger inline crates/horizon-client/src/game/passengers.rs::Game::sync_riders gap: minor: one rider id per mob vehicle (extra.rider); the player's vehicle is Game.riding
76 Entity.hasIndirectPassenger skip:other vehicle chains are seated by position_riders in three passes; no separate lookup is kept
77 Entity.isLocalInstanceAuthoritative port crates/horizon-client/src/motion.rs::MotionWorld::locally_authoritative the player's server copy is not authoritative; mobs are always local
78 Entity.isLocalClientAuthoritative inline crates/horizon-client/src/motion.rs::MotionWorld::locally_authoritative a ridden vehicle's passenger check is not modelled; the player's own copy decides
79 Entity.isClientAuthoritative skip:other the host trusts its own player and LAN guests send their moves; there is no per-vehicle authority switch
80 Entity.canSimulateMovement port crates/horizon-client/src/motion.rs::MotionWorld::can_simulate gap: minor: always true; the move simulation type of vehicles and remote entities is not consulted
81 Entity.getCollisionHorizontalEscapeVector inline crates/horizon-client/src/game/boats.rs::Game::boat_dismount_target gap: minor: only boats use the formula; horses and striders use a plain side offset in dismount_mount
82 Entity.getControlledVehicle skip:other the player's vehicle is Game.riding and a mob's is extra.mount; the controlling passenger is the first rider
83 Entity.createCommandSourceStackForNameResolution inline crates/horizon-client/src/game/scoreboard.rs::Game::resolve_component gap: minor: selector and score parts resolve from the player's view, not from the entity's own position and no-permission source
84 Entity.touchingUnloadedChunk missing minor: fall damage checks and spectator ticks are not skipped at the edge of the loaded area (a LAN guest there)
85 Entity.getX skip:other plain position field read
86 Entity.getRandomY skip:other a random point in the box; each effect draws its own offsets inline
87 Entity.getZ skip:other plain position field read
88 Entity.getRandomZ skip:other a random point in the box; each effect draws its own offsets inline
89 Entity.getRopeHoldPosition inline crates/horizon-client/src/game/leads.rs::Game::leash_geometry a mob holder's end is its interpolated position plus 0.7 of its eye height; a player's comes from player_rope_hold
90 Entity.setYRot skip:other plain setter; yaw is a struct field
91 Entity.getClientPosition port crates/horizon-world/src/stepped_interpolation.rs::SteppedInterpolation::heading the interpolation target while it runs, else the entity's position
92 Entity.shouldBeSaved inline crates/horizon-client/src/game/persist.rs::Game::put_mob_passengers riders are saved inside their vehicle's tag, not on their own
93 Entity.lerpPositionAndRotationStep inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities boats, minecarts, projectiles and orbs of a server step toward the packet's target by 1/steps each tick
94 Entity.applyImplicitComponents missing player: a spawn egg (or armor stand, boat or minecart item) renamed in an anvil spawns an unnamed entity; the item's custom_name and custom_data are not applied
95 Entity.applyImplicitComponent missing player: custom_name and custom_data of a placed item are not applied to the new entity; only name tags (name_mob) and buckets copy data
96 Entity.applyImplicitComponentIfPresent missing player: same gap, no item component reaches a freshly spawned entity
97 EntityAttachments.scale missing minor: attachment points are not scaled with the mob, so riders on a resized or baby vehicle sit at the unscaled height
98 EntityAttachments.getNullable inline crates/horizon-client/src/game/names.rs::Game::name_tags gap: minor: only the NAME_TAG default (0.5 above the height) is used, so a sniffer's tag (offset 2.05) sits 0.2 too high
99 EntityAttachments.get inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment the point is always found: the species table or the top of the box
100 EntityAttachments.getAverage inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: one point; a sheared harness or sulfur cube item spawns at the mob's centre or box top rather than at the average passenger point
101 EntityAttachments.getClamped inline crates/horizon-client/src/mobs/riders.rs::seat the point turned by the vehicle's yaw and added to its position
102 EntityAttachments.Builder.attach inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment attachment points are a match per species; only PASSENGER (and VEHICLE in vehicle_attachment) exist
103 EntityAttachments.Builder.build inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment the fallback when a species has no point is the top of its box
104 EntityDimensions.scale port crates/horizon-client/src/mobs/living.rs::Mob::dims baby and size scaling multiply width, height and eye height; gap: minor: attachments are not scaled
105 EntityDimensions.withEyeHeight skip:data eye heights come from entity-types.json (MobType.eye_height)
106 EntityDimensions.withAttachments inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment attachments are a per species table, not part of a dimensions value
107 EntityEquipment.isEmpty port crates/horizon-world/src/player_inventory.rs::PlayerInventory::is_empty
108 EntityEquipment.tick port crates/horizon-world/src/inventory_tick.rs::tick_equipment gap: minor: the player's worn items only; items on mobs never tick
109 EntityEquipment.dropAll port crates/horizon-client/src/game.rs::Game::drop_inventory the main inventory, armour and off hand are thrown in random directions on death (Inventory.dropAll)
110 EntityFluidInteraction.getOrCreateTrackerFor inline crates/horizon-world/src/entity_fluid.rs::EntityFluidInteraction::update a tracker is found or pushed while scanning the box
111 EntityFluidInteraction.getCurrentAccumulatorFor inline crates/horizon-world/src/entity_fluid.rs::EntityFluidInteraction::new one accumulator is made per fluid tag up front
112 EntityFluidInteraction.CurrentAccumulator.accumulate port crates/horizon-world/src/entity_fluid.rs::CurrentAccumulator::accumulate
113 EntityFluidInteraction.Tracker.reset inline crates/horizon-world/src/entity_fluid.rs::EntityFluidInteraction::update the retain_mut at the start: idle trackers are dropped, the others get height 0 and eyes outside
114 EntityReference.of skip:java references are plain UUID arrays (extra.owner), looked up when used
115 EntityReference.getEntity port crates/horizon-client/src/game/persist.rs::Game::mob_by_uuid gap: minor: mobs only; the player is matched by its own UUID where it is needed
116 EntityReference.resolve skip:java class cast check
117 EntityReference.store inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Owner is written as an int array UUID
118 EntityReference.readWithOldOwnerConversion inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: Owner is read as an int array UUID; an owner saved as a player name (worlds from before 1.7.6) is not converted
119 EntityReference.equals skip:java UUIDs are compared directly
120 world/entity/EntitySelector.withinDistance port crates/horizon-client/src/game/dragon.rs::Game::fight_has_players the 192 block range around (0, 128, 0) for the dragon fight's valid players
121 EntityType.appendCustomEntityStackConfig missing player: a spawn egg or entity item with an entity_data component spawns a plain entity (use_spawn_egg ignores the stack's data)
122 EntityType.updateCustomEntityTag missing player: entity_data of a spawn egg (from /give or a data pack) is never loaded into the spawned entity
123 EntityType.getDescription inline crates/horizon-client/src/game/commands.rs::Game::target_name entity.<namespace>.<name> translated
124 EntityType.toShortString skip:debug only a game test message uses it
125 EntityType.loadPassengersRecursive port crates/horizon-client/src/game/persist.rs::Game::load_mob riders under Passengers are loaded after the vehicle; gap: minor: only mobs Horizon simulates, the rest stay in the tag
126 EntityType.loadEntitiesRecursive inline crates/horizon-client/src/game/persist.rs::Game::load_mob chunk entity lists, spawner and structure entities load each tag through load_mob
127 EntityType.loadStaticEntity port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt a bad tag gives None instead of an exception
128 EntityType.Builder.passengerAttachments inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment per species heights for the vehicles that carry riders; others use the box top
129 EntityType.Builder.attach inline crates/horizon-client/src/mobs/riders.rs::passenger_attachment only the PASSENGER point is a table; NAME_TAG and the rest use their defaults
130 EntityType.Builder.build skip:data entity types are read from entity-types.json (MobType) instead of being built in code
131 EquipmentSlot.isArmor skip:other slots are plain head, chest, legs and feet constants; armour logic names them (Ctx::armor)
132 EquipmentSlot.byName skip:data slot names are read as strings from data and NBT
133 EquipmentSlotGroup.bySlot inline crates/horizon-client/src/game/lan_attributes.rs::slot_in_group a slot is its own group, so the test is group == slot
134 EquipmentTable.createForAllSlots skip:data drop chances come from the loot and entity data
135 ExperienceOrb.<init> port crates/horizon-client/src/game.rs::Game::add_orb random yaw and motion from the orb's own random; gap: minor: no rough direction offset and no unstuck when the orb spawns inside a block
136 ExperienceOrb.unstuckIfPossible missing minor: an orb that spawns inside blocks (a kill in a 1x1 hole) is not nudged to the nearest free spot; Mob has free_position, orbs do not use it
137 ExperienceOrb.awardWithDirection port crates/horizon-client/src/game.rs::Game::spawn_orbs gap: minor: the rough direction is never given, so xp bottle orbs do not fly away from the surface they hit
138 ExperienceOrb.setUnderwaterMovement port crates/horizon-client/src/entities.rs::ExperienceOrb::tick gap: minor: tests the block at the orb's feet, not its eyes
139 ExperienceOrb.hurtServer missing player: xp orbs have no health, so explosions, fire and lava never destroy them (vanilla orbs have 5)
140 ExperienceOrb.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::orb_to_nbt gap: minor: Health is always written as 5
141 ExperienceOrb.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::orbs_from_nbt gap: minor: Health is ignored
142 HumanoidArm.getOpposite inline crates/horizon-client/src/game.rs::Game::hand_geometry the main hand's side is main_hand_left; the off hand is the other side
143 InsideBlockEffectApplier.StepBasedCollector.flushStep port crates/horizon-client/src/arrows.rs::Collector::flush gap: minor: the arrow collector has four effects (clear freeze, fire, lava, extinguish); the player's collector sits in motion.rs check_inside_blocks
+150
View File
@@ -0,0 +1,150 @@
Interaction.defineSynchedData missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Interaction.readAdditionalSaveData missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Interaction.addAdditionalSaveData missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Interaction.onSyncedDataUpdated missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Interaction.skipAttackInteraction missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Interaction.interact missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Interaction.getLastAttacker missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Interaction.getTarget missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
Leashable.isLeashed inline crates/horizon-client/src/mobs/leash.rs::tick the mob's extra.leash being set
Leashable.setDelayedLeashHolderId inline crates/horizon-client/src/game/remote.rs::Game::handle_packet SetEntityLink arm: a holder id not known yet waits as Holder::Mob until the knot arrives (remote_objects.rs)
Leashable.readLeashData port crates/horizon-client/src/mobs/leash.rs::pending_from_nbt holder UUID or fence knot block; kept pending until the holder exists
Leashable.restoreLeashFromSave port crates/horizon-client/src/game/leads.rs::Game::tick_leads holder found by UUID or knot block; a lead whose holder never shows up drops as an item after 100 ticks
Leashable.angularFriction inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: ground friction is a fixed 0.6 times 0.91, not the friction of the block under the mob (ice, slime)
Leashable.checkElasticInteractions port crates/horizon-client/src/mobs/leash.rs::tick gap: minor: one attachment pair only; no quad leash for a horse, llama or sniffer led by a happy ghast
Leashable.getHolderMovement port crates/horizon-client/src/mobs/leash.rs::holder_state gap: minor: the holder's velocity is always used; a NoAI mob holder should count as standing still
Leashable.computeElasticInteraction port crates/horizon-client/src/mobs/leash.rs::spring gap: minor: single attachment pair (0, 0.5, 0.5 of the mob and 0, 0.5, 0 of the holder); the four-point version is missing
Leashable.createQuadLeashOffsets missing player: a horse, llama or sniffer led by a happy ghast is drawn with one rope to its middle and pulled by one spring instead of four ropes to its corners
Leashable.leashableLeashedTo port crates/horizon-client/src/game/leads.rs::Game::player_leashed only the player as holder (box of 32); mob and knot holders are filtered inline in interact_leash and interact_knot
Leashable.leashableInArea port crates/horizon-client/src/game/leads.rs::Game::player_leashed the 32 block box around a point, for the player's lead only
Leashable.Wrench.torqueFromForce inline crates/horizon-client/src/mobs/leash.rs::spring lever.z * force.x - lever.x * force.z
Leashable.Wrench.accumulate inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: one wrench only, nothing to sum (quad leash would need it)
Leashable.Wrench.scale inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: the 0.25 scale of a quad connection is not applied
LightningBolt.powerLightningRod port crates/horizon-client/src/game/lightning.rs::Game::strike_rod powered for 8 ticks with level event 3002 along the rod
LightningBolt.getStrikePosition inline crates/horizon-client/src/game/lightning.rs::Game::strike_rod the block 1e-6 below the bolt, also used by bolt_clear_copper
LightningBolt.spawnFire port crates/horizon-client/src/game/lightning.rs::Game::bolt_fire gap: minor: no fire_spread_radius_around_player check (canSpreadFireAround)
LightningBolt.randomWalkCleaningCopper inline crates/horizon-world/src/level/tick.rs::Sim::lightning_clear_copper 3 to 5 walks of up to 8 steps
LightningBolt.randomStepCleaningCopper inline crates/horizon-world/src/level/tick.rs::Sim::lightning_clear_copper up to 10 random blocks in the 3x3x3 cube, first weathering copper steps back
LightningBolt.shouldRenderAtSqrDistance missing player: a bolt more than 64 blocks away (scaled by Entity Distance) is still drawn; vanilla shows only the sky flash and thunder there
LinearInterpolationHandler.create inline crates/horizon-client/src/game/remote.rs::Game::move_entity 3 steps (lerps.insert); only on a server's client, a local game moves boats, carts and bobbers directly
LinearInterpolationHandler.startInterpolating inline crates/horizon-client/src/game/remote.rs::Game::move_entity target kept as Lerp with steps 3
LinearInterpolationHandler.doInterpolate inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities gap: minor: position eased by 1/steps; a boat's or minecart's yaw is set at once, not eased
LivingEntity.<init> port crates/horizon-client/src/mobs.rs::Mob::new box, health, random yaw
LivingEntity.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: player: arrow count (12) and stinger count (13) are never kept or sent, so arrows and bee stingers do not stay stuck in a body
LivingEntity.hasLandedInLiquid missing minor: the fall impulse context (mace, wind charge) is not cleared when a server player lands in a liquid
LivingEntity.getScale missing minor: no scale attribute, so /attribute scale and datapack scaling do nothing; baby and slime sizes come from tables in Mob::dims
LivingEntity.shouldDropLoot inline crates/horizon-client/src/mobs/drops.rs::die mob_drops rule and not a baby (monsters excepted)
LivingEntity.decreaseAirSupply port crates/horizon-client/src/motion/environment.rs::MotionWorld::tick_environment_damage gap: minor: only the player reads oxygen_bonus (Respiration); a mob loses one air per tick in ai.rs::base_tick
LivingEntity.setLastHurtByPlayer inline crates/horizon-client/src/mobs.rs::Mob::damage_with ai.last_hurt_by_player = 100 on a player's hit; Game::last_hurt_by_player records which guest
LivingEntity.onRemoval skip:other waypoint tracking is per player (game/lan_waypoints.rs); no mob has a transmit range
LivingEntity.updateDirtyEffects skip:java dirty flag; Horizon reads invisibility and swirls from the effect list when needed
LivingEntity.updateInvisibilityStatus inline crates/horizon-client/src/mobs/trader.rs::is_invisible the Invisibility effect hides the model (render_with) and sets flag 0x20 in lan.rs::mob_meta
LivingEntity.areAllEffectsAmbient inline crates/horizon-client/src/game/client_ambient.rs::Game::effect_swirls a server's flag is kept in Extra::effect_ambient; a mob's own effects are never ambient
LivingEntity.removeAllEffects port crates/horizon-client/src/effects.rs::PlayerEffects::clear player; a mob's list is cleared in commands/effects.rs::cmd_effect_clear
LivingEntity.removeEffect inline crates/horizon-client/src/game/commands/effects.rs::Game::cmd_effect_clear retain by effect id for the player and for mobs
LivingEntity.onEffectUpdated port crates/horizon-client/src/game/potions.rs::Game::apply_effect_status gap: minor: player only; a mob's attributes follow just speed and slowness, strength, weakness, resistance and absorption do nothing on mobs
LivingEntity.onEffectsRemoved port crates/horizon-client/src/game/potions.rs::Game::apply_effect_status gap: minor: same as onEffectUpdated, mobs only react to speed and slowness
LivingEntity.refreshDirtyAttributes port crates/horizon-client/src/game/potions.rs::Game::apply_effect_status modifiers diffed against the applied list each tick (player)
LivingEntity.dealDefaultKnockback inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: minor: pushed away from the source position; an arrow uses its previous position, vanilla uses its flight direction
LivingEntity.applyItemBlocking port crates/horizon-client/src/health.rs::Environment::apply_blocking gap: minor: the player's shield only; a mob holding a shield never blocks
LivingEntity.playSecondaryHurtSound port crates/horizon-client/src/game/enchant_effects.rs::Game::thorns enchant.thorns.hit at the attacker
LivingEntity.resolveMobResponsibleForDamage inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: minor: last_hurt_by comes from any attacker; no #no_anger damage types or wind charge exemption
LivingEntity.resolvePlayerResponsibleForDamage inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: player: damage by a player's tamed wolf or cat sets no last-hurt-by-player, so the kill drops no experience and no player-only loot
LivingEntity.breakItem port crates/horizon-client/src/game.rs::Game::damage_held gap: player: a tool or armor breaking shows no crumb particles and always plays entity.item.break, not the item's own break sound
LivingEntity.dropExperience inline crates/horizon-client/src/mobs/drops.rs::die orbs only when a player killed it and mob_drops is on
LivingEntity.getKnockback port crates/horizon-client/src/game/enchant_effects.rs::Game::extra_knockback gap: minor: the Knockback enchant halved (player and gear::knockback for mobs); the attack_knockback attribute counts only for the hoglin shove
LivingEntity.dropFromLootTable port crates/horizon-client/src/mobs/drops.rs::roll the entity table from its random sequence
LivingEntity.dropFromEntityInteractLootTable port crates/horizon-client/src/game/creatures.rs::Game::interact_armadillo brush/armadillo is the only table that uses it
LivingEntity.dropFromShearingLootTable port crates/horizon-client/src/game/creatures.rs::Game::interact_mob sheep by colour; snow golem and bogged in interact_shear_mob; gap: minor: a mooshroom's five mushrooms are hardcoded, not read from the table
LivingEntity.getFallDamageSound inline crates/horizon-client/src/mobs/living.rs::Mob::cause_fall_damage gap: minor: monsters use the generic small and big fall sounds, not entity.hostile.small_fall and big_fall
LivingEntity.getHitbox missing minor: a rider's hitbox is not cut at its seat height; spear and melee tests use the full box
LivingEntity.postPiercingAttack port crates/horizon-client/src/game/enchant_effects.rs::Game::post_piercing_attack Lunge's dash after a jab
LivingEntity.trapdoorUsableAsLadder port crates/horizon-world/src/climbing.rs::on_climbable gap: minor: the player only; a mob's ai.rs::on_climbable checks the climbable tag at its feet, no open trapdoor over a ladder
LivingEntity.isAlive port crates/horizon-client/src/mobs.rs::Mob::alive not removed and health above zero
LivingEntity.setIgnoreFallDamageFromCurrentImpulse port crates/horizon-world/src/living_fall.rs::ImpulseContext::set_ignore_fall_damage 40 ticks of grace
LivingEntity.getDamageAfterArmorAbsorb inline crates/horizon-client/src/mobs.rs::Mob::damage_with the player's armor wear is health.rs hurt_armor; the mob path also scales armor effectiveness (breach)
LivingEntity.getKillCredit port crates/horizon-client/src/game/creatures.rs::Game::mob_died the last player to hit it, else the last mob
LivingEntity.getTicksSinceLastKineticHitFeedback port crates/horizon-client/src/game/spear.rs::Game::kinetic_hit_ticks
LivingEntity.swapHandItems missing player: on a server another player's hand swap (entity event 55) is not handled, so their held items do not swap on screen
LivingEntity.getAttackRangeWith inline crates/horizon-client/src/game.rs::Game::reach gap: minor: only the spear's range is item specific (spear.rs REACH); other items use the default reach
LivingEntity.getActiveItem inline crates/horizon-client/src/game.rs::Game::held the selected slot; the item in use is the `using` slot
LivingEntity.getItemInHand inline crates/horizon-client/src/game.rs::Game::held main hand; the off hand is the `offhand` field
LivingEntity.setItemInHand inline crates/horizon-client/src/game.rs::Game::held_mut main hand cell
LivingEntity.getArmorCoverPercentage port crates/horizon-client/src/game/creatures.rs::Game::player_view armor_cover is worn pieces over 4; a LAN guest's is 0
LivingEntity.shouldTravelInFluid inline crates/horizon-client/src/mobs/living.rs::Mob::travel in liquid, affected by fluids and not standing on a fluid it walks on (lava walkers)
LivingEntity.isInShallowFluid inline crates/horizon-client/src/mobs/living.rs::Mob::travel_in_fluid lava depth against fluid_jump_threshold
LivingEntity.updateFallFlyingMovement port crates/horizon-client/src/motion.rs::MotionWorld::travel_fall_flying gap: minor: the player only; a mob with a glider never fall-flies
LivingEntity.travelRidden inline crates/horizon-client/src/mobs/living.rs::Mob::travel the rider's input is applied in equine.rs ridden_step, nautilus.rs ridden and happy_ghast.rs ridden
LivingEntity.calculateEntityAnimation port crates/horizon-client/src/mobs/living.rs::Mob::update_walk_animation a passenger's legs are held still at draw time (anim.rs)
LivingEntity.causeExtraKnockback port crates/horizon-client/src/game/enchant_effects.rs::Game::extra_knockback_direction target pushed along the attacker's yaw; the attacker stops sprinting
LivingEntity.wasRecentlyStabbed inline crates/horizon-client/src/game/spear.rs::Game::spear_tick Game::stabbed with contact_cooldown_ticks
LivingEntity.rememberStabbedEntity inline crates/horizon-client/src/game/spear.rs::Game::spear_tick stabbed.insert(key, now)
LivingEntity.stabbedEntities missing player: the count of mobs stabbed in one use is never read, so the Spear Many Mobs advancement (spear_mobs trigger) never unlocks
LivingEntity.stabAttack port crates/horizon-client/src/game/spear.rs::Game::stab_mob gap: minor: the player's spear only; mobs never stab
LivingEntity.handleHandSwap skip:other the LAN server sends both changed slots in one SetEquipment instead of entity event 55; clients end in the same state
LivingEntity.handleEquipmentChanges port crates/horizon-client/src/lan/entity.rs::ServerEntity::send_equipment changed slots as one SetEquipment
LivingEntity.updatePlayersWithNewEquipment inline crates/horizon-client/src/lan/entity.rs::ServerEntity::send_equipment the packet is built there
LivingEntity.tickHeadTurn port crates/horizon-client/src/game/remote.rs::remote_player_head_turn another player's body turn; mobs use Mob::body_rotation_tick in control.rs
LivingEntity.canGlide inline crates/horizon-client/src/motion.rs::MotionWorld::player_movement_tick_with_fluids gap: minor: the player only (airborne, not flying, a worn glider, no Levitation); mobs never glide
LivingEntity.onItemPickup port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_pickups gap: player: only a sulfur cube's pickup fires thrown_item_picked_up_by_entity; a piglin picking up gold you threw does not, so Oh Shiny never unlocks
LivingEntity.isUsingItem inline crates/horizon-client/src/game/remote.rs::RemoteInputWorld::using_item Game::using is Some; a mob's is extra.using_item above 0
LivingEntity.setLivingEntityFlag skip:java bit accessor; the flags are built when synced in game/lan.rs::mob_meta
LivingEntity.getTicksUsingItem inline crates/horizon-client/src/game.rs::Game::tick_used_item the tick count kept in Game::using
LivingEntity.stopUsingItem inline crates/horizon-client/src/game.rs::Game::tick_used_item using is set to None when the use ends or the stack is gone
LivingEntity.getLocalBoundsForPose missing minor: no pose boxes; a dismounting rider uses mounts.rs::dismount_mount's own side checks
LivingEntity.wouldNotSuffocateAtTargetPose port crates/horizon-client/src/pose.rs::MotionWorld::can_fit_pose gap: minor: the player's poses only; a camel changing pose is not checked
LivingEntity.canUsePortal port crates/horizon-client/src/game/nether_portal.rs::Game::mob_can_use_portal gap: minor: a sleeping mob is not excluded
LivingEntity.setPosToBed port crates/horizon-client/src/mobs/villager.rs::start_sleeping x and z at the bed's centre, y 0.6875 above its base (sleep height plus 0.125)
LivingEntity.entityEventForEquipmentBreak missing player: on a server another player's or mob's tool or armor breaking (entity events 47 to 52, 65 and 68) makes no break sound or crumbs
LivingEntity.onEquippedItemBroken inline crates/horizon-client/src/game.rs::Game::damage_held gap: minor: the stack is cleared and modifiers rebuilt, but no break event is broadcast
LivingEntity.stopLocationBasedEffects inline crates/horizon-client/src/game.rs::Game::apply_equipment all applied modifiers are dropped and re-added from what is worn
LivingEntity.getEquipmentSlotForItem inline crates/horizon-client/src/game/mob_gear.rs::Game::equip_from_table resolveSlot: the item's equip_slot, else the main hand
LivingEntity.createEquipmentSlotAccess inline crates/horizon-client/src/game/commands/items.rs::Game::slots_named /item slot names such as armor.head and weapon.mainhand
LivingEntity.getEquipmentSlot inline crates/horizon-client/src/game/commands/items.rs::Game::slots_named slot names instead of the numeric ids 98, 99 and 100 and up
LivingEntity.getSlot port crates/horizon-client/src/game/commands/items.rs::Game::slots_named for the player and mobs through /item
LivingEntity.recreateFromPacket port crates/horizon-client/src/game/remote.rs::Game::spawn_entity position, head yaw and movement of a server's mob
LivingEntity.getPassengerRidingPosition port crates/horizon-client/src/mobs/riders.rs::seat gap: minor: attachments are a table by species, not scaled by getScale and the age scale
LivingEntity.lerpHeadRotationStep inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities head_lerps: 1/steps of the way to the target yaw
LivingEntity.isInvulnerableTo inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: minor: the invulnerable flag only; no enchantment damage immunity
Mob.getMoveControl port crates/horizon-client/src/mobs/control.rs::Mob::move_control_tick a mount is steered through riders.rs::drive
Mob.getNavigation inline crates/horizon-client/src/mobs/riders.rs::drive a rider's vehicle carries it along; each mob keeps its own ai.nav
Mob.getControllingPassenger inline crates/horizon-client/src/mobs/riders.rs::drive extra.rider steers the vehicle with its goals
Mob.asValidTarget port crates/horizon-client/src/mobs/monster_brain.rs::can_attack creative and spectator players are never valid; goal mobs use goals.rs Mob::can_target_player
Mob.spawnAnim port crates/horizon-client/src/game/spawner.rs::Game::poof_particles the poof of a mob a spawner made (event 20 on a server's client)
Mob.updateControlFlags inline crates/horizon-client/src/mobs/riders.rs::drive gap: minor: a mob in a boat keeps its JUMP goals
Mob.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: drop_chances and DeathLootTable survive only from the loaded raw tag
Mob.burnUndead inline crates/horizon-client/src/mobs/ai.rs::ai_step gap: player: a helmeted undead never loses helmet durability in sunlight (vanilla 0 to 1 per burn tick), so the helmet never wears out or breaks
Mob.pickUpItem missing player: mobs do not pick up dropped gear: zombies, skeletons, husks, drowned (tridents), vindicators, pillagers and wither skeletons that can pick up loot ignore items on the ground; only piglins, villagers, pandas, allays and sulfur cubes pick things up
Mob.attemptToShearEquipment inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast gap: minor: the happy ghast harness and the llama carpet (llamas.rs interact_llama) only
Mob.shearItem inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast the item is dropped and the shears lose 1 durability
Mob.canReplaceCurrentItem missing minor: only used by loot pickup (Mob.pickUpItem, missing)
Mob.compareArmor missing minor: only used by loot pickup (Mob.pickUpItem, missing); spawn gear is picked in finalize.rs Ctx::armor
Mob.compareWeapons missing minor: only used by loot pickup (Mob.pickUpItem, missing)
Mob.getApproximateAttributeWith missing minor: only used by loot pickup (Mob.pickUpItem, missing)
Mob.canReplaceEqualItem missing minor: only used by loot pickup (Mob.pickUpItem, missing)
Mob.checkSpawnObstruction port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_obstruction no liquid in the box and no blocking entity
Mob.hasValidEquippableItemForSlot skip:other Horizon stores only items that fit a slot, so there is nothing to validate
Mob.createEquipmentParams inline crates/horizon-client/src/game/mob_gear.rs::Game::equip_from_table EntityLootParams with the mob as `this`
Mob.getEquipmentForSlot inline crates/horizon-client/src/mobs/finalize.rs::Ctx::armor the material table leather, copper, golden, chainmail, iron, diamond by piece
Mob.enchantSpawnedEquipment port crates/horizon-client/src/game/mob_gear.rs::Game::enchant_slot chance times the local difficulty's special multiplier
Mob.usePlayerItem port crates/horizon-client/src/game.rs::Game::consume_held gap: minor: no use_remainder (a bottle or bowl a food item leaves behind)
Mob.setNoAi skip:java plain field Mob::no_ai, synced as a flag in game/lan.rs::mob_meta
Mob.setLeftHanded skip:java plain field Extra::left_handed, synced in game/lan.rs::mob_meta
Mob.setAggressive skip:java plain field Ai::aggressive, synced in game/lan.rs::mob_meta
Mob.isNoAi skip:java plain field Mob::no_ai
Mob.isLeftHanded skip:java plain field Extra::left_handed
Mob.getAttackBoundingBox inline crates/horizon-client/src/mobs/goals.rs::Mob::within_melee_range gap: minor: a mounted mob's box is not merged with its mount's
Mob.removeAfterChangingDimensions inline crates/horizon-client/src/game/nether_portal.rs::Game::send_through_portal the mob moves through as NBT with its leash dropped, so nothing is left to clear
Mob.onAttributeUpdated missing minor: follow_range set at runtime does not resize the pathfinder's visited-node cap (set once in Mob::new)
Mob.registerDebugValues skip:debug debug overlay values
Mob.swingForAttack port crates/horizon-client/src/mobs/ai.rs::Mob::swing_hand_modified swing duration with haste, conduit power and mining fatigue
NeutralMob.addPersistentAngerSaveData port crates/horizon-client/src/mobs/bee.rs::to_nbt gap: minor: anger_end_time only; angry_at (the target's UUID) is not saved, and wolves and polar bears keep a tick counter instead
NeutralMob.readPersistentAngerSaveData port crates/horizon-client/src/mobs/bee.rs::from_nbt gap: minor: anger_end_time only; angry_at is not read, so a reloaded angry bee picks its target again
NeutralMob.isAngryAtAllPlayers missing minor: the universal_anger game rule has no effect (default off)
NeutralMob.playerDied missing player: the forgive_dead_players rule (on by default) is not implemented, so bees, wolves and polar bears stay angry at a player who died and respawned
OminousItemSpawner.tick port crates/horizon-client/src/game/ominous_item_spawner.rs::Game::tick_ominous_item_spawners count, then server and client parts
OminousItemSpawner.tickServer inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::tick_ominous_item_spawners the about-to-spawn sound 36 ticks ahead, then the item
OminousItemSpawner.tickClient inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::tick_ominous_item_spawners particles every 5 game ticks
OminousItemSpawner.spawnItem port crates/horizon-client/src/game/ominous_item_spawner.rs::Game::spawn_ominous_item item entity or projectile, level event 3021 and entity_place game event
OminousItemSpawner.spawnProjectile inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::spawn_ominous_item gap: minor: power and uncertainty come from projectile(); the spawner is not set as the projectile's owner
PathfinderMob.checkSpawnRules port crates/horizon-client/src/mobs/ai.rs::walk_target_value natural spawning needs a walk target value of 0 or more
1 Interaction.defineSynchedData missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
2 Interaction.readAdditionalSaveData missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
3 Interaction.addAdditionalSaveData missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
4 Interaction.onSyncedDataUpdated missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
5 Interaction.skipAttackInteraction missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
6 Interaction.interact missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
7 Interaction.getLastAttacker missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
8 Interaction.getTarget missing minor: no interaction entity; /summon interaction (the invisible click hitbox map makers use) creates nothing
9 Leashable.isLeashed inline crates/horizon-client/src/mobs/leash.rs::tick the mob's extra.leash being set
10 Leashable.setDelayedLeashHolderId inline crates/horizon-client/src/game/remote.rs::Game::handle_packet SetEntityLink arm: a holder id not known yet waits as Holder::Mob until the knot arrives (remote_objects.rs)
11 Leashable.readLeashData port crates/horizon-client/src/mobs/leash.rs::pending_from_nbt holder UUID or fence knot block; kept pending until the holder exists
12 Leashable.restoreLeashFromSave port crates/horizon-client/src/game/leads.rs::Game::tick_leads holder found by UUID or knot block; a lead whose holder never shows up drops as an item after 100 ticks
13 Leashable.angularFriction inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: ground friction is a fixed 0.6 times 0.91, not the friction of the block under the mob (ice, slime)
14 Leashable.checkElasticInteractions port crates/horizon-client/src/mobs/leash.rs::tick gap: minor: one attachment pair only; no quad leash for a horse, llama or sniffer led by a happy ghast
15 Leashable.getHolderMovement port crates/horizon-client/src/mobs/leash.rs::holder_state gap: minor: the holder's velocity is always used; a NoAI mob holder should count as standing still
16 Leashable.computeElasticInteraction port crates/horizon-client/src/mobs/leash.rs::spring gap: minor: single attachment pair (0, 0.5, 0.5 of the mob and 0, 0.5, 0 of the holder); the four-point version is missing
17 Leashable.createQuadLeashOffsets missing player: a horse, llama or sniffer led by a happy ghast is drawn with one rope to its middle and pulled by one spring instead of four ropes to its corners
18 Leashable.leashableLeashedTo port crates/horizon-client/src/game/leads.rs::Game::player_leashed only the player as holder (box of 32); mob and knot holders are filtered inline in interact_leash and interact_knot
19 Leashable.leashableInArea port crates/horizon-client/src/game/leads.rs::Game::player_leashed the 32 block box around a point, for the player's lead only
20 Leashable.Wrench.torqueFromForce inline crates/horizon-client/src/mobs/leash.rs::spring lever.z * force.x - lever.x * force.z
21 Leashable.Wrench.accumulate inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: one wrench only, nothing to sum (quad leash would need it)
22 Leashable.Wrench.scale inline crates/horizon-client/src/mobs/leash.rs::tick gap: minor: the 0.25 scale of a quad connection is not applied
23 LightningBolt.powerLightningRod port crates/horizon-client/src/game/lightning.rs::Game::strike_rod powered for 8 ticks with level event 3002 along the rod
24 LightningBolt.getStrikePosition inline crates/horizon-client/src/game/lightning.rs::Game::strike_rod the block 1e-6 below the bolt, also used by bolt_clear_copper
25 LightningBolt.spawnFire port crates/horizon-client/src/game/lightning.rs::Game::bolt_fire gap: minor: no fire_spread_radius_around_player check (canSpreadFireAround)
26 LightningBolt.randomWalkCleaningCopper inline crates/horizon-world/src/level/tick.rs::Sim::lightning_clear_copper 3 to 5 walks of up to 8 steps
27 LightningBolt.randomStepCleaningCopper inline crates/horizon-world/src/level/tick.rs::Sim::lightning_clear_copper up to 10 random blocks in the 3x3x3 cube, first weathering copper steps back
28 LightningBolt.shouldRenderAtSqrDistance missing player: a bolt more than 64 blocks away (scaled by Entity Distance) is still drawn; vanilla shows only the sky flash and thunder there
29 LinearInterpolationHandler.create inline crates/horizon-client/src/game/remote.rs::Game::move_entity 3 steps (lerps.insert); only on a server's client, a local game moves boats, carts and bobbers directly
30 LinearInterpolationHandler.startInterpolating inline crates/horizon-client/src/game/remote.rs::Game::move_entity target kept as Lerp with steps 3
31 LinearInterpolationHandler.doInterpolate inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities gap: minor: position eased by 1/steps; a boat's or minecart's yaw is set at once, not eased
32 LivingEntity.<init> port crates/horizon-client/src/mobs.rs::Mob::new box, health, random yaw
33 LivingEntity.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: player: arrow count (12) and stinger count (13) are never kept or sent, so arrows and bee stingers do not stay stuck in a body
34 LivingEntity.hasLandedInLiquid missing minor: the fall impulse context (mace, wind charge) is not cleared when a server player lands in a liquid
35 LivingEntity.getScale missing minor: no scale attribute, so /attribute scale and datapack scaling do nothing; baby and slime sizes come from tables in Mob::dims
36 LivingEntity.shouldDropLoot inline crates/horizon-client/src/mobs/drops.rs::die mob_drops rule and not a baby (monsters excepted)
37 LivingEntity.decreaseAirSupply port crates/horizon-client/src/motion/environment.rs::MotionWorld::tick_environment_damage gap: minor: only the player reads oxygen_bonus (Respiration); a mob loses one air per tick in ai.rs::base_tick
38 LivingEntity.setLastHurtByPlayer inline crates/horizon-client/src/mobs.rs::Mob::damage_with ai.last_hurt_by_player = 100 on a player's hit; Game::last_hurt_by_player records which guest
39 LivingEntity.onRemoval skip:other waypoint tracking is per player (game/lan_waypoints.rs); no mob has a transmit range
40 LivingEntity.updateDirtyEffects skip:java dirty flag; Horizon reads invisibility and swirls from the effect list when needed
41 LivingEntity.updateInvisibilityStatus inline crates/horizon-client/src/mobs/trader.rs::is_invisible the Invisibility effect hides the model (render_with) and sets flag 0x20 in lan.rs::mob_meta
42 LivingEntity.areAllEffectsAmbient inline crates/horizon-client/src/game/client_ambient.rs::Game::effect_swirls a server's flag is kept in Extra::effect_ambient; a mob's own effects are never ambient
43 LivingEntity.removeAllEffects port crates/horizon-client/src/effects.rs::PlayerEffects::clear player; a mob's list is cleared in commands/effects.rs::cmd_effect_clear
44 LivingEntity.removeEffect inline crates/horizon-client/src/game/commands/effects.rs::Game::cmd_effect_clear retain by effect id for the player and for mobs
45 LivingEntity.onEffectUpdated port crates/horizon-client/src/game/potions.rs::Game::apply_effect_status gap: minor: player only; a mob's attributes follow just speed and slowness, strength, weakness, resistance and absorption do nothing on mobs
46 LivingEntity.onEffectsRemoved port crates/horizon-client/src/game/potions.rs::Game::apply_effect_status gap: minor: same as onEffectUpdated, mobs only react to speed and slowness
47 LivingEntity.refreshDirtyAttributes port crates/horizon-client/src/game/potions.rs::Game::apply_effect_status modifiers diffed against the applied list each tick (player)
48 LivingEntity.dealDefaultKnockback inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: minor: pushed away from the source position; an arrow uses its previous position, vanilla uses its flight direction
49 LivingEntity.applyItemBlocking port crates/horizon-client/src/health.rs::Environment::apply_blocking gap: minor: the player's shield only; a mob holding a shield never blocks
50 LivingEntity.playSecondaryHurtSound port crates/horizon-client/src/game/enchant_effects.rs::Game::thorns enchant.thorns.hit at the attacker
51 LivingEntity.resolveMobResponsibleForDamage inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: minor: last_hurt_by comes from any attacker; no #no_anger damage types or wind charge exemption
52 LivingEntity.resolvePlayerResponsibleForDamage inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: player: damage by a player's tamed wolf or cat sets no last-hurt-by-player, so the kill drops no experience and no player-only loot
53 LivingEntity.breakItem port crates/horizon-client/src/game.rs::Game::damage_held gap: player: a tool or armor breaking shows no crumb particles and always plays entity.item.break, not the item's own break sound
54 LivingEntity.dropExperience inline crates/horizon-client/src/mobs/drops.rs::die orbs only when a player killed it and mob_drops is on
55 LivingEntity.getKnockback port crates/horizon-client/src/game/enchant_effects.rs::Game::extra_knockback gap: minor: the Knockback enchant halved (player and gear::knockback for mobs); the attack_knockback attribute counts only for the hoglin shove
56 LivingEntity.dropFromLootTable port crates/horizon-client/src/mobs/drops.rs::roll the entity table from its random sequence
57 LivingEntity.dropFromEntityInteractLootTable port crates/horizon-client/src/game/creatures.rs::Game::interact_armadillo brush/armadillo is the only table that uses it
58 LivingEntity.dropFromShearingLootTable port crates/horizon-client/src/game/creatures.rs::Game::interact_mob sheep by colour; snow golem and bogged in interact_shear_mob; gap: minor: a mooshroom's five mushrooms are hardcoded, not read from the table
59 LivingEntity.getFallDamageSound inline crates/horizon-client/src/mobs/living.rs::Mob::cause_fall_damage gap: minor: monsters use the generic small and big fall sounds, not entity.hostile.small_fall and big_fall
60 LivingEntity.getHitbox missing minor: a rider's hitbox is not cut at its seat height; spear and melee tests use the full box
61 LivingEntity.postPiercingAttack port crates/horizon-client/src/game/enchant_effects.rs::Game::post_piercing_attack Lunge's dash after a jab
62 LivingEntity.trapdoorUsableAsLadder port crates/horizon-world/src/climbing.rs::on_climbable gap: minor: the player only; a mob's ai.rs::on_climbable checks the climbable tag at its feet, no open trapdoor over a ladder
63 LivingEntity.isAlive port crates/horizon-client/src/mobs.rs::Mob::alive not removed and health above zero
64 LivingEntity.setIgnoreFallDamageFromCurrentImpulse port crates/horizon-world/src/living_fall.rs::ImpulseContext::set_ignore_fall_damage 40 ticks of grace
65 LivingEntity.getDamageAfterArmorAbsorb inline crates/horizon-client/src/mobs.rs::Mob::damage_with the player's armor wear is health.rs hurt_armor; the mob path also scales armor effectiveness (breach)
66 LivingEntity.getKillCredit port crates/horizon-client/src/game/creatures.rs::Game::mob_died the last player to hit it, else the last mob
67 LivingEntity.getTicksSinceLastKineticHitFeedback port crates/horizon-client/src/game/spear.rs::Game::kinetic_hit_ticks
68 LivingEntity.swapHandItems missing player: on a server another player's hand swap (entity event 55) is not handled, so their held items do not swap on screen
69 LivingEntity.getAttackRangeWith inline crates/horizon-client/src/game.rs::Game::reach gap: minor: only the spear's range is item specific (spear.rs REACH); other items use the default reach
70 LivingEntity.getActiveItem inline crates/horizon-client/src/game.rs::Game::held the selected slot; the item in use is the `using` slot
71 LivingEntity.getItemInHand inline crates/horizon-client/src/game.rs::Game::held main hand; the off hand is the `offhand` field
72 LivingEntity.setItemInHand inline crates/horizon-client/src/game.rs::Game::held_mut main hand cell
73 LivingEntity.getArmorCoverPercentage port crates/horizon-client/src/game/creatures.rs::Game::player_view armor_cover is worn pieces over 4; a LAN guest's is 0
74 LivingEntity.shouldTravelInFluid inline crates/horizon-client/src/mobs/living.rs::Mob::travel in liquid, affected by fluids and not standing on a fluid it walks on (lava walkers)
75 LivingEntity.isInShallowFluid inline crates/horizon-client/src/mobs/living.rs::Mob::travel_in_fluid lava depth against fluid_jump_threshold
76 LivingEntity.updateFallFlyingMovement port crates/horizon-client/src/motion.rs::MotionWorld::travel_fall_flying gap: minor: the player only; a mob with a glider never fall-flies
77 LivingEntity.travelRidden inline crates/horizon-client/src/mobs/living.rs::Mob::travel the rider's input is applied in equine.rs ridden_step, nautilus.rs ridden and happy_ghast.rs ridden
78 LivingEntity.calculateEntityAnimation port crates/horizon-client/src/mobs/living.rs::Mob::update_walk_animation a passenger's legs are held still at draw time (anim.rs)
79 LivingEntity.causeExtraKnockback port crates/horizon-client/src/game/enchant_effects.rs::Game::extra_knockback_direction target pushed along the attacker's yaw; the attacker stops sprinting
80 LivingEntity.wasRecentlyStabbed inline crates/horizon-client/src/game/spear.rs::Game::spear_tick Game::stabbed with contact_cooldown_ticks
81 LivingEntity.rememberStabbedEntity inline crates/horizon-client/src/game/spear.rs::Game::spear_tick stabbed.insert(key, now)
82 LivingEntity.stabbedEntities missing player: the count of mobs stabbed in one use is never read, so the Spear Many Mobs advancement (spear_mobs trigger) never unlocks
83 LivingEntity.stabAttack port crates/horizon-client/src/game/spear.rs::Game::stab_mob gap: minor: the player's spear only; mobs never stab
84 LivingEntity.handleHandSwap skip:other the LAN server sends both changed slots in one SetEquipment instead of entity event 55; clients end in the same state
85 LivingEntity.handleEquipmentChanges port crates/horizon-client/src/lan/entity.rs::ServerEntity::send_equipment changed slots as one SetEquipment
86 LivingEntity.updatePlayersWithNewEquipment inline crates/horizon-client/src/lan/entity.rs::ServerEntity::send_equipment the packet is built there
87 LivingEntity.tickHeadTurn port crates/horizon-client/src/game/remote.rs::remote_player_head_turn another player's body turn; mobs use Mob::body_rotation_tick in control.rs
88 LivingEntity.canGlide inline crates/horizon-client/src/motion.rs::MotionWorld::player_movement_tick_with_fluids gap: minor: the player only (airborne, not flying, a worn glider, no Levitation); mobs never glide
89 LivingEntity.onItemPickup port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_pickups gap: player: only a sulfur cube's pickup fires thrown_item_picked_up_by_entity; a piglin picking up gold you threw does not, so Oh Shiny never unlocks
90 LivingEntity.isUsingItem inline crates/horizon-client/src/game/remote.rs::RemoteInputWorld::using_item Game::using is Some; a mob's is extra.using_item above 0
91 LivingEntity.setLivingEntityFlag skip:java bit accessor; the flags are built when synced in game/lan.rs::mob_meta
92 LivingEntity.getTicksUsingItem inline crates/horizon-client/src/game.rs::Game::tick_used_item the tick count kept in Game::using
93 LivingEntity.stopUsingItem inline crates/horizon-client/src/game.rs::Game::tick_used_item using is set to None when the use ends or the stack is gone
94 LivingEntity.getLocalBoundsForPose missing minor: no pose boxes; a dismounting rider uses mounts.rs::dismount_mount's own side checks
95 LivingEntity.wouldNotSuffocateAtTargetPose port crates/horizon-client/src/pose.rs::MotionWorld::can_fit_pose gap: minor: the player's poses only; a camel changing pose is not checked
96 LivingEntity.canUsePortal port crates/horizon-client/src/game/nether_portal.rs::Game::mob_can_use_portal gap: minor: a sleeping mob is not excluded
97 LivingEntity.setPosToBed port crates/horizon-client/src/mobs/villager.rs::start_sleeping x and z at the bed's centre, y 0.6875 above its base (sleep height plus 0.125)
98 LivingEntity.entityEventForEquipmentBreak missing player: on a server another player's or mob's tool or armor breaking (entity events 47 to 52, 65 and 68) makes no break sound or crumbs
99 LivingEntity.onEquippedItemBroken inline crates/horizon-client/src/game.rs::Game::damage_held gap: minor: the stack is cleared and modifiers rebuilt, but no break event is broadcast
100 LivingEntity.stopLocationBasedEffects inline crates/horizon-client/src/game.rs::Game::apply_equipment all applied modifiers are dropped and re-added from what is worn
101 LivingEntity.getEquipmentSlotForItem inline crates/horizon-client/src/game/mob_gear.rs::Game::equip_from_table resolveSlot: the item's equip_slot, else the main hand
102 LivingEntity.createEquipmentSlotAccess inline crates/horizon-client/src/game/commands/items.rs::Game::slots_named /item slot names such as armor.head and weapon.mainhand
103 LivingEntity.getEquipmentSlot inline crates/horizon-client/src/game/commands/items.rs::Game::slots_named slot names instead of the numeric ids 98, 99 and 100 and up
104 LivingEntity.getSlot port crates/horizon-client/src/game/commands/items.rs::Game::slots_named for the player and mobs through /item
105 LivingEntity.recreateFromPacket port crates/horizon-client/src/game/remote.rs::Game::spawn_entity position, head yaw and movement of a server's mob
106 LivingEntity.getPassengerRidingPosition port crates/horizon-client/src/mobs/riders.rs::seat gap: minor: attachments are a table by species, not scaled by getScale and the age scale
107 LivingEntity.lerpHeadRotationStep inline crates/horizon-client/src/game/remote.rs::Game::tick_remote_entities head_lerps: 1/steps of the way to the target yaw
108 LivingEntity.isInvulnerableTo inline crates/horizon-client/src/mobs.rs::Mob::damage_with gap: minor: the invulnerable flag only; no enchantment damage immunity
109 Mob.getMoveControl port crates/horizon-client/src/mobs/control.rs::Mob::move_control_tick a mount is steered through riders.rs::drive
110 Mob.getNavigation inline crates/horizon-client/src/mobs/riders.rs::drive a rider's vehicle carries it along; each mob keeps its own ai.nav
111 Mob.getControllingPassenger inline crates/horizon-client/src/mobs/riders.rs::drive extra.rider steers the vehicle with its goals
112 Mob.asValidTarget port crates/horizon-client/src/mobs/monster_brain.rs::can_attack creative and spectator players are never valid; goal mobs use goals.rs Mob::can_target_player
113 Mob.spawnAnim port crates/horizon-client/src/game/spawner.rs::Game::poof_particles the poof of a mob a spawner made (event 20 on a server's client)
114 Mob.updateControlFlags inline crates/horizon-client/src/mobs/riders.rs::drive gap: minor: a mob in a boat keeps its JUMP goals
115 Mob.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: drop_chances and DeathLootTable survive only from the loaded raw tag
116 Mob.burnUndead inline crates/horizon-client/src/mobs/ai.rs::ai_step gap: player: a helmeted undead never loses helmet durability in sunlight (vanilla 0 to 1 per burn tick), so the helmet never wears out or breaks
117 Mob.pickUpItem missing player: mobs do not pick up dropped gear: zombies, skeletons, husks, drowned (tridents), vindicators, pillagers and wither skeletons that can pick up loot ignore items on the ground; only piglins, villagers, pandas, allays and sulfur cubes pick things up
118 Mob.attemptToShearEquipment inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast gap: minor: the happy ghast harness and the llama carpet (llamas.rs interact_llama) only
119 Mob.shearItem inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast the item is dropped and the shears lose 1 durability
120 Mob.canReplaceCurrentItem missing minor: only used by loot pickup (Mob.pickUpItem, missing)
121 Mob.compareArmor missing minor: only used by loot pickup (Mob.pickUpItem, missing); spawn gear is picked in finalize.rs Ctx::armor
122 Mob.compareWeapons missing minor: only used by loot pickup (Mob.pickUpItem, missing)
123 Mob.getApproximateAttributeWith missing minor: only used by loot pickup (Mob.pickUpItem, missing)
124 Mob.canReplaceEqualItem missing minor: only used by loot pickup (Mob.pickUpItem, missing)
125 Mob.checkSpawnObstruction port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_obstruction no liquid in the box and no blocking entity
126 Mob.hasValidEquippableItemForSlot skip:other Horizon stores only items that fit a slot, so there is nothing to validate
127 Mob.createEquipmentParams inline crates/horizon-client/src/game/mob_gear.rs::Game::equip_from_table EntityLootParams with the mob as `this`
128 Mob.getEquipmentForSlot inline crates/horizon-client/src/mobs/finalize.rs::Ctx::armor the material table leather, copper, golden, chainmail, iron, diamond by piece
129 Mob.enchantSpawnedEquipment port crates/horizon-client/src/game/mob_gear.rs::Game::enchant_slot chance times the local difficulty's special multiplier
130 Mob.usePlayerItem port crates/horizon-client/src/game.rs::Game::consume_held gap: minor: no use_remainder (a bottle or bowl a food item leaves behind)
131 Mob.setNoAi skip:java plain field Mob::no_ai, synced as a flag in game/lan.rs::mob_meta
132 Mob.setLeftHanded skip:java plain field Extra::left_handed, synced in game/lan.rs::mob_meta
133 Mob.setAggressive skip:java plain field Ai::aggressive, synced in game/lan.rs::mob_meta
134 Mob.isNoAi skip:java plain field Mob::no_ai
135 Mob.isLeftHanded skip:java plain field Extra::left_handed
136 Mob.getAttackBoundingBox inline crates/horizon-client/src/mobs/goals.rs::Mob::within_melee_range gap: minor: a mounted mob's box is not merged with its mount's
137 Mob.removeAfterChangingDimensions inline crates/horizon-client/src/game/nether_portal.rs::Game::send_through_portal the mob moves through as NBT with its leash dropped, so nothing is left to clear
138 Mob.onAttributeUpdated missing minor: follow_range set at runtime does not resize the pathfinder's visited-node cap (set once in Mob::new)
139 Mob.registerDebugValues skip:debug debug overlay values
140 Mob.swingForAttack port crates/horizon-client/src/mobs/ai.rs::Mob::swing_hand_modified swing duration with haste, conduit power and mining fatigue
141 NeutralMob.addPersistentAngerSaveData port crates/horizon-client/src/mobs/bee.rs::to_nbt gap: minor: anger_end_time only; angry_at (the target's UUID) is not saved, and wolves and polar bears keep a tick counter instead
142 NeutralMob.readPersistentAngerSaveData port crates/horizon-client/src/mobs/bee.rs::from_nbt gap: minor: anger_end_time only; angry_at is not read, so a reloaded angry bee picks its target again
143 NeutralMob.isAngryAtAllPlayers missing minor: the universal_anger game rule has no effect (default off)
144 NeutralMob.playerDied missing player: the forgive_dead_players rule (on by default) is not implemented, so bees, wolves and polar bears stay angry at a player who died and respawned
145 OminousItemSpawner.tick port crates/horizon-client/src/game/ominous_item_spawner.rs::Game::tick_ominous_item_spawners count, then server and client parts
146 OminousItemSpawner.tickServer inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::tick_ominous_item_spawners the about-to-spawn sound 36 ticks ahead, then the item
147 OminousItemSpawner.tickClient inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::tick_ominous_item_spawners particles every 5 game ticks
148 OminousItemSpawner.spawnItem port crates/horizon-client/src/game/ominous_item_spawner.rs::Game::spawn_ominous_item item entity or projectile, level event 3021 and entity_place game event
149 OminousItemSpawner.spawnProjectile inline crates/horizon-client/src/game/ominous_item_spawner.rs::Game::spawn_ominous_item gap: minor: power and uncertainty come from projectile(); the spawner is not set as the projectile's owner
150 PathfinderMob.checkSpawnRules port crates/horizon-client/src/mobs/ai.rs::walk_target_value natural spawning needs a walk target value of 0 or more
+149
View File
@@ -0,0 +1,149 @@
PortalProcessor.processPortalTeleportation port crates/horizon-client/src/nether_portal.rs::process decayTick when not inside, else counts up to the transition time; the time comes from the players_nether_portal_* rules for the player
PositionMoveRotation.of skip:java record factory for teleport packets; Horizon builds the packet fields directly (lan/hub.rs teleport_relative)
PostSpawnProcessor.andThen skip:java closure chaining
Relative.rotation skip:java EnumSet builder; Horizon uses the bit constants in horizon-protocol packets/play.rs relative
Relative.position skip:java EnumSet builder; bit constants
Relative.direction skip:java EnumSet builder; bit constants
Relative.isSet skip:java bit test; callers test the flag bits with &
Relative.unpack skip:java the packet keeps the packed int and tests bits directly
Relative.pack skip:java the packet keeps the packed int
SlotAccess.forEquipmentSlot inline crates/horizon-client/src/game/commands/items.rs::slot_set gap: minor: no validator, so /item replace puts any item in a chest, legs or feet slot; vanilla refuses an item that does not belong there
SlotProvider.getSlotsFromRange inline crates/horizon-client/src/game/commands/items.rs::slots_named slot names and ranges resolve to slots there; missing slots are skipped
SpawnPlacements.register skip:data placements and heightmaps are read from tables (MobData)
SpawnPlacements.getPlacementType port crates/horizon-client/src/mobs/data.rs::placement on ground when unregistered
SteppedInterpolationHandler.create port crates/horizon-world/src/stepped_interpolation.rs::new client branch only: remote.rs builds one per living entity with its type's update interval; the server tracker is not created (see SteppedInterpolationTracker)
SteppedInterpolationHandler.InterpolationData.advance port crates/horizon-world/src/stepped_interpolation.rs::advance
SteppedInterpolationHandler.InterpolationData.addDelta skip:other remote mobs are only moved by interpolation here, so there is no predicted movement to fold in (see SteppedInterpolation::interpolate)
SteppedInterpolationHandler.InterpolationData.addRotation skip:other same: no client-side movement of remote mobs to adjust the target for
SteppedInterpolationHandler.InterpolationData.addStep port crates/horizon-world/src/stepped_interpolation.rs::add_step
SteppedInterpolationHandler.InterpolationData.addSteps port crates/horizon-world/src/stepped_interpolation.rs::add_steps
SteppedInterpolationHandler.InterpolationData.getInterpolationTicks inline crates/horizon-world/src/stepped_interpolation.rs::add_steps the sum of the steps' ticks
SteppedInterpolationHandler.InterpolationData.getNewPositionAndRotation port crates/horizon-world/src/stepped_interpolation.rs::new_position
SteppedInterpolationTracker.addStep missing minor: a LAN host never builds stepped paths; lan/entity.rs always sends a linear position, so guests interpolate each move over the update interval instead of replaying the host's step timing
SteppedInterpolationTracker.updateTracking missing minor: same, the host keeps no tracked steps
SteppedInterpolationTracker.getPositionPath missing minor: same, only PositionPath::Linear is sent
SulfurCubeArchetype.AttributeEntry.add skip:data archetype attribute modifiers are constants in mobs/sulfur_cube.rs ARCHETYPES
SulfurCubeArchetype.AttributeEntry.multiply skip:data same table
SulfurCubeArchetypes.bootstrap skip:data the 12 archetypes are the ARCHETYPES table in mobs/sulfur_cube.rs
SulfurCubeArchetypes.archetype skip:data builds the speed, bounce, friction and drag modifiers; values are in the table
SulfurCubeArchetypes.contactDamage skip:data hot archetype's contact damage is a field of the table
SulfurCubeArchetypes.register skip:data registry registration
TamableAnimal.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the flags byte (sitting 1, tame 4) is sent to LAN guests; the owner UUID data is never sent
TamableAnimal.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Owner and Sitting for wolf, cat and parrot
TamableAnimal.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt an owner makes the mob tame (wolf health 40), Sitting restored; old owner-name conversion is not done
TamableAnimal.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 7 hearts, event 6 smoke, seven particles
TamableAnimal.isTame skip:other a field: Mob.extra.tame
TamableAnimal.setInSittingPose skip:other a field: Mob.extra.sitting, set by the sit goals and interactions
TamableAnimal.tame inline crates/horizon-client/src/game/creatures.rs::interact_mob wolf (bone, 1 in 3), cat and parrot set tame, owner and sitting in their interaction arms, then the tame_animal trigger; mobs/tame.rs::set_tame gives the wolf 40 health
TamableAnimal.getTeam missing minor: a tame pet does not take its owner's scoreboard team (mob_team looks up only the pet's own UUID), so team glow colour, collision rules and friendly fire ignore the owner's team
TamableAnimal.die missing player: when a tamed wolf, cat or parrot dies its owner gets no chat death message; death_message only covers the player's own death
TamableAnimal.shouldTryTeleportToOwner port crates/horizon-client/src/mobs/tame.rs::owner_distance_sqr the >= 144 comparison is made in TamePanic::tick and the follow-owner goal
TamableAnimal.teleportToAroundBlockPos port crates/horizon-client/src/mobs/tame.rs::teleport_to_owner ten tries within 3 blocks; the walkable test is approximated (solid block below, not leaves, no fluid, no collision)
WalkAnimationState.speed port crates/horizon-client/src/mobs/anim.rs::state speed(partial) lerps previous and current limb speed, capped at 1; the plain speed() is the limb_speed field
ActivityData.createPriorityPairs inline crates/horizon-client/src/mobs/villager_brain.rs::packages each behaviour's priority is written out where it is added
Brain.provider skip:data builder of the sensor list and activity supplier; each species builds its brain in init or make_brain
Brain.<init> port crates/horizon-client/src/mobs/villager_brain.rs::make_brain sensors' first scans delayed by draws from the mob's random, packed memories restored, schedule applied; the warden's is Brain::new plus delay_sensors
Brain.getMemorySlot skip:java memories are typed Slot fields of Memories, no map lookup
Brain.setMemoryInternal port crates/horizon-client/src/mobs/villager_brain.rs::set_ttl Slot::set_ttl stores a value with its time to live; set_list erases an empty list
Brain.getMemoryInternal skip:java typed fields, an unregistered memory cannot be asked for
Brain.forEach inline crates/horizon-client/src/mobs/villager_brain.rs::pack the visitor over the memories is Memories::pack and the debug describe
Brain.isMemoryValue skip:java compare Slot::get() with the value
Brain.checkMemory port crates/horizon-client/src/mobs/villager_brain.rs::present VALUE_PRESENT is Slot::present, VALUE_ABSENT is its negation, REGISTERED is always true for a field
Brain.getRunningBehaviors inline crates/horizon-client/src/mobs/villager_brain.rs::tick behaviours are kept in start order and tick loops over those whose B::running is true
Brain.getActiveNonCoreActivity skip:other Brain.activity is the one non-core activity
Brain.eraseMemoriesForOtherActivitesThan port crates/horizon-client/src/mobs/warden_brain.rs::set_active leaving an activity erases the memory it needed (warden); villager activities erase none in vanilla
Brain.setActiveActivityToFirstValid port crates/horizon-client/src/mobs/warden_brain.rs::update_activity the same loop is in animal_brain.rs and monster_brain.rs update_activity
Brain.addActivity inline crates/horizon-client/src/mobs/villager_brain.rs::packages behaviours are listed per brain in vanilla's start order (priority, hash slot, insertion) instead of a priority map
Brain.tickEachRunningBehavior inline crates/horizon-client/src/mobs/villager_brain.rs::tick the second loop of tick
Brain.activityRequirementsAreMet port crates/horizon-client/src/mobs/villager_brain.rs::requirements_met hard-coded memory conditions per activity
Brain.isEmptyCollection port crates/horizon-client/src/mobs/villager_brain.rs::set_list only list memories can be empty
Brain.isBrainDead skip:other mobs without a brain are told apart by species (monster_brain::has_brain) or an empty brain Option
Attribute.Sentiment.getStyle port crates/horizon-client/src/item_tooltip.rs::attribute_color burning time and fall damage are negative, gravity, scale and waypoint ranges neutral, the rest positive
AttributeInstance.getModifiers port crates/horizon-world/src/attributes/mod.rs::modifiers player and LAN attribute maps; a mob's own attributes (mobs/finalize.rs) keep a plain list
AttributeInstance.addOrUpdateTransientModifier port crates/horizon-world/src/attributes/mod.rs::add_or_update_transient
AttributeInstance.addOrReplacePermanentModifier port crates/horizon-world/src/attributes/mod.rs::add_or_replace_permanent mobs: mobs/finalize.rs add_modifier
AttributeInstance.addPermanentModifier port crates/horizon-world/src/attributes/mod.rs::add_permanent
AttributeInstance.addPermanentModifiers port crates/horizon-world/src/attributes/mod.rs::add_permanent_many
AttributeInstance.removeModifier port crates/horizon-world/src/attributes/mod.rs::remove a mob's own attributes (mobs/finalize.rs) have no remove
AttributeInstance.removeModifiers port crates/horizon-world/src/attributes/mod.rs::remove_all
AttributeInstance.replaceFrom port crates/horizon-world/src/attributes/mod.rs::replace_from
AttributeInstance.pack port crates/horizon-world/src/attributes/mod.rs::pack
AttributeInstance.apply port crates/horizon-world/src/attributes/mod.rs::apply
AttributeMap.onAttributeModified port crates/horizon-world/src/attribute_map.rs::modified Dirty::dirty in attributes/live.rs calls it
AttributeMap.getBaseValue port crates/horizon-world/src/attribute_map.rs::value ValueKind::Base
AttributeMap.addTransientAttributeModifiers port crates/horizon-world/src/attributes/live.rs::add_effect_modifiers effect modifiers: remove the old one by id, then add transient
AttributeMap.removeAttributeModifiers port crates/horizon-world/src/attributes/live.rs::remove_effect_modifiers
AttributeMap.assignAllValues missing minor: the player is rebuilt from default attributes when respawning out of the End (PlayerMotion::new), so values and modifiers carried by keepAll are lost
AttributeMap.assignBaseValues missing minor: base values changed by /attribute (max_health, speed) reset on respawn because the player's attributes are rebuilt
AttributeMap.assignPermanentModifiers missing minor: permanent modifiers added by /attribute are lost on respawn out of the End
AttributeMap.resetBaseValue port crates/horizon-world/src/attribute_map.rs::reset_base live.rs reset_base for the player
AttributeMap.apply inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: of a mob's saved attributes only max_health, movement_speed, attack_damage, jump_strength bases and the follow range bonus are read; other bases and permanent modifiers are dropped, and a player's saved attributes are kept raw in player_extra but not applied on load
AttributeSupplier.getAttributeInstance port crates/horizon-world/src/attributes/entity.rs::instance EntityAttributes::instance
AttributeSupplier.createInstance port crates/horizon-world/src/attributes/entity.rs::create Catalog::create builds the entity's attributes from the type's default bases
AttributeSupplier.Builder.create skip:data defaults come from the attribute catalog export (Catalog::from_json)
AttributeSupplier.Builder.add skip:data same catalog export
DefaultAttributes.validate skip:debug logs entity types without attributes in an IDE
RangedAttribute.sanitizeValue port crates/horizon-world/src/attributes/mod.rs::sanitize Definition::sanitize clamps and gives the minimum for NaN
AcquirePoi.create port crates/horizon-client/src/mobs/villager_brain.rs::acquire the behaviour runs in B::try_start; POI tickets are counted from other villagers' memories
AcquirePoi.findPathToPois inline crates/horizon-client/src/mobs/villager_brain.rs::try_start create_path_to_any over the found POIs with the largest valid range
AcquirePoi.JitteredLinearRetry.markAttempt port crates/horizon-client/src/mobs/villager_brain.rs::mark
AcquirePoi.JitteredLinearRetry.isStillValid inline crates/horizon-client/src/mobs/villager_brain.rs::try_start retries.retain(now - previous < 400)
AnimalMakeLove.checkExtraStartConditions inline crates/horizon-client/src/mobs/animal_brain.rs::try_start in love and a partner from breed_partner
AnimalMakeLove.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::tick_or_stop gap: minor: partner_panicking is stubbed to false, so a partner that starts panicking does not end the pairing
AnimalMakeLove.stop port crates/horizon-client/src/mobs/animal_brain.rs::do_stop
AnimalMakeLove.hasBreedTargetOfRightType inline crates/horizon-client/src/mobs/animal_brain.rs::can_mate_with same-species test on the remembered partner
AnimalPanic.checkExtraStartConditions inline crates/horizon-client/src/mobs/animal_brain.rs::try_start hurt by a panic cause, or already panicking
AnimalPanic.start port crates/horizon-client/src/mobs/animal_brain.rs::try_start panic memory set, walk target cleared, navigation stopped
AnimalPanic.lookForWater missing minor: a burning brain animal (sniffer, ghastling) does not run for nearby water; goal-driven animals do (goals.rs Panic)
BabyFollowAdult.create port crates/horizon-client/src/mobs/animal_brain.rs::trigger B::FollowAdult for the ghastling; goat, camel, armadillo, axolotl and hoglin babies use the FollowParent goal
BackUpIfTooClose.create missing player: a crossbow piglin stays put when you come within 5 blocks; vanilla backs away strafing while it keeps aiming
BecomePassiveIfMemoryPresent.create port crates/horizon-client/src/mobs/piglin.rs::hoglin_repellent a hoglin near a repellent is pacified for 200 ticks and drops its target
Behavior.hasRequiredMemories inline crates/horizon-client/src/mobs/villager_brain.rs::try_start each behaviour tests its memories at the top of its try_start arm
BehaviorUtils.entityIsVisible port crates/horizon-client/src/mobs/villager_brain.rs::visible_contains also copied in the animal, warden and monster brains
BehaviorUtils.setWalkAndLookTargetMemoriesToEachOther port crates/horizon-client/src/mobs/animal_brain.rs::lock_gaze_and_walk this mob's half; the partner's half comes with the breed-target event
BehaviorUtils.isOtherTargetMuchFurtherAwayThanCurrentAttackTarget missing minor: piglins, hoglins and zoglins switch to any attacker, even one more than 4 blocks further than their current target
BehaviorUtils.getNearestTarget skip:other picks among attack, avoid and nearest targets for PiglinAi and HoglinAi; those mobs choose with goals (NearestTarget, HurtByTarget)
BehaviorUtils.getTargetNearestMe skip:other same helper
BehaviorUtils.getLivingEntityFromUUIDMemory skip:other the ANGRY_AT memory is the mob's anger and target fields
BehaviorUtils.getRandomSwimmablePos inline crates/horizon-client/src/mobs/goals.rs::can_use Stroll with swim: default_random_pos retried up to 10 times until the spot is water
CelebrateVillagersSurvivedRaid.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::try_start raid victory and no blocks above
CelebrateVillagersSurvivedRaid.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop 600 ticks while a raid is nearby
CelebrateVillagersSurvivedRaid.stop inline crates/horizon-client/src/mobs/villager_brain.rs::do_stop back to the scheduled activity
CelebrateVillagersSurvivedRaid.tick inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop celebrate sound 1 in 100, a firework 1 in 200 with open sky
CelebrateVillagersSurvivedRaid.getFirework port crates/horizon-client/src/game/raids.rs::villager_firework burst rocket in a random dye colour, flight 0 to 2
ChargeAttack.canStillUse port crates/horizon-client/src/mobs/nautilus.rs::still_ok tame, distance limits 12 and 11, line of sight and the cooldown
ChargeAttack.dealDamageToTarget inline crates/horizon-client/src/mobs/nautilus.rs::tick attack damage sent as an AttackPlayer or AttackMob event on contact
ChargeAttack.dealKnockBack inline crates/horizon-client/src/mobs/nautilus.rs::tick push along the nautilus's facing scaled by speed with speed and slowness effects
CopyMemoryWithExpiry.create inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: zombified avoidance is the AvoidEntity goal; baby piglins do not run from wither skeletons or the wither and never ride baby hoglins
CountDownCooldownTicks.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::tick_or_stop the CountDown arms run while the cooldown is above 0; the goat's ram cooldown is ram_cooldown in goat.rs
CrossbowAttack.checkExtraStartConditions port crates/horizon-client/src/mobs/illager.rs::can_use gap: minor: the piglin uses RangedCrossbowAttackGoal's check (holding a crossbow, live target), with no line of sight or attack range test
CrossbowAttack.canStillUse port crates/horizon-client/src/mobs/illager.rs::can_continue
CrossbowAttack.crossbowAttack port crates/horizon-client/src/mobs/illager.rs::tick gap: minor: the goal's state machine; piglins also walk to within 8 blocks and move at half speed while charged, the brain behaviour stands and shoots
DismountOrSkipMounting.create missing minor: piglins never ride; baby piglins do not climb on baby hoglins
DismountOrSkipMounting.isVehicleValid missing minor: same, no piglin riding
DoNothing.tryStart port crates/horizon-client/src/mobs/warden_brain.rs::try_start B::DoNothing starts a random timer
DoNothing.tickOrStop port crates/horizon-client/src/mobs/warden_brain.rs::tick_or_stop stops when the timer ends
EntityTracker.currentPosition port crates/horizon-client/src/mobs/villager_brain.rs::position Tracker::position, eyes or feet
EntityTracker.currentBlockPosition port crates/horizon-client/src/mobs/villager_brain.rs::block Tracker::block
EntityTracker.isVisibleBy port crates/horizon-client/src/mobs/villager_brain.rs::tracker_visible
EraseMemoryIf.create skip:other generic builder; its uses (breeding hoglins and axolotls drop their target, piglins near zombified drop theirs) are only approximated by goal priorities
FollowTemptation.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::tick_or_stop tempting player present, no breed target, not panicking
FollowTemptation.stop port crates/horizon-client/src/mobs/animal_brain.rs::do_stop cooldown 100, walk and look targets cleared
GateBehavior.getRequiredMemories skip:java memory registration, memories are fields
GateBehavior.hasRequiredMemories inline crates/horizon-client/src/mobs/villager_brain.rs::try_start Gate::try_start checks its absent memory and each child's
GateBehavior.debugString skip:debug
GiveGiftToHero.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::try_start hero visible, countdown to the next gift
GiveGiftToHero.start inline crates/horizon-client/src/mobs/villager_brain.rs::try_start interaction target set, look at the hero
GiveGiftToHero.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop hero visible and no gift given yet
GiveGiftToHero.stop inline crates/horizon-client/src/mobs/villager_brain.rs::do_stop next gift in 600 to 6600 ticks, memories cleared
GiveGiftToHero.throwGift port crates/horizon-client/src/game/raids.rs::throw_gift loot table by profession (villager::gift_table), tossed toward the player
GiveGiftToHero.isWithinThrowingDistance inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop block distance under 5
GoAndGiveItemsToTarget.start inline crates/horizon-client/src/mobs/allay.rs::tick the Deliver goal flies to the deposit
GoAndGiveItemsToTarget.tick port crates/horizon-client/src/game/allays.rs::allay_deliver within 3 blocks of the deposit it throws one item a tick
GoAndGiveItemsToTarget.canThrowItemToTarget inline crates/horizon-client/src/mobs/allay.rs::can_use holding something and a deposit (note block or tame owner) exists
GoToClosestVillage.create port crates/horizon-client/src/mobs/villager_brain.rs::try_start B::GoToClosestVillage arm: five tries at a land position closer to a village
GoToPotentialJobSite.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::try_start idle, work or play activity
GoToPotentialJobSite.tick inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop walk to the potential job site
GoToPotentialJobSite.stop inline crates/horizon-client/src/mobs/villager_brain.rs::do_stop potential job site forgotten
GoToTargetLocation.create port crates/horizon-client/src/mobs/warden_brain.rs::try_start B::GoToDisturbance with getNearbyPos; the piglin's celebrate (mobs/piglin.rs Celebrate::walk) walks straight to the spot without the random offset
GoToWantedItem.create port crates/horizon-client/src/mobs/piglin.rs::can_use the game picks the gold (game/piglins.rs) and the goal walks to it at speed 1.0
1 PortalProcessor.processPortalTeleportation port crates/horizon-client/src/nether_portal.rs::process decayTick when not inside, else counts up to the transition time; the time comes from the players_nether_portal_* rules for the player
2 PositionMoveRotation.of skip:java record factory for teleport packets; Horizon builds the packet fields directly (lan/hub.rs teleport_relative)
3 PostSpawnProcessor.andThen skip:java closure chaining
4 Relative.rotation skip:java EnumSet builder; Horizon uses the bit constants in horizon-protocol packets/play.rs relative
5 Relative.position skip:java EnumSet builder; bit constants
6 Relative.direction skip:java EnumSet builder; bit constants
7 Relative.isSet skip:java bit test; callers test the flag bits with &
8 Relative.unpack skip:java the packet keeps the packed int and tests bits directly
9 Relative.pack skip:java the packet keeps the packed int
10 SlotAccess.forEquipmentSlot inline crates/horizon-client/src/game/commands/items.rs::slot_set gap: minor: no validator, so /item replace puts any item in a chest, legs or feet slot; vanilla refuses an item that does not belong there
11 SlotProvider.getSlotsFromRange inline crates/horizon-client/src/game/commands/items.rs::slots_named slot names and ranges resolve to slots there; missing slots are skipped
12 SpawnPlacements.register skip:data placements and heightmaps are read from tables (MobData)
13 SpawnPlacements.getPlacementType port crates/horizon-client/src/mobs/data.rs::placement on ground when unregistered
14 SteppedInterpolationHandler.create port crates/horizon-world/src/stepped_interpolation.rs::new client branch only: remote.rs builds one per living entity with its type's update interval; the server tracker is not created (see SteppedInterpolationTracker)
15 SteppedInterpolationHandler.InterpolationData.advance port crates/horizon-world/src/stepped_interpolation.rs::advance
16 SteppedInterpolationHandler.InterpolationData.addDelta skip:other remote mobs are only moved by interpolation here, so there is no predicted movement to fold in (see SteppedInterpolation::interpolate)
17 SteppedInterpolationHandler.InterpolationData.addRotation skip:other same: no client-side movement of remote mobs to adjust the target for
18 SteppedInterpolationHandler.InterpolationData.addStep port crates/horizon-world/src/stepped_interpolation.rs::add_step
19 SteppedInterpolationHandler.InterpolationData.addSteps port crates/horizon-world/src/stepped_interpolation.rs::add_steps
20 SteppedInterpolationHandler.InterpolationData.getInterpolationTicks inline crates/horizon-world/src/stepped_interpolation.rs::add_steps the sum of the steps' ticks
21 SteppedInterpolationHandler.InterpolationData.getNewPositionAndRotation port crates/horizon-world/src/stepped_interpolation.rs::new_position
22 SteppedInterpolationTracker.addStep missing minor: a LAN host never builds stepped paths; lan/entity.rs always sends a linear position, so guests interpolate each move over the update interval instead of replaying the host's step timing
23 SteppedInterpolationTracker.updateTracking missing minor: same, the host keeps no tracked steps
24 SteppedInterpolationTracker.getPositionPath missing minor: same, only PositionPath::Linear is sent
25 SulfurCubeArchetype.AttributeEntry.add skip:data archetype attribute modifiers are constants in mobs/sulfur_cube.rs ARCHETYPES
26 SulfurCubeArchetype.AttributeEntry.multiply skip:data same table
27 SulfurCubeArchetypes.bootstrap skip:data the 12 archetypes are the ARCHETYPES table in mobs/sulfur_cube.rs
28 SulfurCubeArchetypes.archetype skip:data builds the speed, bounce, friction and drag modifiers; values are in the table
29 SulfurCubeArchetypes.contactDamage skip:data hot archetype's contact damage is a field of the table
30 SulfurCubeArchetypes.register skip:data registry registration
31 TamableAnimal.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the flags byte (sitting 1, tame 4) is sent to LAN guests; the owner UUID data is never sent
32 TamableAnimal.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Owner and Sitting for wolf, cat and parrot
33 TamableAnimal.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt an owner makes the mob tame (wolf health 40), Sitting restored; old owner-name conversion is not done
34 TamableAnimal.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 7 hearts, event 6 smoke, seven particles
35 TamableAnimal.isTame skip:other a field: Mob.extra.tame
36 TamableAnimal.setInSittingPose skip:other a field: Mob.extra.sitting, set by the sit goals and interactions
37 TamableAnimal.tame inline crates/horizon-client/src/game/creatures.rs::interact_mob wolf (bone, 1 in 3), cat and parrot set tame, owner and sitting in their interaction arms, then the tame_animal trigger; mobs/tame.rs::set_tame gives the wolf 40 health
38 TamableAnimal.getTeam missing minor: a tame pet does not take its owner's scoreboard team (mob_team looks up only the pet's own UUID), so team glow colour, collision rules and friendly fire ignore the owner's team
39 TamableAnimal.die missing player: when a tamed wolf, cat or parrot dies its owner gets no chat death message; death_message only covers the player's own death
40 TamableAnimal.shouldTryTeleportToOwner port crates/horizon-client/src/mobs/tame.rs::owner_distance_sqr the >= 144 comparison is made in TamePanic::tick and the follow-owner goal
41 TamableAnimal.teleportToAroundBlockPos port crates/horizon-client/src/mobs/tame.rs::teleport_to_owner ten tries within 3 blocks; the walkable test is approximated (solid block below, not leaves, no fluid, no collision)
42 WalkAnimationState.speed port crates/horizon-client/src/mobs/anim.rs::state speed(partial) lerps previous and current limb speed, capped at 1; the plain speed() is the limb_speed field
43 ActivityData.createPriorityPairs inline crates/horizon-client/src/mobs/villager_brain.rs::packages each behaviour's priority is written out where it is added
44 Brain.provider skip:data builder of the sensor list and activity supplier; each species builds its brain in init or make_brain
45 Brain.<init> port crates/horizon-client/src/mobs/villager_brain.rs::make_brain sensors' first scans delayed by draws from the mob's random, packed memories restored, schedule applied; the warden's is Brain::new plus delay_sensors
46 Brain.getMemorySlot skip:java memories are typed Slot fields of Memories, no map lookup
47 Brain.setMemoryInternal port crates/horizon-client/src/mobs/villager_brain.rs::set_ttl Slot::set_ttl stores a value with its time to live; set_list erases an empty list
48 Brain.getMemoryInternal skip:java typed fields, an unregistered memory cannot be asked for
49 Brain.forEach inline crates/horizon-client/src/mobs/villager_brain.rs::pack the visitor over the memories is Memories::pack and the debug describe
50 Brain.isMemoryValue skip:java compare Slot::get() with the value
51 Brain.checkMemory port crates/horizon-client/src/mobs/villager_brain.rs::present VALUE_PRESENT is Slot::present, VALUE_ABSENT is its negation, REGISTERED is always true for a field
52 Brain.getRunningBehaviors inline crates/horizon-client/src/mobs/villager_brain.rs::tick behaviours are kept in start order and tick loops over those whose B::running is true
53 Brain.getActiveNonCoreActivity skip:other Brain.activity is the one non-core activity
54 Brain.eraseMemoriesForOtherActivitesThan port crates/horizon-client/src/mobs/warden_brain.rs::set_active leaving an activity erases the memory it needed (warden); villager activities erase none in vanilla
55 Brain.setActiveActivityToFirstValid port crates/horizon-client/src/mobs/warden_brain.rs::update_activity the same loop is in animal_brain.rs and monster_brain.rs update_activity
56 Brain.addActivity inline crates/horizon-client/src/mobs/villager_brain.rs::packages behaviours are listed per brain in vanilla's start order (priority, hash slot, insertion) instead of a priority map
57 Brain.tickEachRunningBehavior inline crates/horizon-client/src/mobs/villager_brain.rs::tick the second loop of tick
58 Brain.activityRequirementsAreMet port crates/horizon-client/src/mobs/villager_brain.rs::requirements_met hard-coded memory conditions per activity
59 Brain.isEmptyCollection port crates/horizon-client/src/mobs/villager_brain.rs::set_list only list memories can be empty
60 Brain.isBrainDead skip:other mobs without a brain are told apart by species (monster_brain::has_brain) or an empty brain Option
61 Attribute.Sentiment.getStyle port crates/horizon-client/src/item_tooltip.rs::attribute_color burning time and fall damage are negative, gravity, scale and waypoint ranges neutral, the rest positive
62 AttributeInstance.getModifiers port crates/horizon-world/src/attributes/mod.rs::modifiers player and LAN attribute maps; a mob's own attributes (mobs/finalize.rs) keep a plain list
63 AttributeInstance.addOrUpdateTransientModifier port crates/horizon-world/src/attributes/mod.rs::add_or_update_transient
64 AttributeInstance.addOrReplacePermanentModifier port crates/horizon-world/src/attributes/mod.rs::add_or_replace_permanent mobs: mobs/finalize.rs add_modifier
65 AttributeInstance.addPermanentModifier port crates/horizon-world/src/attributes/mod.rs::add_permanent
66 AttributeInstance.addPermanentModifiers port crates/horizon-world/src/attributes/mod.rs::add_permanent_many
67 AttributeInstance.removeModifier port crates/horizon-world/src/attributes/mod.rs::remove a mob's own attributes (mobs/finalize.rs) have no remove
68 AttributeInstance.removeModifiers port crates/horizon-world/src/attributes/mod.rs::remove_all
69 AttributeInstance.replaceFrom port crates/horizon-world/src/attributes/mod.rs::replace_from
70 AttributeInstance.pack port crates/horizon-world/src/attributes/mod.rs::pack
71 AttributeInstance.apply port crates/horizon-world/src/attributes/mod.rs::apply
72 AttributeMap.onAttributeModified port crates/horizon-world/src/attribute_map.rs::modified Dirty::dirty in attributes/live.rs calls it
73 AttributeMap.getBaseValue port crates/horizon-world/src/attribute_map.rs::value ValueKind::Base
74 AttributeMap.addTransientAttributeModifiers port crates/horizon-world/src/attributes/live.rs::add_effect_modifiers effect modifiers: remove the old one by id, then add transient
75 AttributeMap.removeAttributeModifiers port crates/horizon-world/src/attributes/live.rs::remove_effect_modifiers
76 AttributeMap.assignAllValues missing minor: the player is rebuilt from default attributes when respawning out of the End (PlayerMotion::new), so values and modifiers carried by keepAll are lost
77 AttributeMap.assignBaseValues missing minor: base values changed by /attribute (max_health, speed) reset on respawn because the player's attributes are rebuilt
78 AttributeMap.assignPermanentModifiers missing minor: permanent modifiers added by /attribute are lost on respawn out of the End
79 AttributeMap.resetBaseValue port crates/horizon-world/src/attribute_map.rs::reset_base live.rs reset_base for the player
80 AttributeMap.apply inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: of a mob's saved attributes only max_health, movement_speed, attack_damage, jump_strength bases and the follow range bonus are read; other bases and permanent modifiers are dropped, and a player's saved attributes are kept raw in player_extra but not applied on load
81 AttributeSupplier.getAttributeInstance port crates/horizon-world/src/attributes/entity.rs::instance EntityAttributes::instance
82 AttributeSupplier.createInstance port crates/horizon-world/src/attributes/entity.rs::create Catalog::create builds the entity's attributes from the type's default bases
83 AttributeSupplier.Builder.create skip:data defaults come from the attribute catalog export (Catalog::from_json)
84 AttributeSupplier.Builder.add skip:data same catalog export
85 DefaultAttributes.validate skip:debug logs entity types without attributes in an IDE
86 RangedAttribute.sanitizeValue port crates/horizon-world/src/attributes/mod.rs::sanitize Definition::sanitize clamps and gives the minimum for NaN
87 AcquirePoi.create port crates/horizon-client/src/mobs/villager_brain.rs::acquire the behaviour runs in B::try_start; POI tickets are counted from other villagers' memories
88 AcquirePoi.findPathToPois inline crates/horizon-client/src/mobs/villager_brain.rs::try_start create_path_to_any over the found POIs with the largest valid range
89 AcquirePoi.JitteredLinearRetry.markAttempt port crates/horizon-client/src/mobs/villager_brain.rs::mark
90 AcquirePoi.JitteredLinearRetry.isStillValid inline crates/horizon-client/src/mobs/villager_brain.rs::try_start retries.retain(now - previous < 400)
91 AnimalMakeLove.checkExtraStartConditions inline crates/horizon-client/src/mobs/animal_brain.rs::try_start in love and a partner from breed_partner
92 AnimalMakeLove.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::tick_or_stop gap: minor: partner_panicking is stubbed to false, so a partner that starts panicking does not end the pairing
93 AnimalMakeLove.stop port crates/horizon-client/src/mobs/animal_brain.rs::do_stop
94 AnimalMakeLove.hasBreedTargetOfRightType inline crates/horizon-client/src/mobs/animal_brain.rs::can_mate_with same-species test on the remembered partner
95 AnimalPanic.checkExtraStartConditions inline crates/horizon-client/src/mobs/animal_brain.rs::try_start hurt by a panic cause, or already panicking
96 AnimalPanic.start port crates/horizon-client/src/mobs/animal_brain.rs::try_start panic memory set, walk target cleared, navigation stopped
97 AnimalPanic.lookForWater missing minor: a burning brain animal (sniffer, ghastling) does not run for nearby water; goal-driven animals do (goals.rs Panic)
98 BabyFollowAdult.create port crates/horizon-client/src/mobs/animal_brain.rs::trigger B::FollowAdult for the ghastling; goat, camel, armadillo, axolotl and hoglin babies use the FollowParent goal
99 BackUpIfTooClose.create missing player: a crossbow piglin stays put when you come within 5 blocks; vanilla backs away strafing while it keeps aiming
100 BecomePassiveIfMemoryPresent.create port crates/horizon-client/src/mobs/piglin.rs::hoglin_repellent a hoglin near a repellent is pacified for 200 ticks and drops its target
101 Behavior.hasRequiredMemories inline crates/horizon-client/src/mobs/villager_brain.rs::try_start each behaviour tests its memories at the top of its try_start arm
102 BehaviorUtils.entityIsVisible port crates/horizon-client/src/mobs/villager_brain.rs::visible_contains also copied in the animal, warden and monster brains
103 BehaviorUtils.setWalkAndLookTargetMemoriesToEachOther port crates/horizon-client/src/mobs/animal_brain.rs::lock_gaze_and_walk this mob's half; the partner's half comes with the breed-target event
104 BehaviorUtils.isOtherTargetMuchFurtherAwayThanCurrentAttackTarget missing minor: piglins, hoglins and zoglins switch to any attacker, even one more than 4 blocks further than their current target
105 BehaviorUtils.getNearestTarget skip:other picks among attack, avoid and nearest targets for PiglinAi and HoglinAi; those mobs choose with goals (NearestTarget, HurtByTarget)
106 BehaviorUtils.getTargetNearestMe skip:other same helper
107 BehaviorUtils.getLivingEntityFromUUIDMemory skip:other the ANGRY_AT memory is the mob's anger and target fields
108 BehaviorUtils.getRandomSwimmablePos inline crates/horizon-client/src/mobs/goals.rs::can_use Stroll with swim: default_random_pos retried up to 10 times until the spot is water
109 CelebrateVillagersSurvivedRaid.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::try_start raid victory and no blocks above
110 CelebrateVillagersSurvivedRaid.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop 600 ticks while a raid is nearby
111 CelebrateVillagersSurvivedRaid.stop inline crates/horizon-client/src/mobs/villager_brain.rs::do_stop back to the scheduled activity
112 CelebrateVillagersSurvivedRaid.tick inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop celebrate sound 1 in 100, a firework 1 in 200 with open sky
113 CelebrateVillagersSurvivedRaid.getFirework port crates/horizon-client/src/game/raids.rs::villager_firework burst rocket in a random dye colour, flight 0 to 2
114 ChargeAttack.canStillUse port crates/horizon-client/src/mobs/nautilus.rs::still_ok tame, distance limits 12 and 11, line of sight and the cooldown
115 ChargeAttack.dealDamageToTarget inline crates/horizon-client/src/mobs/nautilus.rs::tick attack damage sent as an AttackPlayer or AttackMob event on contact
116 ChargeAttack.dealKnockBack inline crates/horizon-client/src/mobs/nautilus.rs::tick push along the nautilus's facing scaled by speed with speed and slowness effects
117 CopyMemoryWithExpiry.create inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: zombified avoidance is the AvoidEntity goal; baby piglins do not run from wither skeletons or the wither and never ride baby hoglins
118 CountDownCooldownTicks.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::tick_or_stop the CountDown arms run while the cooldown is above 0; the goat's ram cooldown is ram_cooldown in goat.rs
119 CrossbowAttack.checkExtraStartConditions port crates/horizon-client/src/mobs/illager.rs::can_use gap: minor: the piglin uses RangedCrossbowAttackGoal's check (holding a crossbow, live target), with no line of sight or attack range test
120 CrossbowAttack.canStillUse port crates/horizon-client/src/mobs/illager.rs::can_continue
121 CrossbowAttack.crossbowAttack port crates/horizon-client/src/mobs/illager.rs::tick gap: minor: the goal's state machine; piglins also walk to within 8 blocks and move at half speed while charged, the brain behaviour stands and shoots
122 DismountOrSkipMounting.create missing minor: piglins never ride; baby piglins do not climb on baby hoglins
123 DismountOrSkipMounting.isVehicleValid missing minor: same, no piglin riding
124 DoNothing.tryStart port crates/horizon-client/src/mobs/warden_brain.rs::try_start B::DoNothing starts a random timer
125 DoNothing.tickOrStop port crates/horizon-client/src/mobs/warden_brain.rs::tick_or_stop stops when the timer ends
126 EntityTracker.currentPosition port crates/horizon-client/src/mobs/villager_brain.rs::position Tracker::position, eyes or feet
127 EntityTracker.currentBlockPosition port crates/horizon-client/src/mobs/villager_brain.rs::block Tracker::block
128 EntityTracker.isVisibleBy port crates/horizon-client/src/mobs/villager_brain.rs::tracker_visible
129 EraseMemoryIf.create skip:other generic builder; its uses (breeding hoglins and axolotls drop their target, piglins near zombified drop theirs) are only approximated by goal priorities
130 FollowTemptation.canStillUse inline crates/horizon-client/src/mobs/animal_brain.rs::tick_or_stop tempting player present, no breed target, not panicking
131 FollowTemptation.stop port crates/horizon-client/src/mobs/animal_brain.rs::do_stop cooldown 100, walk and look targets cleared
132 GateBehavior.getRequiredMemories skip:java memory registration, memories are fields
133 GateBehavior.hasRequiredMemories inline crates/horizon-client/src/mobs/villager_brain.rs::try_start Gate::try_start checks its absent memory and each child's
134 GateBehavior.debugString skip:debug
135 GiveGiftToHero.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::try_start hero visible, countdown to the next gift
136 GiveGiftToHero.start inline crates/horizon-client/src/mobs/villager_brain.rs::try_start interaction target set, look at the hero
137 GiveGiftToHero.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop hero visible and no gift given yet
138 GiveGiftToHero.stop inline crates/horizon-client/src/mobs/villager_brain.rs::do_stop next gift in 600 to 6600 ticks, memories cleared
139 GiveGiftToHero.throwGift port crates/horizon-client/src/game/raids.rs::throw_gift loot table by profession (villager::gift_table), tossed toward the player
140 GiveGiftToHero.isWithinThrowingDistance inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop block distance under 5
141 GoAndGiveItemsToTarget.start inline crates/horizon-client/src/mobs/allay.rs::tick the Deliver goal flies to the deposit
142 GoAndGiveItemsToTarget.tick port crates/horizon-client/src/game/allays.rs::allay_deliver within 3 blocks of the deposit it throws one item a tick
143 GoAndGiveItemsToTarget.canThrowItemToTarget inline crates/horizon-client/src/mobs/allay.rs::can_use holding something and a deposit (note block or tame owner) exists
144 GoToClosestVillage.create port crates/horizon-client/src/mobs/villager_brain.rs::try_start B::GoToClosestVillage arm: five tries at a land position closer to a village
145 GoToPotentialJobSite.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::try_start idle, work or play activity
146 GoToPotentialJobSite.tick inline crates/horizon-client/src/mobs/villager_brain.rs::tick_or_stop walk to the potential job site
147 GoToPotentialJobSite.stop inline crates/horizon-client/src/mobs/villager_brain.rs::do_stop potential job site forgotten
148 GoToTargetLocation.create port crates/horizon-client/src/mobs/warden_brain.rs::try_start B::GoToDisturbance with getNearbyPos; the piglin's celebrate (mobs/piglin.rs Celebrate::walk) walks straight to the spot without the random offset
149 GoToWantedItem.create port crates/horizon-client/src/mobs/piglin.rs::can_use the game picks the gold (game/piglins.rs) and the goal walks to it at speed 1.0
+147
View File
@@ -0,0 +1,147 @@
HarvestFarmland.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start HarvestFarmland arm: mob_griefing, farmer, then the 3x3x3 scan for ripe crops and bare farmland (farmland_around) and one pick by the level random (pick_farmland)
HarvestFarmland.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start sets look and walk target (speed 0.5, close 1) once now is past next_ok
HarvestFarmland.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop clears look and walk target, worked = 0, next_ok = now + 40
InsideBrownianWalk.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start InsideBrownianWalk arm: shuffled 3x3x3 cells, first one without sky view that is solid; a solid-block test stands in for loadedAndEntityCanStandOn
InteractWith.of inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start InteractWith arm for villager, breeding villager and cat targets (range 8, speed 0.5, stop distance 2); piglins and piglin brutes use goals instead
InteractWithDoor.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start gap: player: only the villager brain opens doors on its path (interact_with_doors); copper golems and piglins never do, so a golem's route through a wooden door ends against the closed door and a piglin cannot path through one
InteractWithDoor.areOtherMobsComingThroughDoor inline crates/horizon-client/src/mobs/villager_brain.rs::close_doors villagers within 2 blocks of the door whose path has the door as previous or next node
InteractWithDoor.isMobComingThroughDoor inline crates/horizon-client/src/mobs/villager_brain.rs::close_doors read from the other villager's Seen.path_nodes
InteractWithDoor.isDoorTooFarAway inline crates/horizon-client/src/mobs/villager_brain.rs::close_doors 3 block test; no dimension compare needed
InteractWithDoor.rememberDoorToClose port crates/horizon-client/src/mobs/villager_brain.rs::remember_door
JumpOnBed.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start baby with a nearest bed remembered
JumpOnBed.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start target bed, 100 ticks to reach it, 3 to 6 jumps from the level random
JumpOnBed.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop resets bed, time left, jumps and cooldown
JumpOnBed.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop baby, bed still a bed, not tired of walking or jumping
JumpOnBed.tick inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop counts time to reach the bed, then jumps every 5 ticks while on the bed
JumpOnBed.startWalkingTowardsBed inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start walk target on the bed, speed 0.5, close 0
JumpOnBed.nearBed inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start the nearest-bed memory must be present
JumpOnBed.onOrOverBed inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop the on_or_over test on the block and the one below
JumpOnBed.tiredOfWalking inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop folded into the still-using test
JumpOnBed.tiredOfJumping inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop folded into the still-using test
LocateHidingPlace.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start LocateHidingPlace arm: a home POI within close+1 and near, else a shuffled one within the radius, else the home memory; sets the hiding place and walks there when far
LongJumpMidJump.stop missing player: frogs and goats never long jump (no long-jump activity; only the frog's jump animation exists), so there is no leap, landing thud or jump cooldown
LongJumpToPreferredBlock.start missing player: frogs never aim their jumps at lily pads or big dripleaf, since they never long jump
LongJumpToPreferredBlock.getJumpCandidate missing minor: the lily pad and big dripleaf preference of the frog's missing long jump
LongJumpToRandomPos.defaultAcceptableLandingSpot missing minor: landing test of the missing long jump (the breeze has its own jump in monster_brain.rs)
LongJumpToRandomPos.checkExtraStartConditions missing player: frogs and goats never start a long jump (goats leaping between ledges, frogs hopping across water and lily pads)
LongJumpToRandomPos.canStillUse missing minor: part of the missing frog and goat long jump
LongJumpToRandomPos.start missing player: no long jump for frogs and goats, so no 40 tick crouch and leap
LongJumpToRandomPos.tick missing player: no leap velocity or jump sound for frogs and goats
LongJumpToRandomPos.pickCandidate missing minor: landing spot search of the missing long jump
LongJumpToRandomPos.getJumpCandidate missing minor: weighted pick of the missing long jump
LongJumpToRandomPos.isAcceptableLandingPosition missing minor: landing test of the missing long jump
LongJumpToRandomPos.calculateOptimalJumpVector missing minor: jump angle search of the missing frog and goat long jump (the breeze has its own in breeze.rs)
LookAndFollowTradingPlayerSink.followPlayer port crates/horizon-client/src/mobs/villager_brain.rs::follow_trading_player
LookAtTargetSink.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop the look target must still be visible; the sniffer, warden and breeze brains have the same arm
LookAtTargetSink.tick inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop look_at the target position
MeleeAttack.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start creaking arm (target in reach and visible, attack cooldown); the warden and axolotl brains have their own; gap: minor: piglins, piglin brutes, hoglins and zoglins attack through the MeleeAttack goal in goals.rs, whose chase and cooldown rhythm differ from the brain behaviour
Mount.create missing player: a baby piglin never walks to and climbs onto a baby hoglin (PiglinAi's ride target); no brain or goal sends a mob to mount another, jockeys only come from spawning
MoveToSkySeeingSpot.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start MoveToSkySeeingSpot arm: only when the villager cannot see the sky and has no walk target
MoveToSkySeeingSpot.getOutdoorPosition inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start ten random spots within 10, 3 and 10 blocks, the first with no blocks above (no_blocks_above)
MoveToTargetSink.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start MoveToTargetSink arm: retry cooldown, reached, compute_path; the sniffer, ghastling, golem, breeze, creaking and warden brains carry the same arm
MoveToTargetSink.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop gap: minor: no spectator check (see isWalkTargetSpectator)
MoveToTargetSink.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start the arm sets the PATH memory and starts the navigation as it starts
MoveToTargetSink.isWalkTargetSpectator missing minor: a walk target on a player in spectator mode is not dropped
PlayTagWithOtherKids.chaseKid inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start PlayTag arm sets interaction, look and walk target (speed 0.6, close 1)
PlayTagWithOtherKids.findSomeoneBeingChased missing minor: a kid always chases the first friend it sees instead of joining a chase of a kid that has 1 to 5 chasers (Seen.interaction_target is recorded but unused)
PlayTagWithOtherKids.checkHowManyChasersEachFriendHas missing minor: no chaser counts; see findSomeoneBeingChased
PlayTagWithOtherKids.isFriendChasingMe missing player: a kid that is being chased never runs off to a spot in the village, so the tag game is only chasing
PoiCompetitorScan.selectWinner inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start PoiCompetitorScan arm: higher xp keeps the site, a tie goes to the later villager; gap: minor: only this villager's own site is erased, a losing neighbour loses its site in its own scan
PoiCompetitorScan.competesForSameJobsite inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start same job site and profession; the profession is compared with this villager's, not with the site's POI type
PrepareRamNearestTarget.start port crates/horizon-client/src/mobs/goat.rs::Ram::start picks the nearest allowed target and chooses a ramming spot
PrepareRamNearestTarget.canStillUse port crates/horizon-client/src/mobs/goat.rs::Ram::can_continue prepare phase: a candidate whose target lives, within the 160 tick time out
PrepareRamNearestTarget.getEdgeOfBlock inline crates/horizon-client/src/mobs/goat.rs::prepare_tick half block offset by the sign toward the target
RandomStroll.fly inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger Stroll arm with fly set (ghastling); only without a walk target
RandomStroll.strollFlyOrSwim inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger Stroll arm: only without a walk target, walk target set or erased; the monster and warden brains have their own stroll arms
RandomStroll.getTargetSwimPos inline crates/horizon-client/src/mobs/animal_brain.rs::axolotl_action SwimStroll arm: the (1,1) to (10,7) tiers with the fallback
RandomStroll.getTargetFlyPos inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger air_and_water_random_pos along the view vector, -2 vertical offset
SetClosestHomeAsWalkTarget.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start ClosestHomeAsWalkTarget arm: nearest home within 48, five per batch, 40 tick cache
SetEntityLookTarget.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start LookAtEntity arm (species, player or mob category within 8); the sniffer and warden brains have their own; piglins use the LookAtPlayer goal
SetEntityLookTargetSometimes.create inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger LookAtPlayerSometimes arm (copper golem, axolotl); the creaking has its own in monster_brain.rs; goal mobs use LookAtPlayer goals
SetEntityLookTargetSometimes.Ticker.tickDownAndCheck inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger the tick counter inside the arm
SetLookAndInteract.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start SetLookAndInteract arm: nearest visible player within 4 blocks becomes interaction and look target
SetWalkTargetAwayFrom.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start WalkAwayFrom arm (nearest hostile and last attacker within 6 blocks, away 16 and 7, ten tries); piglins and hoglins use AvoidEntity and repellent goals
SetWalkTargetFromAttackTargetIfTargetOutOfReach.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start SetWalkTargetFromAttackTarget arm (the warden and axolotl brains have the same); piglins and hoglins chase with the MeleeAttack goal
SetWalkTargetFromBlockMemory.create port crates/horizon-client/src/mobs/villager_brain.rs::walk_to_block_memory
SetWalkTargetFromLookTarget.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start WalkToLookTarget arm; the sniffer, ghastling and breeze brains have the same
ShowTradesToPlayer.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop ShowTrades arm: still near the player, look time left and an interaction target
ShowTradesToPlayer.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start looks at the player, look time 40
ShowTradesToPlayer.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop clears the interaction target; the held item is never touched because no offer is ever shown
ShowTradesToPlayer.findItemsToDisplay missing player: a villager facing a player who holds an item matching one of its trade costs never holds up the matching offer, and the look time never extends to 900 ticks
ShowTradesToPlayer.updateDisplayItems missing minor: the offer list matched against the player's item, part of findItemsToDisplay
ShowTradesToPlayer.playerItemStackMatchesCostOfOffer missing minor: cost match of findItemsToDisplay
ShowTradesToPlayer.lookAtTarget inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop the arm sets the look target to the player on start and each tick
ShowTradesToPlayer.displayCyclingItems missing player: with several matching offers the villager would swap the item in its hand every 40 ticks; it never holds anything
ShufflingList.add inline crates/horizon-client/src/mobs/warden_brain.rs::activities the idle RunOne list is built with its weights (stroll 2, do nothing 1); the other brains list weights where their packages are built
ShufflingList.WeightedEntry.setRandom inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start the RunOne arm draws -pow(random, 1/weight) per entry and sorts; the villager, animal and monster brains do the same in their gates
SleepInBed.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start SleepInBed arm: not riding, 100 ticks since waking, bed within 2 blocks and free
SleepInBed.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop rest activity, above the bed by 0.4 and within 1.14 of it
SleepInBed.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop wakes the villager and sets next_ok = now + 40
SpearApproach.ableToAttack missing minor: part of the missing spear approach of PiglinAi
SpearApproach.checkExtraStartConditions missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla first closes in on the target to 10 blocks while holding the spear
SpearApproach.start missing minor: sets the approach status of the missing spear routine
SpearApproach.canStillUse missing minor: part of the missing spear approach
SpearApproach.farEnough missing minor: part of the missing spear approach
SpearApproach.tick missing minor: part of the missing spear approach
SpearAttack.ableToAttack missing minor: part of the missing spear charge of PiglinAi
SpearAttack.getKineticWeaponUseDuration missing minor: part of the missing spear charge
SpearAttack.checkExtraStartConditions missing minor: part of the missing spear charge
SpearAttack.start missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla raises the spear (startUsingItem) and charges at the target
SpearAttack.canStillUse missing minor: part of the missing spear charge
SpearAttack.tick missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla charges along a line, then repositions 6 to 7 blocks away and charges again; no mob uses a spear's kinetic attack here
SpearAttack.stop missing minor: part of the missing spear charge
SpearRetreat.ableToAttack missing minor: part of the missing spear retreat
SpearRetreat.checkExtraStartConditions missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla backs off 9 to 11 blocks after a charge
SpearRetreat.start missing minor: part of the missing spear retreat
SpearRetreat.canStillUse missing minor: part of the missing spear retreat
SpearRetreat.tick missing minor: part of the missing spear retreat
SpearRetreat.stop missing minor: part of the missing spear retreat
StartAttacking.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start StartAttacking arm (nearest attackable, last attacker, active creaking's player); piglins and hoglins choose targets with NearestTarget goals
StartCelebratingIfTargetDead.create port crates/horizon-client/src/mobs/piglin.rs::celebrate gap: minor: the forgive_dead_players game rule is not read (a dead player target is always dropped, which is the default)
StayCloseToTarget.create port crates/horizon-client/src/mobs/allay.rs::StayClose::can_use gap: minor: starts when the deposit is more than 4 blocks away instead of 16, so an allay hovers closer to its player than vanilla
StopAttackingIfTargetInvalid.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start StopAttacking arm (creaking, breeze); the warden has its own arm without the tired check; piglins and hoglins drop targets in their target goals
StopAttackingIfTargetInvalid.isTiredOfTryingToReachTarget inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start cant_reach_walk_target_since older than 200 ticks
StrollAroundPoi.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start StrollAroundPoi arm: stays within max_dist of the POI, strolls (8, 6) every 180 ticks
StrollToPoi.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start StrollToPoi arm: job site within 10 blocks, every 80 ticks
StrollToPoiList.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start StrollToPoiList arm: random secondary job site every 100 ticks while near the job site
Swim.checkExtraStartConditions port crates/horizon-client/src/mobs/villager_brain.rs::swim_condition water deeper than the jump threshold, or lava; the sniffer, warden, breeze and creaking brains have copies
Swim.tick inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop jumps with chance 0.8 each tick
TradeWithVillager.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start lock_gaze: look at and walk to the other villager
TradeWithVillager.figureOutWhatIAmWillingToTrade inline crates/horizon-client/src/mobs/villager.rs::meet wares the neighbour's profession requests and mine does not; worked out on every meeting tick, not once at start
TransportItemsBetweenContainers.start inline crates/horizon-client/src/mobs/transport_items.rs::Transport::try_start sets below_surface (setCanPathToTargetsBelowSurface); the not-leashed start test is in the same fn
TransportItemsBetweenContainers.canStillUse inline crates/horizon-client/src/mobs/transport_items.rs::Transport::tick_or_stop no cooldown, not panicking, not leashed
TransportItemsBetweenContainers.onTravelToTarget inline crates/horizon-client/src/mobs/transport_items.rs::Transport::tick the Travelling branch: queue within 3 blocks when another golem has the chest, interact within range, else walk
TransportItemsBetweenContainers.walkTowardsTarget port crates/horizon-client/src/mobs/transport_items.rs::Transport::walk_towards
TransportItemsBetweenContainers.startOnReachedTargetInteraction inline crates/horizon-client/src/mobs/transport_items.rs::Transport::tick reached_interaction picks the interaction state, then the state becomes Interacting
TransportItemsBetweenContainers.onTargetInteraction inline crates/horizon-client/src/mobs/transport_items.rs::Transport::on_reached look at the chest, stop in place, open the chest on tick 1, sound on tick 9, close on tick 60
TransportItemsBetweenContainers.doReachedTargetInteraction port crates/horizon-client/src/mobs/transport_items.rs::reached_interaction the dispatch on empty hand and chest contents; the 60 tick call is in on_reached
TransportItemsBetweenContainers.getTransportTarget port crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target
TransportItemsBetweenContainers.isTargetValidToPick inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target search box, container, wanted block and not visited
TransportItemsBetweenContainers.isContainerLocked missing minor: a chest's lock is not stored or checked (only set by commands)
TransportItemsBetweenContainers.getPositionToReachTargetFrom inline crates/horizon-client/src/mobs/transport_items.rs::Transport::valid_travelling_path path end or the golem's own position, raised by half its height
TransportItemsBetweenContainers.getConnectedTargets port crates/horizon-client/src/mobs/transport_items.rs::connected the other half of a double chest
TransportItemsBetweenContainers.getTargetSearchArea inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target box of 32 across and 8 up and down (1 and 1 on a mount)
TransportItemsBetweenContainers.isPositionAlreadyVisited inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target either half in the visited or unreachable memory
TransportItemsBetweenContainers.setVisitedBlockPos port crates/horizon-client/src/mobs/transport_items.rs::Transport::set_visited
TransportItemsBetweenContainers.markVisitedBlockPosAsUnreachable port crates/horizon-client/src/mobs/transport_items.rs::Transport::mark_unreachable
TransportItemsBetweenContainers.isWantedBlock port crates/horizon-client/src/mobs/transport_items.rs::wanted copper chests with an empty hand, chests and trapped chests when carrying
TransportItemsBetweenContainers.isWithinTargetDistance port crates/horizon-client/src/mobs/transport_items.rs::within
TransportItemsBetweenContainers.targetIsReachableFromPosition inline crates/horizon-client/src/mobs/transport_items.rs::Transport::valid_travelling_path reach and a clear line to a side of the chest
TransportItemsBetweenContainers.canSeeAnyTargetSide port crates/horizon-client/src/mobs/transport_items.rs::sees_a_side
TransportItemsBetweenContainers.matchesLeavingItemsRequirement port crates/horizon-client/src/mobs/transport_items.rs::leaving_ok
TransportItemsBetweenContainers.hasItemMatchingHandItem inline crates/horizon-client/src/mobs/transport_items.rs::leaving_ok same item id in any slot
TransportItemsBetweenContainers.pickUpItems port crates/horizon-client/src/mobs/transport_items.rs::Transport::pick_up
TransportItemsBetweenContainers.putDownItem port crates/horizon-client/src/mobs/transport_items.rs::Transport::put_down
TransportItemsBetweenContainers.pickupItemFromContainer inline crates/horizon-client/src/mobs/transport_items.rs::Transport::pick_up up to 16 of the first non-empty slot
TransportItemsBetweenContainers.addItemsToContainer inline crates/horizon-client/src/mobs/transport_items.rs::Transport::put_down fills an empty slot or tops up a matching stack, slot by slot
TransportItemsBetweenContainers.stopTargetingCurrentTarget port crates/horizon-client/src/mobs/transport_items.rs::Transport::stop_targeting
TransportItemsBetweenContainers.clearMemoriesAfterMatchingTargetFound port crates/horizon-client/src/mobs/transport_items.rs::Transport::clear_memories
TransportItemsBetweenContainers.enterCooldownAfterNoMatchingTargetFound port crates/horizon-client/src/mobs/transport_items.rs::Transport::enter_cooldown
TransportItemsBetweenContainers.TransportItemTarget.tryCreatePossibleTarget inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target the target is built from container() when a chest has one
TransportItemsBetweenContainers.TransportItemTarget.getBlockEntityContainer port crates/horizon-client/src/mobs/transport_items.rs::container gap: minor: a cat sitting on the chest does not block it, only a redstone conductor above does
TriggerGate.triggerGate inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start TriggerGate arm: shuffle by weight, then each trigger until one fires; the piglin's idle gate is part of its goals
TryFindLand.create inline crates/horizon-client/src/mobs/goals.rs::Stroll::can_use gap: minor: a frog in water strolls to a random land spot within 15 blocks (water-avoiding stroll, every tick) instead of the nearest standable block within 6 to 8 with a 60 tick cooldown, at speed 1.0 not 1.5
TryFindLand.canStandOn missing minor: no scan for the nearest solid land next to water; see TryFindLand.create
TryFindLandNearLiquid.create missing minor: only runs in the frog's lay-spawn activity, which needs a pregnant frog (see TryLaySpawnOnFluidNearLand)
TryFindLiquid.create port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_action FindLiquid arm: nearest water within 6, speed 0.15, re-run every 40 ticks
TryLaySpawnOnFluidNearLand.create missing player: frogs cannot be bred (no slimeball feeding, no pregnancy), so no frogspawn is ever laid by a frog and no tadpoles follow
1 HarvestFarmland.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start HarvestFarmland arm: mob_griefing, farmer, then the 3x3x3 scan for ripe crops and bare farmland (farmland_around) and one pick by the level random (pick_farmland)
2 HarvestFarmland.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start sets look and walk target (speed 0.5, close 1) once now is past next_ok
3 HarvestFarmland.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop clears look and walk target, worked = 0, next_ok = now + 40
4 InsideBrownianWalk.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start InsideBrownianWalk arm: shuffled 3x3x3 cells, first one without sky view that is solid; a solid-block test stands in for loadedAndEntityCanStandOn
5 InteractWith.of inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start InteractWith arm for villager, breeding villager and cat targets (range 8, speed 0.5, stop distance 2); piglins and piglin brutes use goals instead
6 InteractWithDoor.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start gap: player: only the villager brain opens doors on its path (interact_with_doors); copper golems and piglins never do, so a golem's route through a wooden door ends against the closed door and a piglin cannot path through one
7 InteractWithDoor.areOtherMobsComingThroughDoor inline crates/horizon-client/src/mobs/villager_brain.rs::close_doors villagers within 2 blocks of the door whose path has the door as previous or next node
8 InteractWithDoor.isMobComingThroughDoor inline crates/horizon-client/src/mobs/villager_brain.rs::close_doors read from the other villager's Seen.path_nodes
9 InteractWithDoor.isDoorTooFarAway inline crates/horizon-client/src/mobs/villager_brain.rs::close_doors 3 block test; no dimension compare needed
10 InteractWithDoor.rememberDoorToClose port crates/horizon-client/src/mobs/villager_brain.rs::remember_door
11 JumpOnBed.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start baby with a nearest bed remembered
12 JumpOnBed.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start target bed, 100 ticks to reach it, 3 to 6 jumps from the level random
13 JumpOnBed.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop resets bed, time left, jumps and cooldown
14 JumpOnBed.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop baby, bed still a bed, not tired of walking or jumping
15 JumpOnBed.tick inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop counts time to reach the bed, then jumps every 5 ticks while on the bed
16 JumpOnBed.startWalkingTowardsBed inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start walk target on the bed, speed 0.5, close 0
17 JumpOnBed.nearBed inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start the nearest-bed memory must be present
18 JumpOnBed.onOrOverBed inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop the on_or_over test on the block and the one below
19 JumpOnBed.tiredOfWalking inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop folded into the still-using test
20 JumpOnBed.tiredOfJumping inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop folded into the still-using test
21 LocateHidingPlace.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start LocateHidingPlace arm: a home POI within close+1 and near, else a shuffled one within the radius, else the home memory; sets the hiding place and walks there when far
22 LongJumpMidJump.stop missing player: frogs and goats never long jump (no long-jump activity; only the frog's jump animation exists), so there is no leap, landing thud or jump cooldown
23 LongJumpToPreferredBlock.start missing player: frogs never aim their jumps at lily pads or big dripleaf, since they never long jump
24 LongJumpToPreferredBlock.getJumpCandidate missing minor: the lily pad and big dripleaf preference of the frog's missing long jump
25 LongJumpToRandomPos.defaultAcceptableLandingSpot missing minor: landing test of the missing long jump (the breeze has its own jump in monster_brain.rs)
26 LongJumpToRandomPos.checkExtraStartConditions missing player: frogs and goats never start a long jump (goats leaping between ledges, frogs hopping across water and lily pads)
27 LongJumpToRandomPos.canStillUse missing minor: part of the missing frog and goat long jump
28 LongJumpToRandomPos.start missing player: no long jump for frogs and goats, so no 40 tick crouch and leap
29 LongJumpToRandomPos.tick missing player: no leap velocity or jump sound for frogs and goats
30 LongJumpToRandomPos.pickCandidate missing minor: landing spot search of the missing long jump
31 LongJumpToRandomPos.getJumpCandidate missing minor: weighted pick of the missing long jump
32 LongJumpToRandomPos.isAcceptableLandingPosition missing minor: landing test of the missing long jump
33 LongJumpToRandomPos.calculateOptimalJumpVector missing minor: jump angle search of the missing frog and goat long jump (the breeze has its own in breeze.rs)
34 LookAndFollowTradingPlayerSink.followPlayer port crates/horizon-client/src/mobs/villager_brain.rs::follow_trading_player
35 LookAtTargetSink.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop the look target must still be visible; the sniffer, warden and breeze brains have the same arm
36 LookAtTargetSink.tick inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop look_at the target position
37 MeleeAttack.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start creaking arm (target in reach and visible, attack cooldown); the warden and axolotl brains have their own; gap: minor: piglins, piglin brutes, hoglins and zoglins attack through the MeleeAttack goal in goals.rs, whose chase and cooldown rhythm differ from the brain behaviour
38 Mount.create missing player: a baby piglin never walks to and climbs onto a baby hoglin (PiglinAi's ride target); no brain or goal sends a mob to mount another, jockeys only come from spawning
39 MoveToSkySeeingSpot.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start MoveToSkySeeingSpot arm: only when the villager cannot see the sky and has no walk target
40 MoveToSkySeeingSpot.getOutdoorPosition inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start ten random spots within 10, 3 and 10 blocks, the first with no blocks above (no_blocks_above)
41 MoveToTargetSink.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start MoveToTargetSink arm: retry cooldown, reached, compute_path; the sniffer, ghastling, golem, breeze, creaking and warden brains carry the same arm
42 MoveToTargetSink.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop gap: minor: no spectator check (see isWalkTargetSpectator)
43 MoveToTargetSink.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start the arm sets the PATH memory and starts the navigation as it starts
44 MoveToTargetSink.isWalkTargetSpectator missing minor: a walk target on a player in spectator mode is not dropped
45 PlayTagWithOtherKids.chaseKid inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start PlayTag arm sets interaction, look and walk target (speed 0.6, close 1)
46 PlayTagWithOtherKids.findSomeoneBeingChased missing minor: a kid always chases the first friend it sees instead of joining a chase of a kid that has 1 to 5 chasers (Seen.interaction_target is recorded but unused)
47 PlayTagWithOtherKids.checkHowManyChasersEachFriendHas missing minor: no chaser counts; see findSomeoneBeingChased
48 PlayTagWithOtherKids.isFriendChasingMe missing player: a kid that is being chased never runs off to a spot in the village, so the tag game is only chasing
49 PoiCompetitorScan.selectWinner inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start PoiCompetitorScan arm: higher xp keeps the site, a tie goes to the later villager; gap: minor: only this villager's own site is erased, a losing neighbour loses its site in its own scan
50 PoiCompetitorScan.competesForSameJobsite inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start same job site and profession; the profession is compared with this villager's, not with the site's POI type
51 PrepareRamNearestTarget.start port crates/horizon-client/src/mobs/goat.rs::Ram::start picks the nearest allowed target and chooses a ramming spot
52 PrepareRamNearestTarget.canStillUse port crates/horizon-client/src/mobs/goat.rs::Ram::can_continue prepare phase: a candidate whose target lives, within the 160 tick time out
53 PrepareRamNearestTarget.getEdgeOfBlock inline crates/horizon-client/src/mobs/goat.rs::prepare_tick half block offset by the sign toward the target
54 RandomStroll.fly inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger Stroll arm with fly set (ghastling); only without a walk target
55 RandomStroll.strollFlyOrSwim inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger Stroll arm: only without a walk target, walk target set or erased; the monster and warden brains have their own stroll arms
56 RandomStroll.getTargetSwimPos inline crates/horizon-client/src/mobs/animal_brain.rs::axolotl_action SwimStroll arm: the (1,1) to (10,7) tiers with the fallback
57 RandomStroll.getTargetFlyPos inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger air_and_water_random_pos along the view vector, -2 vertical offset
58 SetClosestHomeAsWalkTarget.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start ClosestHomeAsWalkTarget arm: nearest home within 48, five per batch, 40 tick cache
59 SetEntityLookTarget.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start LookAtEntity arm (species, player or mob category within 8); the sniffer and warden brains have their own; piglins use the LookAtPlayer goal
60 SetEntityLookTargetSometimes.create inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger LookAtPlayerSometimes arm (copper golem, axolotl); the creaking has its own in monster_brain.rs; goal mobs use LookAtPlayer goals
61 SetEntityLookTargetSometimes.Ticker.tickDownAndCheck inline crates/horizon-client/src/mobs/animal_brain.rs::B::trigger the tick counter inside the arm
62 SetLookAndInteract.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start SetLookAndInteract arm: nearest visible player within 4 blocks becomes interaction and look target
63 SetWalkTargetAwayFrom.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start WalkAwayFrom arm (nearest hostile and last attacker within 6 blocks, away 16 and 7, ten tries); piglins and hoglins use AvoidEntity and repellent goals
64 SetWalkTargetFromAttackTargetIfTargetOutOfReach.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start SetWalkTargetFromAttackTarget arm (the warden and axolotl brains have the same); piglins and hoglins chase with the MeleeAttack goal
65 SetWalkTargetFromBlockMemory.create port crates/horizon-client/src/mobs/villager_brain.rs::walk_to_block_memory
66 SetWalkTargetFromLookTarget.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start WalkToLookTarget arm; the sniffer, ghastling and breeze brains have the same
67 ShowTradesToPlayer.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop ShowTrades arm: still near the player, look time left and an interaction target
68 ShowTradesToPlayer.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start looks at the player, look time 40
69 ShowTradesToPlayer.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop clears the interaction target; the held item is never touched because no offer is ever shown
70 ShowTradesToPlayer.findItemsToDisplay missing player: a villager facing a player who holds an item matching one of its trade costs never holds up the matching offer, and the look time never extends to 900 ticks
71 ShowTradesToPlayer.updateDisplayItems missing minor: the offer list matched against the player's item, part of findItemsToDisplay
72 ShowTradesToPlayer.playerItemStackMatchesCostOfOffer missing minor: cost match of findItemsToDisplay
73 ShowTradesToPlayer.lookAtTarget inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop the arm sets the look target to the player on start and each tick
74 ShowTradesToPlayer.displayCyclingItems missing player: with several matching offers the villager would swap the item in its hand every 40 ticks; it never holds anything
75 ShufflingList.add inline crates/horizon-client/src/mobs/warden_brain.rs::activities the idle RunOne list is built with its weights (stroll 2, do nothing 1); the other brains list weights where their packages are built
76 ShufflingList.WeightedEntry.setRandom inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start the RunOne arm draws -pow(random, 1/weight) per entry and sorts; the villager, animal and monster brains do the same in their gates
77 SleepInBed.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start SleepInBed arm: not riding, 100 ticks since waking, bed within 2 blocks and free
78 SleepInBed.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop rest activity, above the bed by 0.4 and within 1.14 of it
79 SleepInBed.stop inline crates/horizon-client/src/mobs/villager_brain.rs::B::do_stop wakes the villager and sets next_ok = now + 40
80 SpearApproach.ableToAttack missing minor: part of the missing spear approach of PiglinAi
81 SpearApproach.checkExtraStartConditions missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla first closes in on the target to 10 blocks while holding the spear
82 SpearApproach.start missing minor: sets the approach status of the missing spear routine
83 SpearApproach.canStillUse missing minor: part of the missing spear approach
84 SpearApproach.farEnough missing minor: part of the missing spear approach
85 SpearApproach.tick missing minor: part of the missing spear approach
86 SpearAttack.ableToAttack missing minor: part of the missing spear charge of PiglinAi
87 SpearAttack.getKineticWeaponUseDuration missing minor: part of the missing spear charge
88 SpearAttack.checkExtraStartConditions missing minor: part of the missing spear charge
89 SpearAttack.start missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla raises the spear (startUsingItem) and charges at the target
90 SpearAttack.canStillUse missing minor: part of the missing spear charge
91 SpearAttack.tick missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla charges along a line, then repositions 6 to 7 blocks away and charges again; no mob uses a spear's kinetic attack here
92 SpearAttack.stop missing minor: part of the missing spear charge
93 SpearRetreat.ableToAttack missing minor: part of the missing spear retreat
94 SpearRetreat.checkExtraStartConditions missing player: a piglin holding a golden spear (about 1 in 20 adult piglins) just walks up and melees; vanilla backs off 9 to 11 blocks after a charge
95 SpearRetreat.start missing minor: part of the missing spear retreat
96 SpearRetreat.canStillUse missing minor: part of the missing spear retreat
97 SpearRetreat.tick missing minor: part of the missing spear retreat
98 SpearRetreat.stop missing minor: part of the missing spear retreat
99 StartAttacking.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start StartAttacking arm (nearest attackable, last attacker, active creaking's player); piglins and hoglins choose targets with NearestTarget goals
100 StartCelebratingIfTargetDead.create port crates/horizon-client/src/mobs/piglin.rs::celebrate gap: minor: the forgive_dead_players game rule is not read (a dead player target is always dropped, which is the default)
101 StayCloseToTarget.create port crates/horizon-client/src/mobs/allay.rs::StayClose::can_use gap: minor: starts when the deposit is more than 4 blocks away instead of 16, so an allay hovers closer to its player than vanilla
102 StopAttackingIfTargetInvalid.create inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start StopAttacking arm (creaking, breeze); the warden has its own arm without the tired check; piglins and hoglins drop targets in their target goals
103 StopAttackingIfTargetInvalid.isTiredOfTryingToReachTarget inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start cant_reach_walk_target_since older than 200 ticks
104 StrollAroundPoi.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start StrollAroundPoi arm: stays within max_dist of the POI, strolls (8, 6) every 180 ticks
105 StrollToPoi.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start StrollToPoi arm: job site within 10 blocks, every 80 ticks
106 StrollToPoiList.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start StrollToPoiList arm: random secondary job site every 100 ticks while near the job site
107 Swim.checkExtraStartConditions port crates/horizon-client/src/mobs/villager_brain.rs::swim_condition water deeper than the jump threshold, or lava; the sniffer, warden, breeze and creaking brains have copies
108 Swim.tick inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop jumps with chance 0.8 each tick
109 TradeWithVillager.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start lock_gaze: look at and walk to the other villager
110 TradeWithVillager.figureOutWhatIAmWillingToTrade inline crates/horizon-client/src/mobs/villager.rs::meet wares the neighbour's profession requests and mine does not; worked out on every meeting tick, not once at start
111 TransportItemsBetweenContainers.start inline crates/horizon-client/src/mobs/transport_items.rs::Transport::try_start sets below_surface (setCanPathToTargetsBelowSurface); the not-leashed start test is in the same fn
112 TransportItemsBetweenContainers.canStillUse inline crates/horizon-client/src/mobs/transport_items.rs::Transport::tick_or_stop no cooldown, not panicking, not leashed
113 TransportItemsBetweenContainers.onTravelToTarget inline crates/horizon-client/src/mobs/transport_items.rs::Transport::tick the Travelling branch: queue within 3 blocks when another golem has the chest, interact within range, else walk
114 TransportItemsBetweenContainers.walkTowardsTarget port crates/horizon-client/src/mobs/transport_items.rs::Transport::walk_towards
115 TransportItemsBetweenContainers.startOnReachedTargetInteraction inline crates/horizon-client/src/mobs/transport_items.rs::Transport::tick reached_interaction picks the interaction state, then the state becomes Interacting
116 TransportItemsBetweenContainers.onTargetInteraction inline crates/horizon-client/src/mobs/transport_items.rs::Transport::on_reached look at the chest, stop in place, open the chest on tick 1, sound on tick 9, close on tick 60
117 TransportItemsBetweenContainers.doReachedTargetInteraction port crates/horizon-client/src/mobs/transport_items.rs::reached_interaction the dispatch on empty hand and chest contents; the 60 tick call is in on_reached
118 TransportItemsBetweenContainers.getTransportTarget port crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target
119 TransportItemsBetweenContainers.isTargetValidToPick inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target search box, container, wanted block and not visited
120 TransportItemsBetweenContainers.isContainerLocked missing minor: a chest's lock is not stored or checked (only set by commands)
121 TransportItemsBetweenContainers.getPositionToReachTargetFrom inline crates/horizon-client/src/mobs/transport_items.rs::Transport::valid_travelling_path path end or the golem's own position, raised by half its height
122 TransportItemsBetweenContainers.getConnectedTargets port crates/horizon-client/src/mobs/transport_items.rs::connected the other half of a double chest
123 TransportItemsBetweenContainers.getTargetSearchArea inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target box of 32 across and 8 up and down (1 and 1 on a mount)
124 TransportItemsBetweenContainers.isPositionAlreadyVisited inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target either half in the visited or unreachable memory
125 TransportItemsBetweenContainers.setVisitedBlockPos port crates/horizon-client/src/mobs/transport_items.rs::Transport::set_visited
126 TransportItemsBetweenContainers.markVisitedBlockPosAsUnreachable port crates/horizon-client/src/mobs/transport_items.rs::Transport::mark_unreachable
127 TransportItemsBetweenContainers.isWantedBlock port crates/horizon-client/src/mobs/transport_items.rs::wanted copper chests with an empty hand, chests and trapped chests when carrying
128 TransportItemsBetweenContainers.isWithinTargetDistance port crates/horizon-client/src/mobs/transport_items.rs::within
129 TransportItemsBetweenContainers.targetIsReachableFromPosition inline crates/horizon-client/src/mobs/transport_items.rs::Transport::valid_travelling_path reach and a clear line to a side of the chest
130 TransportItemsBetweenContainers.canSeeAnyTargetSide port crates/horizon-client/src/mobs/transport_items.rs::sees_a_side
131 TransportItemsBetweenContainers.matchesLeavingItemsRequirement port crates/horizon-client/src/mobs/transport_items.rs::leaving_ok
132 TransportItemsBetweenContainers.hasItemMatchingHandItem inline crates/horizon-client/src/mobs/transport_items.rs::leaving_ok same item id in any slot
133 TransportItemsBetweenContainers.pickUpItems port crates/horizon-client/src/mobs/transport_items.rs::Transport::pick_up
134 TransportItemsBetweenContainers.putDownItem port crates/horizon-client/src/mobs/transport_items.rs::Transport::put_down
135 TransportItemsBetweenContainers.pickupItemFromContainer inline crates/horizon-client/src/mobs/transport_items.rs::Transport::pick_up up to 16 of the first non-empty slot
136 TransportItemsBetweenContainers.addItemsToContainer inline crates/horizon-client/src/mobs/transport_items.rs::Transport::put_down fills an empty slot or tops up a matching stack, slot by slot
137 TransportItemsBetweenContainers.stopTargetingCurrentTarget port crates/horizon-client/src/mobs/transport_items.rs::Transport::stop_targeting
138 TransportItemsBetweenContainers.clearMemoriesAfterMatchingTargetFound port crates/horizon-client/src/mobs/transport_items.rs::Transport::clear_memories
139 TransportItemsBetweenContainers.enterCooldownAfterNoMatchingTargetFound port crates/horizon-client/src/mobs/transport_items.rs::Transport::enter_cooldown
140 TransportItemsBetweenContainers.TransportItemTarget.tryCreatePossibleTarget inline crates/horizon-client/src/mobs/transport_items.rs::Transport::find_target the target is built from container() when a chest has one
141 TransportItemsBetweenContainers.TransportItemTarget.getBlockEntityContainer port crates/horizon-client/src/mobs/transport_items.rs::container gap: minor: a cat sitting on the chest does not block it, only a redstone conductor above does
142 TriggerGate.triggerGate inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start TriggerGate arm: shuffle by weight, then each trigger until one fires; the piglin's idle gate is part of its goals
143 TryFindLand.create inline crates/horizon-client/src/mobs/goals.rs::Stroll::can_use gap: minor: a frog in water strolls to a random land spot within 15 blocks (water-avoiding stroll, every tick) instead of the nearest standable block within 6 to 8 with a 60 tick cooldown, at speed 1.0 not 1.5
144 TryFindLand.canStandOn missing minor: no scan for the nearest solid land next to water; see TryFindLand.create
145 TryFindLandNearLiquid.create missing minor: only runs in the frog's lay-spawn activity, which needs a pregnant frog (see TryLaySpawnOnFluidNearLand)
146 TryFindLiquid.create port crates/horizon-client/src/mobs/animal_brain.rs::axolotl_action FindLiquid arm: nearest water within 6, speed 0.15, re-run every 40 ticks
147 TryLaySpawnOnFluidNearLand.create missing player: frogs cannot be bred (no slimeball feeding, no pregnancy), so no frogspawn is ever laid by a frog and no tadpoles follow
+125
View File
@@ -0,0 +1,125 @@
UseBonemeal.checkExtraStartConditions missing minor: the B::UseBonemeal arm only checks for bone meal in the inventory and then always returns false, so a farmer carrying bone meal never grows a crop with it
UseBonemeal.canStillUse missing minor: no bone meal session is ever started
UseBonemeal.pickNextTarget missing minor: no random pick of a growing crop in the 3x3x3 around the villager
UseBonemeal.validPos missing minor: no crop-not-fully-grown test
UseBonemeal.start missing minor: villager never holds bone meal or walks to a crop
UseBonemeal.setCurrentCropAsTarget missing minor: no look and walk target on a crop
UseBonemeal.tick missing minor: never uses a bone meal item on a crop (no growCrop, no bonemeal effect)
ValidateNearbyPoi.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start ValidatePoi arm: within 16 blocks the memory is erased when the POI is gone or the bed is occupied by someone else
ValidateNearbyPoi.bedIsOccupiedByVillager inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start no ticket to release: POI tickets are counted from the villagers' memories (tickets), so erasing the memory frees the bed
VillageBoundRandomStroll.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start VillageBoundStroll arm: land pos inside a village, else a pos towards the section closest to a village
VillagerGoalPackages.getCorePackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages gap: minor: GoToWantedItem (priority 5) never starts (arm returns false), so villagers do not walk to dropped items within 4 blocks; they only pick up what lands at their feet
VillagerGoalPackages.validateBedPoi inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start AcquirePoi home arm keeps only beds that are not occupied, after the 5-candidate cap like vanilla
VillagerGoalPackages.getWorkPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages gap: minor: the UseBonemeal entry never starts (see UseBonemeal)
VillagerGoalPackages.getPlayPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages baby villagers: look, tag, run-one of interact, stroll, jump on bed, do nothing
VillagerGoalPackages.getRestPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages walk home, validate home, sleep, homeless run-one, minimal look
VillagerGoalPackages.getMeetPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages bell gate, trades, gift, validate meeting point, trade gate, full look
VillagerGoalPackages.getIdlePackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages run-one of interactions and strolls, gift, trades, trade gate, make love gate, full look
VillagerGoalPackages.getPanicPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages calm down, walk away from hostile and from the attacker at 0.75, stroll 2x2
VillagerGoalPackages.getPreRaidPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages ring bell, meeting point or stroll at 0.75, reset raid status
VillagerGoalPackages.getRaidPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages sky spot or stroll once the raid is won, celebrate, hide while the raid is active
VillagerGoalPackages.getHidePackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages set hidden state, locate hiding place at 0.625, minimal look
VillagerGoalPackages.getFullLookBehavior port crates/horizon-client/src/mobs/villager_brain.rs::look_full
VillagerGoalPackages.getMinimalLookBehavior port crates/horizon-client/src/mobs/villager_brain.rs::look_minimal
VillagerGoalPackages.raidExistsAndActive inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start RaidSequence arm (victory false): the villager's raid status is RAID or PRE_RAID instead of looking up the raid at its position
VillagerGoalPackages.raidExistsAndNotVictory inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start RaidSequence arm (victory true): the villager's raid status is victory (the vanilla name is misleading, it tests isVictory)
VillagerMakeLove.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop MakeLove arm stops once now passes the birth time or breeding is no longer possible
VillagerMakeLove.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start MakeLove arm: lock gaze, birth time 275 + random 50 ticks; entity event 18 has no villager effect
VillagerMakeLove.canReach inline crates/horizon-client/src/mobs/villager_brain.rs::take_bed_for_child bed counts only if create_path_to gets there
VillagerMakeLove.breed port crates/horizon-client/src/game/villagers.rs::Game::villager_birth baby villager at the parent, ages 6000 and -24000, hearts for the child
VillagerMakeLove.giveBedToChild inline crates/horizon-client/src/game/villagers.rs::Game::villager_birth child.extra.bed is the taken bed
WorkAtPoi.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start WorkAtPoi arm: 300 tick gap, 1 in 2 roll, within 1.73 of the job site
WorkAtPoi.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop WorkAtPoi arm: job site still within 1.73
YieldJobSite.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start gap: minor: the villager gives up its potential site but the nearby villager is not handed the walk and look target or the potential site; it finds the site through its own job search
YieldJobSite.nearbyWantsJobsite inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start tests the nearby villager's profession against the site type and its job site memory
YieldJobSite.canReachPos inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start gap: minor: no path test to the site for the nearby villager
BehaviorBuilder.create skip:java declarative behaviour builder; Horizon codes each behaviour as an arm of B
BehaviorBuilder.sequence inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start RaidSequence arm is the only sequence the villager packages use
BehaviorBuilder.triggerIf skip:java condition combinator; each use is ported in place (raid conditions in RaidSequence)
BehaviorBuilder.Instance.point skip:java applicative plumbing of the behaviour DSL
BehaviorBuilder.Instance.lift1 skip:java applicative plumbing of the behaviour DSL
BehaviorBuilder.Instance.map skip:java applicative plumbing of the behaviour DSL
BehaviorBuilder.Instance.ap2 skip:java applicative plumbing of the behaviour DSL
BehaviorBuilder.Instance.ap3 skip:java applicative plumbing of the behaviour DSL
BehaviorBuilder.Instance.ap4 skip:java applicative plumbing of the behaviour DSL
MemoryCondition.Absent.createAccessor skip:java memory accessor of the behaviour DSL; memories are Slot fields
MemoryCondition.Present.createAccessor skip:java memory accessor of the behaviour DSL; memories are Slot fields
Digging.start inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start Digging arm: dig pose and sound on ground, else agitated sound and the warden is removed
Roar.start inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start Roar arm: sound delay 25, walk target cleared, look at target, roaring pose, anger +20
Roar.stop inline crates/horizon-client/src/mobs/warden_brain.rs::B::do_stop Roar arm: standing pose, roar target becomes the attack target
SetRoarTarget.create inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start SetRoarTarget arm: entity_angry_at and can_target, clears cant-reach memory
Sniffing.stop inline crates/horizon-client/src/mobs/warden_brain.rs::B::do_stop Sniffing arm: standing pose, anger +35 for a target within 6x20, disturbance location
SonicBoom.checkExtraStartConditions inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start SonicBoom arm: target within 15 horizontally and 20 vertically
BodyRotationControl.rotateBodyIfNecessary inline crates/horizon-client/src/mobs/control.rs::Mob::body_rotation_tick rotate_if_necessary on body_yaw in the standing-still branches
BodyRotationControl.rotateHeadIfNecessary inline crates/horizon-client/src/mobs/control.rs::Mob::body_rotation_tick rotate_if_necessary on head_yaw in the moving branch
BodyRotationControl.isMoving inline crates/horizon-client/src/mobs/control.rs::Mob::body_rotation_tick moved distance squared against ARRIVED
LookControl.clampHeadRotationToBody inline crates/horizon-client/src/mobs/control.rs::Mob::look_control_tick head yaw clamped to the body while the navigation is not done
LookControl.getXRotD port crates/horizon-client/src/mobs/control.rs::Mob::look_angles
LookControl.getYRotD port crates/horizon-client/src/mobs/control.rs::Mob::look_angles
MoveControl.isWalkable port crates/horizon-client/src/mobs/control.rs::Mob::walkable gap: minor: tests the static path type of the cell, not the mob's own node evaluator
SmoothSwimmingLookControl.tick port crates/horizon-client/src/mobs/control.rs::Mob::look_control_tick SmoothSwimming arm of the look kinds
SmoothSwimmingMoveControl.getTurningSpeedFactor inline crates/horizon-client/src/mobs/control.rs::Mob::move_control_tick SmoothSwimming arm: 1 - clamp((left - 10) / 50)
BegGoal.canContinueToUse port crates/horizon-client/src/mobs/tame.rs::Beg::can_continue
BegGoal.playerHoldingInteresting port crates/horizon-client/src/mobs/tame.rs::Beg::interesting gap: minor: untamed wolves beg only for bones and tamed wolves only for food; in 26.3 a bone or food interests any wolf
BreathAirGoal.givesAir inline crates/horizon-client/src/mobs/goals.rs::BreathAir::find_air no fluid or a bubble column, and land-pathfindable
BreedGoal.getFreePartner inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: minor: the partner's isPanicking is not tested (Seen has no panic flag)
CatLieOnBlockGoal.isValidTarget port crates/horizon-client/src/mobs/tame.rs::can_lie_on
CatSitOnBlockGoal.isValidTarget port crates/horizon-client/src/mobs/tame.rs::can_sit_on
ClimbOnTopOfPowderSnowGoal.canUse missing player: rabbits, foxes, silverfish and endermites that end up in powder snow never jump to climb out (goal missing from their registration)
DolphinJumpGoal.waterIsClear inline crates/horizon-client/src/mobs/dolphin.rs::Jump::can_use water at each step and not a blocks_dolphin_jump block
DolphinJumpGoal.surfaceIsClear inline crates/horizon-client/src/mobs/dolphin.rs::Jump::can_use two air blocks above each step
DolphinJumpGoal.canContinueToUse port crates/horizon-client/src/mobs/dolphin.rs::Jump::can_continue
DoorInteractGoal.start inline crates/horizon-client/src/mobs/doors.rs::RaiderOpenDoor::start passed and the door direction only feed canContinueToUse, which both subclasses override, so they are not kept
DoorInteractGoal.tick inline crates/horizon-client/src/mobs/doors.rs::BreakDoor::tick the passed-the-door dot test is not kept: BreakDoor and RaiderOpenDoor both override can_continue
FollowFlockLeaderGoal missing player: cod, salmon and tropical fish spawn in groups but do not follow a leader, so schools do not swim together (leader id is stored, no goal uses it)
FollowMobGoal missing player: parrots do not fly after and hover near other mobs (priority 3 goal missing from register_parrot)
FollowPlayerRiddenEntityGoal missing player: dolphins do not swim after a boat or nautilus a player is riding
GoalSelector.removeAllGoals port crates/horizon-client/src/mobs/goals.rs::GoalSelector::clear gap: minor: clear() takes no predicate and does not stop running goals
GoalSelector.removeGoal missing minor: no per-goal removal; callers (cat and ocelot trust, zombie break door, skeleton weapon swap, skeleton horse trap) fold the condition into can_use
GoalSelector.goalContainsAnyFlags inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick flags & disabled
GoalSelector.goalCanBeReplacedForAllFlags inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick the replaceable check over the locked slots
GoalSelector.tickRunningGoals port crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick_running
GolemRandomStrollInVillageGoal missing player: iron golems stroll with a plain water-avoiding stroll, so they do not stay in the village or go towards villagers who want a golem
MeleeAttackGoal.checkAndPerformAttack inline crates/horizon-client/src/mobs/goals.rs::MeleeAttack::tick reset cooldown, swing, do_hurt_target
MeleeAttackGoal.canPerformAttack inline crates/horizon-client/src/mobs/goals.rs::MeleeAttack::tick cooldown over, within melee range, line of sight
MoveBackToVillageGoal missing player: iron golems outside a village never walk back towards it (goal missing from register_iron)
MoveThroughVillageGoal missing player: zombies never walk purposefully through a village towards its POIs and doors at night; they only wander (priority 6 goal missing; the raider variant is separate)
MoveToBlockGoal.moveMobToBlock inline crates/horizon-client/src/mobs/goals.rs::MoveToBlock::start nav_move_to the block centre one up
MoveTowardsTargetGoal.start inline crates/horizon-client/src/mobs/golem.rs::MoveTowardsTarget::can_use gap: minor: paths straight to the target entity in can_use, not to a random position towards it chosen in canUse
OpenDoorGoal.canContinueToUse port crates/horizon-client/src/mobs/doors.rs::RaiderOpenDoor::can_continue the raider goal does not close the door after, so it never continues
PanicGoal.findRandomPosition inline crates/horizon-client/src/mobs/goals.rs::Panic::can_use default_random_pos(5, 4)
PanicGoal.lookForWater inline crates/horizon-client/src/mobs/goals.rs::Panic::can_use burning (or turtle) mob not inside a solid cell looks for water by Manhattan distance
PathfindToRaidGoal.canContinueToUse port crates/horizon-client/src/mobs/raider.rs::PathfindToRaid::can_continue
RandomStandGoal.playStandSound port crates/horizon-client/src/mobs/equine.rs::RandomStand::start gap: player: plays the angry neigh and only for horses; vanilla plays the ambient sound (baby variants too), so skeleton and zombie horses rear silently, and donkeys and mules never get the goal (can_rear) although only llamas are barred from rearing
RangedCrossbowAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/illager.rs::CrossbowAttack::can_continue gap: minor: holding test looks at the main hand only
RangedCrossbowAttackGoal.isValidTarget inline crates/horizon-client/src/mobs/illager.rs::CrossbowAttack::can_use alive target; also rejects creative players
RemoveBlockGoal.getPosWithBlock inline crates/horizon-client/src/mobs/undead.rs::AttackTurtleEgg::tick own cell, below, west, east, north, south, two below
RunAroundLikeCrazyGoal.start inline crates/horizon-client/src/mobs/equine.rs::RunAroundLikeCrazy::can_use navigation to the random spot starts in can_use
SpearUseGoal missing player: zombies and zombified piglins holding a spear do not run the charge, jab and retreat routine; they only melee
SpearUseGoal.SpearUseState missing player: see SpearUseGoal
StrollThroughVillageGoal.tick missing minor: foxes do not wander through villages at night (goal missing; no village-bound step)
StrollThroughVillageGoal.moveRandomly missing minor: foxes do not wander through villages at night
TemptGoal.shouldFollow inline crates/horizon-client/src/mobs/goals.rs::Tempt::can_use main hand or off hand holds a tempt item
TemptGoal.ForNonPathfinders.navigateTowards port crates/horizon-client/src/mobs/happy_ghast.rs::GhastTempt::tick random fraction of the way to the player's eye as the wanted position; the sulfur cube has its own SulfurTempt
WaterAvoidingRandomFlyingGoal.getPosition inline crates/horizon-client/src/mobs/goals.rs::Stroll::can_use gap: minor: a flying stroll (the wither) draws a plain default_random_pos(10, 7), not HoverRandomPos along its view direction and AirAndWaterRandomPos
WaterAvoidingRandomStrollGoal.getPosition inline crates/horizon-client/src/mobs/goals.rs::Stroll::can_use water_avoiding arm: land pos, or default pos with the probability
WrappedGoal.canBeReplacedBy inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick interruptable and lower priority number
WrappedGoal.start inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick running flag then goal.start
WrappedGoal.equals skip:java identity of wrapped goals in a set
HurtByTargetGoal.alertOthers inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: player: the owner and team checks are missing, so when a wolf is hurt every wolf nearby is called, including other owners' and the player's own tamed wolves
NonTameRandomTargetGoal.canUse inline crates/horizon-client/src/mobs/tame.rs::register wolf and cat target goals use NearestTarget with when(!tame)
NonTameRandomTargetGoal.canContinueToUse inline crates/horizon-client/src/mobs/goals.rs::NearestTarget::can_continue gap: minor: the prey filter is not re-tested while hunting, only the base TargetGoal rules
ResetUniversalAngerTargetGoal.wasHurtByPlayer missing minor: the universal_anger rule is never read by mobs (default off)
ResetUniversalAngerTargetGoal.getNearbyMobsOfSameType missing minor: the universal_anger rule is never read by mobs (default off)
TargetGoal.canAttack inline crates/horizon-client/src/mobs/goals.rs::NearestTarget::can_use gap: minor: no isWithinHome test and no must-reach path test
TargetGoal.canReach missing minor: must_reach is stored by reach() but never read, so polar bears, llamas and endermen pick targets they cannot path to
GossipContainer.getGossipEntries port crates/horizon-client/src/gossip.rs::Gossips::entries
GossipContainer.add port crates/horizon-client/src/gossip.rs::Gossips::add
GossipContainer.remove port crates/horizon-client/src/gossip.rs::Gossips::remove gap: minor: only the per-target, per-type removal; the by-amount and all-targets overloads have no caller
GossipContainer.putAll skip:java map copy; Gossips is Clone
GossipContainer.mergeValuesForAddition inline crates/horizon-client/src/gossip.rs::Gossips::add sum above the max keeps the larger of max and old
GossipContainer.EntityGossips.weightedValue port crates/horizon-client/src/gossip.rs::Gossips::reputation all types summed; no type filter, as every caller passes all types
GossipContainer.EntityGossips.makeSureValueIsntTooLowOrTooHigh inline crates/horizon-client/src/gossip.rs::Gossips::add clamps to the max and forgets values below 2
ExpirableValue.of inline crates/horizon-client/src/mobs/villager_brain.rs::Slot::set_ttl Slot holds the value and its time to live (set or set_ttl)
ExpirableValue.toString skip:debug
ExpirableValue.codec skip:java memory serialisation; Horizon packs memories in its own save format
1 UseBonemeal.checkExtraStartConditions missing minor: the B::UseBonemeal arm only checks for bone meal in the inventory and then always returns false, so a farmer carrying bone meal never grows a crop with it
2 UseBonemeal.canStillUse missing minor: no bone meal session is ever started
3 UseBonemeal.pickNextTarget missing minor: no random pick of a growing crop in the 3x3x3 around the villager
4 UseBonemeal.validPos missing minor: no crop-not-fully-grown test
5 UseBonemeal.start missing minor: villager never holds bone meal or walks to a crop
6 UseBonemeal.setCurrentCropAsTarget missing minor: no look and walk target on a crop
7 UseBonemeal.tick missing minor: never uses a bone meal item on a crop (no growCrop, no bonemeal effect)
8 ValidateNearbyPoi.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start ValidatePoi arm: within 16 blocks the memory is erased when the POI is gone or the bed is occupied by someone else
9 ValidateNearbyPoi.bedIsOccupiedByVillager inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start no ticket to release: POI tickets are counted from the villagers' memories (tickets), so erasing the memory frees the bed
10 VillageBoundRandomStroll.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start VillageBoundStroll arm: land pos inside a village, else a pos towards the section closest to a village
11 VillagerGoalPackages.getCorePackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages gap: minor: GoToWantedItem (priority 5) never starts (arm returns false), so villagers do not walk to dropped items within 4 blocks; they only pick up what lands at their feet
12 VillagerGoalPackages.validateBedPoi inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start AcquirePoi home arm keeps only beds that are not occupied, after the 5-candidate cap like vanilla
13 VillagerGoalPackages.getWorkPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages gap: minor: the UseBonemeal entry never starts (see UseBonemeal)
14 VillagerGoalPackages.getPlayPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages baby villagers: look, tag, run-one of interact, stroll, jump on bed, do nothing
15 VillagerGoalPackages.getRestPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages walk home, validate home, sleep, homeless run-one, minimal look
16 VillagerGoalPackages.getMeetPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages bell gate, trades, gift, validate meeting point, trade gate, full look
17 VillagerGoalPackages.getIdlePackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages run-one of interactions and strolls, gift, trades, trade gate, make love gate, full look
18 VillagerGoalPackages.getPanicPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages calm down, walk away from hostile and from the attacker at 0.75, stroll 2x2
19 VillagerGoalPackages.getPreRaidPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages ring bell, meeting point or stroll at 0.75, reset raid status
20 VillagerGoalPackages.getRaidPackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages sky spot or stroll once the raid is won, celebrate, hide while the raid is active
21 VillagerGoalPackages.getHidePackage inline crates/horizon-client/src/mobs/villager_brain.rs::packages set hidden state, locate hiding place at 0.625, minimal look
22 VillagerGoalPackages.getFullLookBehavior port crates/horizon-client/src/mobs/villager_brain.rs::look_full
23 VillagerGoalPackages.getMinimalLookBehavior port crates/horizon-client/src/mobs/villager_brain.rs::look_minimal
24 VillagerGoalPackages.raidExistsAndActive inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start RaidSequence arm (victory false): the villager's raid status is RAID or PRE_RAID instead of looking up the raid at its position
25 VillagerGoalPackages.raidExistsAndNotVictory inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start RaidSequence arm (victory true): the villager's raid status is victory (the vanilla name is misleading, it tests isVictory)
26 VillagerMakeLove.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop MakeLove arm stops once now passes the birth time or breeding is no longer possible
27 VillagerMakeLove.start inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start MakeLove arm: lock gaze, birth time 275 + random 50 ticks; entity event 18 has no villager effect
28 VillagerMakeLove.canReach inline crates/horizon-client/src/mobs/villager_brain.rs::take_bed_for_child bed counts only if create_path_to gets there
29 VillagerMakeLove.breed port crates/horizon-client/src/game/villagers.rs::Game::villager_birth baby villager at the parent, ages 6000 and -24000, hearts for the child
30 VillagerMakeLove.giveBedToChild inline crates/horizon-client/src/game/villagers.rs::Game::villager_birth child.extra.bed is the taken bed
31 WorkAtPoi.checkExtraStartConditions inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start WorkAtPoi arm: 300 tick gap, 1 in 2 roll, within 1.73 of the job site
32 WorkAtPoi.canStillUse inline crates/horizon-client/src/mobs/villager_brain.rs::B::tick_or_stop WorkAtPoi arm: job site still within 1.73
33 YieldJobSite.create inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start gap: minor: the villager gives up its potential site but the nearby villager is not handed the walk and look target or the potential site; it finds the site through its own job search
34 YieldJobSite.nearbyWantsJobsite inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start tests the nearby villager's profession against the site type and its job site memory
35 YieldJobSite.canReachPos inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start gap: minor: no path test to the site for the nearby villager
36 BehaviorBuilder.create skip:java declarative behaviour builder; Horizon codes each behaviour as an arm of B
37 BehaviorBuilder.sequence inline crates/horizon-client/src/mobs/villager_brain.rs::B::try_start RaidSequence arm is the only sequence the villager packages use
38 BehaviorBuilder.triggerIf skip:java condition combinator; each use is ported in place (raid conditions in RaidSequence)
39 BehaviorBuilder.Instance.point skip:java applicative plumbing of the behaviour DSL
40 BehaviorBuilder.Instance.lift1 skip:java applicative plumbing of the behaviour DSL
41 BehaviorBuilder.Instance.map skip:java applicative plumbing of the behaviour DSL
42 BehaviorBuilder.Instance.ap2 skip:java applicative plumbing of the behaviour DSL
43 BehaviorBuilder.Instance.ap3 skip:java applicative plumbing of the behaviour DSL
44 BehaviorBuilder.Instance.ap4 skip:java applicative plumbing of the behaviour DSL
45 MemoryCondition.Absent.createAccessor skip:java memory accessor of the behaviour DSL; memories are Slot fields
46 MemoryCondition.Present.createAccessor skip:java memory accessor of the behaviour DSL; memories are Slot fields
47 Digging.start inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start Digging arm: dig pose and sound on ground, else agitated sound and the warden is removed
48 Roar.start inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start Roar arm: sound delay 25, walk target cleared, look at target, roaring pose, anger +20
49 Roar.stop inline crates/horizon-client/src/mobs/warden_brain.rs::B::do_stop Roar arm: standing pose, roar target becomes the attack target
50 SetRoarTarget.create inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start SetRoarTarget arm: entity_angry_at and can_target, clears cant-reach memory
51 Sniffing.stop inline crates/horizon-client/src/mobs/warden_brain.rs::B::do_stop Sniffing arm: standing pose, anger +35 for a target within 6x20, disturbance location
52 SonicBoom.checkExtraStartConditions inline crates/horizon-client/src/mobs/warden_brain.rs::B::try_start SonicBoom arm: target within 15 horizontally and 20 vertically
53 BodyRotationControl.rotateBodyIfNecessary inline crates/horizon-client/src/mobs/control.rs::Mob::body_rotation_tick rotate_if_necessary on body_yaw in the standing-still branches
54 BodyRotationControl.rotateHeadIfNecessary inline crates/horizon-client/src/mobs/control.rs::Mob::body_rotation_tick rotate_if_necessary on head_yaw in the moving branch
55 BodyRotationControl.isMoving inline crates/horizon-client/src/mobs/control.rs::Mob::body_rotation_tick moved distance squared against ARRIVED
56 LookControl.clampHeadRotationToBody inline crates/horizon-client/src/mobs/control.rs::Mob::look_control_tick head yaw clamped to the body while the navigation is not done
57 LookControl.getXRotD port crates/horizon-client/src/mobs/control.rs::Mob::look_angles
58 LookControl.getYRotD port crates/horizon-client/src/mobs/control.rs::Mob::look_angles
59 MoveControl.isWalkable port crates/horizon-client/src/mobs/control.rs::Mob::walkable gap: minor: tests the static path type of the cell, not the mob's own node evaluator
60 SmoothSwimmingLookControl.tick port crates/horizon-client/src/mobs/control.rs::Mob::look_control_tick SmoothSwimming arm of the look kinds
61 SmoothSwimmingMoveControl.getTurningSpeedFactor inline crates/horizon-client/src/mobs/control.rs::Mob::move_control_tick SmoothSwimming arm: 1 - clamp((left - 10) / 50)
62 BegGoal.canContinueToUse port crates/horizon-client/src/mobs/tame.rs::Beg::can_continue
63 BegGoal.playerHoldingInteresting port crates/horizon-client/src/mobs/tame.rs::Beg::interesting gap: minor: untamed wolves beg only for bones and tamed wolves only for food; in 26.3 a bone or food interests any wolf
64 BreathAirGoal.givesAir inline crates/horizon-client/src/mobs/goals.rs::BreathAir::find_air no fluid or a bubble column, and land-pathfindable
65 BreedGoal.getFreePartner inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: minor: the partner's isPanicking is not tested (Seen has no panic flag)
66 CatLieOnBlockGoal.isValidTarget port crates/horizon-client/src/mobs/tame.rs::can_lie_on
67 CatSitOnBlockGoal.isValidTarget port crates/horizon-client/src/mobs/tame.rs::can_sit_on
68 ClimbOnTopOfPowderSnowGoal.canUse missing player: rabbits, foxes, silverfish and endermites that end up in powder snow never jump to climb out (goal missing from their registration)
69 DolphinJumpGoal.waterIsClear inline crates/horizon-client/src/mobs/dolphin.rs::Jump::can_use water at each step and not a blocks_dolphin_jump block
70 DolphinJumpGoal.surfaceIsClear inline crates/horizon-client/src/mobs/dolphin.rs::Jump::can_use two air blocks above each step
71 DolphinJumpGoal.canContinueToUse port crates/horizon-client/src/mobs/dolphin.rs::Jump::can_continue
72 DoorInteractGoal.start inline crates/horizon-client/src/mobs/doors.rs::RaiderOpenDoor::start passed and the door direction only feed canContinueToUse, which both subclasses override, so they are not kept
73 DoorInteractGoal.tick inline crates/horizon-client/src/mobs/doors.rs::BreakDoor::tick the passed-the-door dot test is not kept: BreakDoor and RaiderOpenDoor both override can_continue
74 FollowFlockLeaderGoal missing player: cod, salmon and tropical fish spawn in groups but do not follow a leader, so schools do not swim together (leader id is stored, no goal uses it)
75 FollowMobGoal missing player: parrots do not fly after and hover near other mobs (priority 3 goal missing from register_parrot)
76 FollowPlayerRiddenEntityGoal missing player: dolphins do not swim after a boat or nautilus a player is riding
77 GoalSelector.removeAllGoals port crates/horizon-client/src/mobs/goals.rs::GoalSelector::clear gap: minor: clear() takes no predicate and does not stop running goals
78 GoalSelector.removeGoal missing minor: no per-goal removal; callers (cat and ocelot trust, zombie break door, skeleton weapon swap, skeleton horse trap) fold the condition into can_use
79 GoalSelector.goalContainsAnyFlags inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick flags & disabled
80 GoalSelector.goalCanBeReplacedForAllFlags inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick the replaceable check over the locked slots
81 GoalSelector.tickRunningGoals port crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick_running
82 GolemRandomStrollInVillageGoal missing player: iron golems stroll with a plain water-avoiding stroll, so they do not stay in the village or go towards villagers who want a golem
83 MeleeAttackGoal.checkAndPerformAttack inline crates/horizon-client/src/mobs/goals.rs::MeleeAttack::tick reset cooldown, swing, do_hurt_target
84 MeleeAttackGoal.canPerformAttack inline crates/horizon-client/src/mobs/goals.rs::MeleeAttack::tick cooldown over, within melee range, line of sight
85 MoveBackToVillageGoal missing player: iron golems outside a village never walk back towards it (goal missing from register_iron)
86 MoveThroughVillageGoal missing player: zombies never walk purposefully through a village towards its POIs and doors at night; they only wander (priority 6 goal missing; the raider variant is separate)
87 MoveToBlockGoal.moveMobToBlock inline crates/horizon-client/src/mobs/goals.rs::MoveToBlock::start nav_move_to the block centre one up
88 MoveTowardsTargetGoal.start inline crates/horizon-client/src/mobs/golem.rs::MoveTowardsTarget::can_use gap: minor: paths straight to the target entity in can_use, not to a random position towards it chosen in canUse
89 OpenDoorGoal.canContinueToUse port crates/horizon-client/src/mobs/doors.rs::RaiderOpenDoor::can_continue the raider goal does not close the door after, so it never continues
90 PanicGoal.findRandomPosition inline crates/horizon-client/src/mobs/goals.rs::Panic::can_use default_random_pos(5, 4)
91 PanicGoal.lookForWater inline crates/horizon-client/src/mobs/goals.rs::Panic::can_use burning (or turtle) mob not inside a solid cell looks for water by Manhattan distance
92 PathfindToRaidGoal.canContinueToUse port crates/horizon-client/src/mobs/raider.rs::PathfindToRaid::can_continue
93 RandomStandGoal.playStandSound port crates/horizon-client/src/mobs/equine.rs::RandomStand::start gap: player: plays the angry neigh and only for horses; vanilla plays the ambient sound (baby variants too), so skeleton and zombie horses rear silently, and donkeys and mules never get the goal (can_rear) although only llamas are barred from rearing
94 RangedCrossbowAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/illager.rs::CrossbowAttack::can_continue gap: minor: holding test looks at the main hand only
95 RangedCrossbowAttackGoal.isValidTarget inline crates/horizon-client/src/mobs/illager.rs::CrossbowAttack::can_use alive target; also rejects creative players
96 RemoveBlockGoal.getPosWithBlock inline crates/horizon-client/src/mobs/undead.rs::AttackTurtleEgg::tick own cell, below, west, east, north, south, two below
97 RunAroundLikeCrazyGoal.start inline crates/horizon-client/src/mobs/equine.rs::RunAroundLikeCrazy::can_use navigation to the random spot starts in can_use
98 SpearUseGoal missing player: zombies and zombified piglins holding a spear do not run the charge, jab and retreat routine; they only melee
99 SpearUseGoal.SpearUseState missing player: see SpearUseGoal
100 StrollThroughVillageGoal.tick missing minor: foxes do not wander through villages at night (goal missing; no village-bound step)
101 StrollThroughVillageGoal.moveRandomly missing minor: foxes do not wander through villages at night
102 TemptGoal.shouldFollow inline crates/horizon-client/src/mobs/goals.rs::Tempt::can_use main hand or off hand holds a tempt item
103 TemptGoal.ForNonPathfinders.navigateTowards port crates/horizon-client/src/mobs/happy_ghast.rs::GhastTempt::tick random fraction of the way to the player's eye as the wanted position; the sulfur cube has its own SulfurTempt
104 WaterAvoidingRandomFlyingGoal.getPosition inline crates/horizon-client/src/mobs/goals.rs::Stroll::can_use gap: minor: a flying stroll (the wither) draws a plain default_random_pos(10, 7), not HoverRandomPos along its view direction and AirAndWaterRandomPos
105 WaterAvoidingRandomStrollGoal.getPosition inline crates/horizon-client/src/mobs/goals.rs::Stroll::can_use water_avoiding arm: land pos, or default pos with the probability
106 WrappedGoal.canBeReplacedBy inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick interruptable and lower priority number
107 WrappedGoal.start inline crates/horizon-client/src/mobs/goals.rs::GoalSelector::tick running flag then goal.start
108 WrappedGoal.equals skip:java identity of wrapped goals in a set
109 HurtByTargetGoal.alertOthers inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: player: the owner and team checks are missing, so when a wolf is hurt every wolf nearby is called, including other owners' and the player's own tamed wolves
110 NonTameRandomTargetGoal.canUse inline crates/horizon-client/src/mobs/tame.rs::register wolf and cat target goals use NearestTarget with when(!tame)
111 NonTameRandomTargetGoal.canContinueToUse inline crates/horizon-client/src/mobs/goals.rs::NearestTarget::can_continue gap: minor: the prey filter is not re-tested while hunting, only the base TargetGoal rules
112 ResetUniversalAngerTargetGoal.wasHurtByPlayer missing minor: the universal_anger rule is never read by mobs (default off)
113 ResetUniversalAngerTargetGoal.getNearbyMobsOfSameType missing minor: the universal_anger rule is never read by mobs (default off)
114 TargetGoal.canAttack inline crates/horizon-client/src/mobs/goals.rs::NearestTarget::can_use gap: minor: no isWithinHome test and no must-reach path test
115 TargetGoal.canReach missing minor: must_reach is stored by reach() but never read, so polar bears, llamas and endermen pick targets they cannot path to
116 GossipContainer.getGossipEntries port crates/horizon-client/src/gossip.rs::Gossips::entries
117 GossipContainer.add port crates/horizon-client/src/gossip.rs::Gossips::add
118 GossipContainer.remove port crates/horizon-client/src/gossip.rs::Gossips::remove gap: minor: only the per-target, per-type removal; the by-amount and all-targets overloads have no caller
119 GossipContainer.putAll skip:java map copy; Gossips is Clone
120 GossipContainer.mergeValuesForAddition inline crates/horizon-client/src/gossip.rs::Gossips::add sum above the max keeps the larger of max and old
121 GossipContainer.EntityGossips.weightedValue port crates/horizon-client/src/gossip.rs::Gossips::reputation all types summed; no type filter, as every caller passes all types
122 GossipContainer.EntityGossips.makeSureValueIsntTooLowOrTooHigh inline crates/horizon-client/src/gossip.rs::Gossips::add clamps to the max and forgets values below 2
123 ExpirableValue.of inline crates/horizon-client/src/mobs/villager_brain.rs::Slot::set_ttl Slot holds the value and its time to live (set or set_ttl)
124 ExpirableValue.toString skip:debug
125 ExpirableValue.codec skip:java memory serialisation; Horizon packs memories in its own save format
+131
View File
@@ -0,0 +1,131 @@
MemoryMap.equals skip:java map equality of a built memory set
MemoryMap.iterator skip:java iteration over a built memory set, used for the brain's debug and save output
MemoryModuleType.register skip:data registry of memory types; Horizon declares each memory as a field of the brain's Memories struct
MemorySlot.set port crates/horizon-client/src/mobs/villager_brain.rs::Slot::set Slot::set and set_ttl store the value with the time to live (NEVER when none)
MemorySlot.toString skip:debug text for the brain debug dump
MemorySlot.visit skip:debug Brain.Visitor feeds the debug screen only
NearestVisibleLivingEntities.findAll inline crates/horizon-client/src/mobs/villager_brain.rs::sense_babies walks the visible list with the cached line-of-sight test; only the villager babies sensor needs the whole list here
NearestVisibleLivingEntities.find skip:java Stream view of findAll, no caller in the game code
AmphibiousPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator NavKind::Amphibious picks Evaluator::Amphibious (prefers_shallow false)
AmphibiousPathNavigation.getTempMobPos port crates/horizon-client/src/mobs/nav.rs::Mob::temp_mob_pos x, half the height up, z
AmphibiousPathNavigation.canMoveDirectly port crates/horizon-client/src/mobs/nav.rs::Mob::can_move_directly only while in liquid, clear to the target without fluid blocking
AmphibiousPathNavigation.isStableDestination inline crates/horizon-client/src/mobs/nav.rs::Mob::stable_destination Amphibious arm: the block below is not air
FlyingPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator NavKind::Flying picks Evaluator::Fly
FlyingPathNavigation.canUpdatePath port crates/horizon-client/src/mobs/nav.rs::Mob::can_update_path gap: minor: always true, vanilla is false for a flier that rides something
GroundPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator NavKind::Ground picks Evaluator::Walk
GroundPathNavigation.canUpdatePath port crates/horizon-client/src/mobs/nav.rs::Mob::can_update_path gap: minor: on ground or in liquid, the isPassenger case is missing
GroundPathNavigation.getTempMobPos port crates/horizon-client/src/mobs/nav.rs::Mob::temp_mob_pos x, surface_y, z
GroundPathNavigation.createPath port crates/horizon-client/src/mobs/nav.rs::Mob::create_path_to unloaded chunk gives no path, then the surface search (surface_position) unless below_surface
GroundPathNavigation.getSurfaceY port crates/horizon-client/src/mobs/nav.rs::Mob::surface_y floats up through water up to 16 blocks when the mob can float, else floor(y + 0.5)
GroundPathNavigation.trimPath missing player: avoid_sun is set by the skeleton's RestrictSun goal but nothing truncates the path at the first sunlit node, so skeletons chasing you by day walk out into the sun instead of stopping in the shade
PathNavigation.getGroundY inline crates/horizon-client/src/mobs/nav.rs::Mob::nav_tick target y is the floor level under the node unless the block below is air
PathNavigation.shouldTargetNextNodeInDirection port crates/horizon-client/src/mobs/nav.rs::Mob::should_target_next_node
PathNavigation.trimPath missing minor: path nodes on a cauldron are not raised one block, so a route ending on a cauldron (leatherworker job site) aims into the block
PathNavigation.isClearForMovementBetween port crates/horizon-client/src/mobs/world.rs::MobWorld::clear_between collider clip from start to the target raised by half the height, optionally stopped by fluids
PathNavigation.shouldRecomputePath missing player: nothing asks a mob to re-path when a block changes near its route (recompute_path is only reached after its own delay flag), so a mob keeps walking an old path into a wall you just placed or past one you removed
WallClimberNavigation.createPath port crates/horizon-client/src/mobs/nav.rs::Mob::create_path_to WallClimber kind remembers climb_to before the ground path
WallClimberNavigation.tick inline crates/horizon-client/src/mobs/nav.rs::Mob::nav_tick WallClimber branch: with no path it keeps steering at climb_to until within the body width
WaterBoundPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator Evaluator::Swim with breach for the dolphin; can_pass_doors stays true (minor)
WaterBoundPathNavigation.canUpdatePath port crates/horizon-client/src/mobs/nav.rs::Mob::can_update_path breach (dolphin) or in liquid
WaterBoundPathNavigation.getTempMobPos port crates/horizon-client/src/mobs/nav.rs::Mob::temp_mob_pos x, half the height up, z
AdultSensor.doTick inline crates/horizon-client/src/mobs/animal_brain.rs::tick_sensors gap: player: Sensor::AdultSameType arm (axolotl only); goats, camels, hoglins and farm animals follow parents through FollowParent goals, but baby armadillos have no follow-the-adult behaviour
AdultSensor.setNearestVisibleAdult inline crates/horizon-client/src/mobs/animal_brain.rs::tick_sensors closest visible adult of the same species into nearest_visible_adult
AdultSensorAnyType.setNearestVisibleAdult port crates/horizon-client/src/mobs/animal_brain.rs::sense_adult closest visible adult of a #followable_friendly_mobs species (happy ghast)
AxolotlAttackablesSensor.isMatchingEntity port crates/horizon-client/src/mobs/animal_brain.rs::sense_axolotl_attackables within 8 blocks, in water, always-hostile or hunt target tag, alive and not playing dead
AxolotlAttackablesSensor.isHuntTarget inline crates/horizon-client/src/mobs/animal_brain.rs::sense_axolotl_attackables hunt target tag only while there is no hunting cooldown
BreezeAttackEntitySensor.doTick port crates/horizon-client/src/mobs/monster_brain.rs::sense_breeze_attack nearest living entity that is not a creative or spectator player and is attackable
FrogAttackablesSensor.isMatchingEntity port crates/horizon-client/src/mobs/frog.rs::server_ai_step every 20 ticks: nearest size-1 slime or magma cube within 10 blocks in line of sight
FrogAttackablesSensor.isUnreachableAttackTarget inline crates/horizon-client/src/mobs/frog.rs::server_ai_step skips ids in the unreachable list (up to five, 100 ticks each)
GolemSensor.checkForNearbyGolem port crates/horizon-client/src/mobs/villager_brain.rs::sense_golem an iron golem in the nearby list sets golem_detected_recently for 599 ticks
HoglinSpecificSensor.doTick inline crates/horizon-client/src/mobs/piglin.rs::hoglin_repellent gap: player: only the repellent scan is kept; adult piglin and adult hoglin counts are not sensed, so adult hoglins do not keep 8 blocks from adult piglins and do not flee them when outnumbered
HurtBySensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_hurt last damage source forgotten after 40 ticks, attacker kept while alive
IsInWaterSensor.doTick inline crates/horizon-client/src/mobs/frog.rs::Croak::can_use no IS_IN_WATER memory; frog goals read fluids.in_water directly
MobSensor.doTick inline crates/horizon-client/src/mobs/armadillo.rs::server_ai_step armadillo scare sensor every fifth tick: cannot stay rolled up clears the danger, else scan
MobSensor.checkForMobsNearby port crates/horizon-client/src/mobs/armadillo.rs::scared_by_someone undead, last attacker or a sprinting or riding player within 7 by 2 blocks
MobSensor.mobDetected inline crates/horizon-client/src/mobs/armadillo.rs::server_ai_step danger = 80 ticks
NearestBedSensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_bed babies only, at most four new beds per scan, 40 tick cache, path must reach the bed
NearestItemSensor.doTick port crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups gap: player: villagers never walk to dropped food or seeds (only what lands within a block is picked up) and piglins and allays scan their own items without the line-of-sight test
NearestLivingEntitySensor.doTick port crates/horizon-client/src/mobs/brain.rs::living_near alive entities within the follow range box, nearest first, stored with a fresh visible list
NearestVisibleLivingEntitySensor.getNearestEntity inline crates/horizon-client/src/mobs/animal_brain.rs::sense_axolotl_attackables find_closest over the visible list with the sensor's own test
PiglinBruteSpecificSensor.doTick inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: nemesis is a NearestTarget on wither skeletons only, the wither boss is not one; alerting nearby adult piglins is HurtByTarget alert
PiglinSpecificSensor.requires skip:java declares which memories the sensor fills
PiglinSpecificSensor.doTick inline crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: only the repellent scan (every 20 ticks) is a sensor; nemesis, baby hoglin or piglin, player holding gold and adult counts are not remembered, so piglins do not attack wither skeletons or look at a player holding gold from 14 blocks
PiglinSpecificSensor.isValidRepellent port crates/horizon-client/src/mobs/piglin.rs::find_piglin_repellent #piglin_repellents, a soul campfire only while lit
PlayerSensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_players gap: minor: one player only, no other players of a shared level
SecondaryPoiSensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_secondary farmer: farmland within 4 by 2 blocks; no other profession has secondary blocks
Sensor.updateTargetingConditionRanges inline crates/horizon-client/src/mobs/monster_brain.rs::targetable each test reads the mob's follow range at call time, so no shared range needs updating
Sensor.isEntityAttackableIgnoringLineOfSight inline crates/horizon-client/src/mobs/goals.rs::Mob::can_target_player check_sight false for the player; mob targets are tested per goal
Sensor.rememberPositives inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start positives_left counter of the breeze's StopAttackingIfTargetInvalid (100 ticks after the last attackable moment)
TemptingSensor.doTick port crates/horizon-client/src/mobs/animal_brain.rs::sense_tempting gap: minor: range test ignores the visibility scaling (sneaking), a rider of any kind blocks the tempt
TemptingSensor.playerHoldingTemptation inline crates/horizon-client/src/mobs/animal_brain.rs::sense_tempting main or off hand holds food of the animal
VillagerBabiesSensor.isVillagerBaby inline crates/horizon-client/src/mobs/villager_brain.rs::sense_babies visible baby villagers
VillagerHostilesSensor.isMatchingEntity port crates/horizon-client/src/mobs/villager_brain.rs::sense_hostiles closest visible hostile within its own acceptable distance
VillagerHostilesSensor.isClose port crates/horizon-client/src/mobs/villager_brain.rs::hostile_distance the acceptable distance table (8, 10, 12, 15 blocks)
WardenEntitySensor.doTick port crates/horizon-client/src/mobs/warden_brain.rs::sense_entities living list then nearest attackable: a player first, else another entity
WardenEntitySensor.getClosest inline crates/horizon-client/src/mobs/warden_brain.rs::sense_entities two passes over the sorted list with warden::can_target
TargetingConditions.copy skip:java clone of a builder object
TargetingConditions.test port crates/horizon-client/src/mobs/goals.rs::Mob::player_in_range gap: minor: the player case (range scaled by visibility, line of sight, ally and creative checks); mob targets are tested in NearestTarget and each brain's targetable and attackable
DefaultRandomPos.generateRandomPosTowardDirection port crates/horizon-client/src/mobs/goals.rs::Mob::default_check Mob::toward builds the position, default_check does limits, home, stable and malus
GoalUtils.mobRestricted port crates/horizon-client/src/mobs/goals.rs::Mob::restricted home within radius + distance + 1, then isRestricted
GoalUtils.hasMalus inline crates/horizon-client/src/mobs/goals.rs::Mob::default_check path type malus must be 0, also in land_up_out_of_solid
LandRandomPos.getPosTowards missing player: iron golems wander anywhere; GolemRandomStrollInVillageGoal and MoveBackToVillageGoal are not registered, so a golem does not drift toward villagers who want it or back to the village
LandRandomPos.getPosInDirection inline crates/horizon-client/src/mobs/goals.rs::Mob::land_random_pos_away only the away direction is wired; the toward call has no user
LandRandomPos.movePosUpOutOfSolid port crates/horizon-client/src/mobs/goals.rs::Mob::land_up_out_of_solid up out of solid, then no water and no malus
RandomPos.generateRandomDirection port crates/horizon-client/src/mobs/goals.rs::Mob::random_direction
RandomPos.generateRandomDirectionWithinRadians port crates/horizon-client/src/mobs/goals.rs::Mob::random_direction_within
RandomPos.generateRandomPos port crates/horizon-client/src/mobs/goals.rs::Mob::pick_best best of ten by walk target value
PoiManager.remove inline crates/horizon-client/src/poi_sections.rs::PoiSections::get no stored records: a section's POI list is rebuilt from its blocks after an edit
PoiManager.findAll port crates/horizon-client/src/mobs/villager_brain.rs::pois_in_range square then sphere filter over the sections' POI blocks, nearest first, with a caller filter
PoiManager.findAllWithType port crates/horizon-client/src/mobs/villager_brain.rs::pois_in_range returns (type, pos) pairs; only HAS_SPACE occupancy (any-occupancy searches use homes_in_range)
PoiManager.findAllClosestFirstWithType port crates/horizon-client/src/mobs/villager_brain.rs::pois_in_range sorted by squared distance
PoiManager.getRandom inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use random home within 48 blocks not visited lately (the raider's village walk); the villager's hiding place picks its own home
PoiManager.release inline crates/horizon-client/src/mobs/villager_brain.rs::PoiMem::clear tickets are derived from the villagers' job, potential job, home and meeting memories, so clearing the memory frees the ticket
PoiManager.getType port crates/horizon-client/src/mobs/villager_brain.rs::poi_at POI kind of the block at a position, from the per-state table
PoiManager.getDebugPoiInfo skip:debug debug screen data
PoiManager.setDirty inline crates/horizon-client/src/mobs/villager_brain.rs::village_sections village distances are recomputed per query from the taken village POIs, no dirty tracking
PoiManager.checkConsistencyWithBlocks inline crates/horizon-client/src/poi_sections.rs::PoiSections::get the list is always built from the blocks, so it cannot drift
PoiManager.updateFromSection inline crates/horizon-client/src/poi_sections.rs::PoiSections::get scans the section's blocks for POI states
PoiManager.ensureLoadedAndValid skip:other no separate POI storage: POIs come from the loaded chunks' blocks
PoiManager.DistanceTracker.setLevel inline crates/horizon-client/src/mobs/villager_brain.rs::sections_to_village Chebyshev distance in sections to a village section (max 7), computed when asked
PoiRecord.acquireTicket inline crates/horizon-client/src/mobs/villager_brain.rs::tickets a taken ticket is a villager memory pointing at the POI, counted per search
PoiRecord.releaseTicket inline crates/horizon-client/src/mobs/villager_brain.rs::tickets see PoiManager.release
PoiRecord.isOccupied inline crates/horizon-client/src/mobs/villager_brain.rs::village_sections a POI counts as occupied (village centre) when a villager memory holds it
PoiRecord.equals skip:java position equality
PoiRecord.Packed.unpack skip:other POI files are not loaded into records; keep_claims reads free_tickets only to carry claims across a save
PoiSection.pack port crates/horizon-client/src/save.rs::encode_poi Valid and Records with free_tickets at the max (claims kept by keep_claims)
PoiSection.getRecords inline crates/horizon-client/src/poi_sections.rs::PoiSections::get per-section POI list, type filter done by poi_matches
PoiSection.add inline crates/horizon-client/src/poi_sections.rs::PoiSections::get list rebuilt from the blocks
PoiSection.remove inline crates/horizon-client/src/poi_sections.rs::PoiSections::get list rebuilt from the blocks
PoiSection.getFreeTickets skip:debug deprecated, debug only
PoiSection.release inline crates/horizon-client/src/mobs/villager_brain.rs::tickets see PoiManager.release
PoiSection.refresh inline crates/horizon-client/src/poi_sections.rs::PoiSections::get invalid sections need no refresh, the list is rebuilt from blocks
PoiSection.Packed.unpack skip:other POI files are not loaded into sections
PoiTypes.registerBlockStates inline crates/horizon-client/src/save.rs::poi_type state to POI type and max tickets in one match
PoiTypes.bootstrap port crates/horizon-client/src/save.rs::poi_type every POI type with its tickets (bed heads of the sixteen colours only, cauldrons, bell 32); villagers use villager_brain::state_poi for jobs, beds and bell
Bat.isFlapping missing minor: a flying bat's wing beat (every 10 ticks) sends no FLAP vibration, so sculk sensors do not hear it
Bat.getAmbientSound inline crates/horizon-client/src/mobs/ai.rs::play_ambient Species::Bat arm: a resting bat is silent three times in four
Bat.isResting port crates/horizon-client/src/mobs/bat.rs::resting
Bat.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt BatFlags byte, bit 0 resting
Bat.checkBatSpawnRules inline crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Bat arm: below the surface, coin flip, light against nextInt(4), bats_spawnable_on, mob rules
Dolphin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize S::Dolphin arm: full air, pitch 0, baby chance 0.1
Dolphin.defineSynchedData skip:java synched fields: got_fish is extra.flag and moistness extra.counter
Dolphin.addAdditionalSaveData missing minor: GotFish and Moistness are not written, a saved dolphin forgets the fish it was fed
Dolphin.readAdditionalSaveData missing minor: GotFish and Moistness are not read, a loaded dolphin starts with no fish and full moistness
Dolphin.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register gap: player: no MoveToItemGoal and PlayWithItemsGoal (dolphins ignore items thrown in the water), no FollowPlayerRiddenEntityGoal for boats or nautiluses, no AvoidEntity of guardians, and HurtByTarget does not skip guardians
Dolphin.createAttributes skip:data attributes come from the entity tables
Dolphin.canAttack missing minor: a baby dolphin that is hurt can still pick the attacker as target
Dolphin.pickUpItem missing player: a dolphin never picks up an item dropped in the water (pick_up_loot is set but nothing takes the item)
Dolphin.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 38: seven happy villager particles about the dolphin
Dolphin.closeToNextPos inline crates/horizon-client/src/mobs/dolphin.rs::SwimToTreasure::tick nav target within 12 blocks (144 squared) of the dolphin
Dolphin.DolphinSwimWithPlayerGoal.canContinueToUse port crates/horizon-client/src/mobs/dolphin.rs::SwimWithPlayer::can_continue player still swimming and within 16 blocks
Dolphin.ItemGoal.drop missing player: a dolphin holding an item (from a dispenser) never throws it back with the 40 tick pickup delay
Dolphin.ItemGoal.dropItem missing player: the held item is never dropped by the dolphin
Dolphin.MoveToItemGoal.canUse missing player: dolphins do not notice items floating within 8 blocks
Dolphin.MoveToItemGoal.stop missing player: no item to drop after playing, no cooldown
Dolphin.MoveToItemGoal.start missing player: dolphins do not swim to floating items or play the play sound
AbstractChestedHorse.dropEquipment port crates/horizon-client/src/mobs/drops.rs::die the stored items and then a chest drop, chested cleared
AbstractChestedHorse.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt ChestedHorse and Items for llamas, donkeys and mules
AbstractChestedHorse.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt ChestedHorse and Items, 15 slots
AbstractChestedHorse.getSlot missing minor: slot 499 (horse.chest) is not mapped for mobs, so /item replace entity ... horse.chest does nothing
AbstractChestedHorse.equipChest port crates/horizon-client/src/game/mounts.rs::Game::interact_mount tamed donkey or mule takes a held chest with the sound; llamas do it in game/llamas.rs interact_llama
AbstractChestedHorse.playChestEquipsSound inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount entity.donkey.chest with the random pitch; llamas play entity.llama.chest in llama_sound
1 MemoryMap.equals skip:java map equality of a built memory set
2 MemoryMap.iterator skip:java iteration over a built memory set, used for the brain's debug and save output
3 MemoryModuleType.register skip:data registry of memory types; Horizon declares each memory as a field of the brain's Memories struct
4 MemorySlot.set port crates/horizon-client/src/mobs/villager_brain.rs::Slot::set Slot::set and set_ttl store the value with the time to live (NEVER when none)
5 MemorySlot.toString skip:debug text for the brain debug dump
6 MemorySlot.visit skip:debug Brain.Visitor feeds the debug screen only
7 NearestVisibleLivingEntities.findAll inline crates/horizon-client/src/mobs/villager_brain.rs::sense_babies walks the visible list with the cached line-of-sight test; only the villager babies sensor needs the whole list here
8 NearestVisibleLivingEntities.find skip:java Stream view of findAll, no caller in the game code
9 AmphibiousPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator NavKind::Amphibious picks Evaluator::Amphibious (prefers_shallow false)
10 AmphibiousPathNavigation.getTempMobPos port crates/horizon-client/src/mobs/nav.rs::Mob::temp_mob_pos x, half the height up, z
11 AmphibiousPathNavigation.canMoveDirectly port crates/horizon-client/src/mobs/nav.rs::Mob::can_move_directly only while in liquid, clear to the target without fluid blocking
12 AmphibiousPathNavigation.isStableDestination inline crates/horizon-client/src/mobs/nav.rs::Mob::stable_destination Amphibious arm: the block below is not air
13 FlyingPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator NavKind::Flying picks Evaluator::Fly
14 FlyingPathNavigation.canUpdatePath port crates/horizon-client/src/mobs/nav.rs::Mob::can_update_path gap: minor: always true, vanilla is false for a flier that rides something
15 GroundPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator NavKind::Ground picks Evaluator::Walk
16 GroundPathNavigation.canUpdatePath port crates/horizon-client/src/mobs/nav.rs::Mob::can_update_path gap: minor: on ground or in liquid, the isPassenger case is missing
17 GroundPathNavigation.getTempMobPos port crates/horizon-client/src/mobs/nav.rs::Mob::temp_mob_pos x, surface_y, z
18 GroundPathNavigation.createPath port crates/horizon-client/src/mobs/nav.rs::Mob::create_path_to unloaded chunk gives no path, then the surface search (surface_position) unless below_surface
19 GroundPathNavigation.getSurfaceY port crates/horizon-client/src/mobs/nav.rs::Mob::surface_y floats up through water up to 16 blocks when the mob can float, else floor(y + 0.5)
20 GroundPathNavigation.trimPath missing player: avoid_sun is set by the skeleton's RestrictSun goal but nothing truncates the path at the first sunlit node, so skeletons chasing you by day walk out into the sun instead of stopping in the shade
21 PathNavigation.getGroundY inline crates/horizon-client/src/mobs/nav.rs::Mob::nav_tick target y is the floor level under the node unless the block below is air
22 PathNavigation.shouldTargetNextNodeInDirection port crates/horizon-client/src/mobs/nav.rs::Mob::should_target_next_node
23 PathNavigation.trimPath missing minor: path nodes on a cauldron are not raised one block, so a route ending on a cauldron (leatherworker job site) aims into the block
24 PathNavigation.isClearForMovementBetween port crates/horizon-client/src/mobs/world.rs::MobWorld::clear_between collider clip from start to the target raised by half the height, optionally stopped by fluids
25 PathNavigation.shouldRecomputePath missing player: nothing asks a mob to re-path when a block changes near its route (recompute_path is only reached after its own delay flag), so a mob keeps walking an old path into a wall you just placed or past one you removed
26 WallClimberNavigation.createPath port crates/horizon-client/src/mobs/nav.rs::Mob::create_path_to WallClimber kind remembers climb_to before the ground path
27 WallClimberNavigation.tick inline crates/horizon-client/src/mobs/nav.rs::Mob::nav_tick WallClimber branch: with no path it keeps steering at climb_to until within the body width
28 WaterBoundPathNavigation.createPathFinder inline crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator Evaluator::Swim with breach for the dolphin; can_pass_doors stays true (minor)
29 WaterBoundPathNavigation.canUpdatePath port crates/horizon-client/src/mobs/nav.rs::Mob::can_update_path breach (dolphin) or in liquid
30 WaterBoundPathNavigation.getTempMobPos port crates/horizon-client/src/mobs/nav.rs::Mob::temp_mob_pos x, half the height up, z
31 AdultSensor.doTick inline crates/horizon-client/src/mobs/animal_brain.rs::tick_sensors gap: player: Sensor::AdultSameType arm (axolotl only); goats, camels, hoglins and farm animals follow parents through FollowParent goals, but baby armadillos have no follow-the-adult behaviour
32 AdultSensor.setNearestVisibleAdult inline crates/horizon-client/src/mobs/animal_brain.rs::tick_sensors closest visible adult of the same species into nearest_visible_adult
33 AdultSensorAnyType.setNearestVisibleAdult port crates/horizon-client/src/mobs/animal_brain.rs::sense_adult closest visible adult of a #followable_friendly_mobs species (happy ghast)
34 AxolotlAttackablesSensor.isMatchingEntity port crates/horizon-client/src/mobs/animal_brain.rs::sense_axolotl_attackables within 8 blocks, in water, always-hostile or hunt target tag, alive and not playing dead
35 AxolotlAttackablesSensor.isHuntTarget inline crates/horizon-client/src/mobs/animal_brain.rs::sense_axolotl_attackables hunt target tag only while there is no hunting cooldown
36 BreezeAttackEntitySensor.doTick port crates/horizon-client/src/mobs/monster_brain.rs::sense_breeze_attack nearest living entity that is not a creative or spectator player and is attackable
37 FrogAttackablesSensor.isMatchingEntity port crates/horizon-client/src/mobs/frog.rs::server_ai_step every 20 ticks: nearest size-1 slime or magma cube within 10 blocks in line of sight
38 FrogAttackablesSensor.isUnreachableAttackTarget inline crates/horizon-client/src/mobs/frog.rs::server_ai_step skips ids in the unreachable list (up to five, 100 ticks each)
39 GolemSensor.checkForNearbyGolem port crates/horizon-client/src/mobs/villager_brain.rs::sense_golem an iron golem in the nearby list sets golem_detected_recently for 599 ticks
40 HoglinSpecificSensor.doTick inline crates/horizon-client/src/mobs/piglin.rs::hoglin_repellent gap: player: only the repellent scan is kept; adult piglin and adult hoglin counts are not sensed, so adult hoglins do not keep 8 blocks from adult piglins and do not flee them when outnumbered
41 HurtBySensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_hurt last damage source forgotten after 40 ticks, attacker kept while alive
42 IsInWaterSensor.doTick inline crates/horizon-client/src/mobs/frog.rs::Croak::can_use no IS_IN_WATER memory; frog goals read fluids.in_water directly
43 MobSensor.doTick inline crates/horizon-client/src/mobs/armadillo.rs::server_ai_step armadillo scare sensor every fifth tick: cannot stay rolled up clears the danger, else scan
44 MobSensor.checkForMobsNearby port crates/horizon-client/src/mobs/armadillo.rs::scared_by_someone undead, last attacker or a sprinting or riding player within 7 by 2 blocks
45 MobSensor.mobDetected inline crates/horizon-client/src/mobs/armadillo.rs::server_ai_step danger = 80 ticks
46 NearestBedSensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_bed babies only, at most four new beds per scan, 40 tick cache, path must reach the bed
47 NearestItemSensor.doTick port crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups gap: player: villagers never walk to dropped food or seeds (only what lands within a block is picked up) and piglins and allays scan their own items without the line-of-sight test
48 NearestLivingEntitySensor.doTick port crates/horizon-client/src/mobs/brain.rs::living_near alive entities within the follow range box, nearest first, stored with a fresh visible list
49 NearestVisibleLivingEntitySensor.getNearestEntity inline crates/horizon-client/src/mobs/animal_brain.rs::sense_axolotl_attackables find_closest over the visible list with the sensor's own test
50 PiglinBruteSpecificSensor.doTick inline crates/horizon-client/src/mobs/piglin.rs::register_brute gap: minor: nemesis is a NearestTarget on wither skeletons only, the wither boss is not one; alerting nearby adult piglins is HurtByTarget alert
51 PiglinSpecificSensor.requires skip:java declares which memories the sensor fills
52 PiglinSpecificSensor.doTick inline crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: only the repellent scan (every 20 ticks) is a sensor; nemesis, baby hoglin or piglin, player holding gold and adult counts are not remembered, so piglins do not attack wither skeletons or look at a player holding gold from 14 blocks
53 PiglinSpecificSensor.isValidRepellent port crates/horizon-client/src/mobs/piglin.rs::find_piglin_repellent #piglin_repellents, a soul campfire only while lit
54 PlayerSensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_players gap: minor: one player only, no other players of a shared level
55 SecondaryPoiSensor.doTick port crates/horizon-client/src/mobs/villager_brain.rs::sense_secondary farmer: farmland within 4 by 2 blocks; no other profession has secondary blocks
56 Sensor.updateTargetingConditionRanges inline crates/horizon-client/src/mobs/monster_brain.rs::targetable each test reads the mob's follow range at call time, so no shared range needs updating
57 Sensor.isEntityAttackableIgnoringLineOfSight inline crates/horizon-client/src/mobs/goals.rs::Mob::can_target_player check_sight false for the player; mob targets are tested per goal
58 Sensor.rememberPositives inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start positives_left counter of the breeze's StopAttackingIfTargetInvalid (100 ticks after the last attackable moment)
59 TemptingSensor.doTick port crates/horizon-client/src/mobs/animal_brain.rs::sense_tempting gap: minor: range test ignores the visibility scaling (sneaking), a rider of any kind blocks the tempt
60 TemptingSensor.playerHoldingTemptation inline crates/horizon-client/src/mobs/animal_brain.rs::sense_tempting main or off hand holds food of the animal
61 VillagerBabiesSensor.isVillagerBaby inline crates/horizon-client/src/mobs/villager_brain.rs::sense_babies visible baby villagers
62 VillagerHostilesSensor.isMatchingEntity port crates/horizon-client/src/mobs/villager_brain.rs::sense_hostiles closest visible hostile within its own acceptable distance
63 VillagerHostilesSensor.isClose port crates/horizon-client/src/mobs/villager_brain.rs::hostile_distance the acceptable distance table (8, 10, 12, 15 blocks)
64 WardenEntitySensor.doTick port crates/horizon-client/src/mobs/warden_brain.rs::sense_entities living list then nearest attackable: a player first, else another entity
65 WardenEntitySensor.getClosest inline crates/horizon-client/src/mobs/warden_brain.rs::sense_entities two passes over the sorted list with warden::can_target
66 TargetingConditions.copy skip:java clone of a builder object
67 TargetingConditions.test port crates/horizon-client/src/mobs/goals.rs::Mob::player_in_range gap: minor: the player case (range scaled by visibility, line of sight, ally and creative checks); mob targets are tested in NearestTarget and each brain's targetable and attackable
68 DefaultRandomPos.generateRandomPosTowardDirection port crates/horizon-client/src/mobs/goals.rs::Mob::default_check Mob::toward builds the position, default_check does limits, home, stable and malus
69 GoalUtils.mobRestricted port crates/horizon-client/src/mobs/goals.rs::Mob::restricted home within radius + distance + 1, then isRestricted
70 GoalUtils.hasMalus inline crates/horizon-client/src/mobs/goals.rs::Mob::default_check path type malus must be 0, also in land_up_out_of_solid
71 LandRandomPos.getPosTowards missing player: iron golems wander anywhere; GolemRandomStrollInVillageGoal and MoveBackToVillageGoal are not registered, so a golem does not drift toward villagers who want it or back to the village
72 LandRandomPos.getPosInDirection inline crates/horizon-client/src/mobs/goals.rs::Mob::land_random_pos_away only the away direction is wired; the toward call has no user
73 LandRandomPos.movePosUpOutOfSolid port crates/horizon-client/src/mobs/goals.rs::Mob::land_up_out_of_solid up out of solid, then no water and no malus
74 RandomPos.generateRandomDirection port crates/horizon-client/src/mobs/goals.rs::Mob::random_direction
75 RandomPos.generateRandomDirectionWithinRadians port crates/horizon-client/src/mobs/goals.rs::Mob::random_direction_within
76 RandomPos.generateRandomPos port crates/horizon-client/src/mobs/goals.rs::Mob::pick_best best of ten by walk target value
77 PoiManager.remove inline crates/horizon-client/src/poi_sections.rs::PoiSections::get no stored records: a section's POI list is rebuilt from its blocks after an edit
78 PoiManager.findAll port crates/horizon-client/src/mobs/villager_brain.rs::pois_in_range square then sphere filter over the sections' POI blocks, nearest first, with a caller filter
79 PoiManager.findAllWithType port crates/horizon-client/src/mobs/villager_brain.rs::pois_in_range returns (type, pos) pairs; only HAS_SPACE occupancy (any-occupancy searches use homes_in_range)
80 PoiManager.findAllClosestFirstWithType port crates/horizon-client/src/mobs/villager_brain.rs::pois_in_range sorted by squared distance
81 PoiManager.getRandom inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use random home within 48 blocks not visited lately (the raider's village walk); the villager's hiding place picks its own home
82 PoiManager.release inline crates/horizon-client/src/mobs/villager_brain.rs::PoiMem::clear tickets are derived from the villagers' job, potential job, home and meeting memories, so clearing the memory frees the ticket
83 PoiManager.getType port crates/horizon-client/src/mobs/villager_brain.rs::poi_at POI kind of the block at a position, from the per-state table
84 PoiManager.getDebugPoiInfo skip:debug debug screen data
85 PoiManager.setDirty inline crates/horizon-client/src/mobs/villager_brain.rs::village_sections village distances are recomputed per query from the taken village POIs, no dirty tracking
86 PoiManager.checkConsistencyWithBlocks inline crates/horizon-client/src/poi_sections.rs::PoiSections::get the list is always built from the blocks, so it cannot drift
87 PoiManager.updateFromSection inline crates/horizon-client/src/poi_sections.rs::PoiSections::get scans the section's blocks for POI states
88 PoiManager.ensureLoadedAndValid skip:other no separate POI storage: POIs come from the loaded chunks' blocks
89 PoiManager.DistanceTracker.setLevel inline crates/horizon-client/src/mobs/villager_brain.rs::sections_to_village Chebyshev distance in sections to a village section (max 7), computed when asked
90 PoiRecord.acquireTicket inline crates/horizon-client/src/mobs/villager_brain.rs::tickets a taken ticket is a villager memory pointing at the POI, counted per search
91 PoiRecord.releaseTicket inline crates/horizon-client/src/mobs/villager_brain.rs::tickets see PoiManager.release
92 PoiRecord.isOccupied inline crates/horizon-client/src/mobs/villager_brain.rs::village_sections a POI counts as occupied (village centre) when a villager memory holds it
93 PoiRecord.equals skip:java position equality
94 PoiRecord.Packed.unpack skip:other POI files are not loaded into records; keep_claims reads free_tickets only to carry claims across a save
95 PoiSection.pack port crates/horizon-client/src/save.rs::encode_poi Valid and Records with free_tickets at the max (claims kept by keep_claims)
96 PoiSection.getRecords inline crates/horizon-client/src/poi_sections.rs::PoiSections::get per-section POI list, type filter done by poi_matches
97 PoiSection.add inline crates/horizon-client/src/poi_sections.rs::PoiSections::get list rebuilt from the blocks
98 PoiSection.remove inline crates/horizon-client/src/poi_sections.rs::PoiSections::get list rebuilt from the blocks
99 PoiSection.getFreeTickets skip:debug deprecated, debug only
100 PoiSection.release inline crates/horizon-client/src/mobs/villager_brain.rs::tickets see PoiManager.release
101 PoiSection.refresh inline crates/horizon-client/src/poi_sections.rs::PoiSections::get invalid sections need no refresh, the list is rebuilt from blocks
102 PoiSection.Packed.unpack skip:other POI files are not loaded into sections
103 PoiTypes.registerBlockStates inline crates/horizon-client/src/save.rs::poi_type state to POI type and max tickets in one match
104 PoiTypes.bootstrap port crates/horizon-client/src/save.rs::poi_type every POI type with its tickets (bed heads of the sixteen colours only, cauldrons, bell 32); villagers use villager_brain::state_poi for jobs, beds and bell
105 Bat.isFlapping missing minor: a flying bat's wing beat (every 10 ticks) sends no FLAP vibration, so sculk sensors do not hear it
106 Bat.getAmbientSound inline crates/horizon-client/src/mobs/ai.rs::play_ambient Species::Bat arm: a resting bat is silent three times in four
107 Bat.isResting port crates/horizon-client/src/mobs/bat.rs::resting
108 Bat.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt BatFlags byte, bit 0 resting
109 Bat.checkBatSpawnRules inline crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Bat arm: below the surface, coin flip, light against nextInt(4), bats_spawnable_on, mob rules
110 Dolphin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize S::Dolphin arm: full air, pitch 0, baby chance 0.1
111 Dolphin.defineSynchedData skip:java synched fields: got_fish is extra.flag and moistness extra.counter
112 Dolphin.addAdditionalSaveData missing minor: GotFish and Moistness are not written, a saved dolphin forgets the fish it was fed
113 Dolphin.readAdditionalSaveData missing minor: GotFish and Moistness are not read, a loaded dolphin starts with no fish and full moistness
114 Dolphin.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register gap: player: no MoveToItemGoal and PlayWithItemsGoal (dolphins ignore items thrown in the water), no FollowPlayerRiddenEntityGoal for boats or nautiluses, no AvoidEntity of guardians, and HurtByTarget does not skip guardians
115 Dolphin.createAttributes skip:data attributes come from the entity tables
116 Dolphin.canAttack missing minor: a baby dolphin that is hurt can still pick the attacker as target
117 Dolphin.pickUpItem missing player: a dolphin never picks up an item dropped in the water (pick_up_loot is set but nothing takes the item)
118 Dolphin.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst event 38: seven happy villager particles about the dolphin
119 Dolphin.closeToNextPos inline crates/horizon-client/src/mobs/dolphin.rs::SwimToTreasure::tick nav target within 12 blocks (144 squared) of the dolphin
120 Dolphin.DolphinSwimWithPlayerGoal.canContinueToUse port crates/horizon-client/src/mobs/dolphin.rs::SwimWithPlayer::can_continue player still swimming and within 16 blocks
121 Dolphin.ItemGoal.drop missing player: a dolphin holding an item (from a dispenser) never throws it back with the 40 tick pickup delay
122 Dolphin.ItemGoal.dropItem missing player: the held item is never dropped by the dolphin
123 Dolphin.MoveToItemGoal.canUse missing player: dolphins do not notice items floating within 8 blocks
124 Dolphin.MoveToItemGoal.stop missing player: no item to drop after playing, no cooldown
125 Dolphin.MoveToItemGoal.start missing player: dolphins do not swim to floating items or play the play sound
126 AbstractChestedHorse.dropEquipment port crates/horizon-client/src/mobs/drops.rs::die the stored items and then a chest drop, chested cleared
127 AbstractChestedHorse.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt ChestedHorse and Items for llamas, donkeys and mules
128 AbstractChestedHorse.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt ChestedHorse and Items, 15 slots
129 AbstractChestedHorse.getSlot missing minor: slot 499 (horse.chest) is not mapped for mobs, so /item replace entity ... horse.chest does nothing
130 AbstractChestedHorse.equipChest port crates/horizon-client/src/game/mounts.rs::Game::interact_mount tamed donkey or mule takes a held chest with the sound; llamas do it in game/llamas.rs interact_llama
131 AbstractChestedHorse.playChestEquipsSound inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount entity.donkey.chest with the random pitch; llamas play entity.llama.chest in llama_sound
+148
View File
@@ -0,0 +1,148 @@
AbstractHorse.registerGoals port crates/horizon-client/src/mobs/equine.rs::register same goals and priorities; llamas and camels have their own register
AbstractHorse.addBehaviourGoals inline crates/horizon-client/src/mobs/equine.rs::register float, mount panic and tempt come after the rest; none for a skeleton horse, no panic for a zombie horse
AbstractHorse.getFlag skip:other bit accessor of the synched flags; Horizon keeps tame, eating (flag) and standing (counter) as separate fields
AbstractHorse.setFlag skip:other bit accessor of the synched flags; the bits are packed for sync in lan.rs::mob_meta and read back in equine::set_flags
AbstractHorse.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot saddle needs an alive tamed adult; horses, zombie horses, skeleton horses and llamas allow every slot
AbstractHorse.equipBodyArmor inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: minor: right click armours only a tamed Horse, a tamed zombie horse needs the inventory screen
AbstractHorse.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip body and saddle of a tamed mount
AbstractHorse.modifyTemper inline crates/horizon-client/src/game/mounts.rs::Game::feed_mount temper raised by the food, clamped to the maximum; a buck adds 5 in equine.rs RunAroundLikeCrazy::tick
AbstractHorse.eating inline crates/horizon-client/src/game/mounts.rs::Game::feed_mount gap: minor: the mouth stays open 3 ticks instead of 30; a foal uses the adult eat sound
AbstractHorse.causeFallDamage inline crates/horizon-client/src/mobs/living.rs::Mob::cause_fall_damage gap: player: a landing horse makes no thud (entity.horse.land) and its rider takes no fall damage (position_rider zeroes the rider's fall distance); the mount's own damage uses its safe distance of 6
AbstractHorse.createInventory skip:java resizes a SimpleContainer; Horizon sizes the chest items when the menu opens
AbstractHorse.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound saddle slot plays entity.horse.saddle
AbstractHorse.hurtServer missing player: a hurt horse never rears up (vanilla: one hit in three makes it stand for a second)
AbstractHorse.playStepSound inline crates/horizon-client/src/mobs/ai.rs::step_sound gap: player: horses play the block's own step sound at 15%, never entity.horse.step, step_wood, step_baby or the gallop of a ridden horse; snow above the block is not used either
AbstractHorse.isWoodSoundType missing minor: part of playStepSound, horses on wood use the block's wood step instead of horse.step_wood
AbstractHorse.fedFood port crates/horizon-client/src/game/mounts.rs::Game::feed_mount handleEating and consuming one item; llamas use llamas.rs feed_llama
AbstractHorse.doPlayerRide inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount clears eating and standing, turns the player to the mount and mounts; the block at the end of interact_mount
AbstractHorse.isImmobile missing player: a grazing or rearing horse is not held still, goals and strolling keep running while its head is down or it is up on its hind legs
AbstractHorse.dropEquipment inline crates/horizon-client/src/mobs/drops.rs::die the equine branch drops the inventory items and a donkey's or mule's chest
AbstractHorse.followMommy missing minor: no Bred flag, so a bred foal is not pulled to its mother from 16 blocks; the FollowParent goal covers 8
AbstractHorse.openMouth inline crates/horizon-client/src/game/mounts.rs::Game::feed_mount gap: minor: sets the mouth animation to 1 once, it closes after 3 ticks; the mouth flag is not synced to a remote client
AbstractHorse.setStanding inline crates/horizon-client/src/mobs/equine.rs::make_mad the 20 tick rear; RandomStand::start and the jump in tick_mount_riding set the same counter
AbstractHorse.standIfPossible inline crates/horizon-client/src/mobs/equine.rs::make_mad rears only species that can; the hurt caller is missing (see hurtServer)
AbstractHorse.tickRidden port crates/horizon-client/src/mobs/equine.rs::ridden_step yaw and half the pitch follow the rider; no gallop counter (see playStepSound)
AbstractHorse.addPassenger inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: minor: the rider's yaw is snapped to the mount's on mounting, the pitch is not
AbstractHorse.getRiddenInput port crates/horizon-client/src/mobs/equine.rs::ridden_step gap: player: no allowStandSliding, so a horse that lands from a small hop while still rearing ignores the keys until the rear ends
AbstractHorse.executeRidersJump port crates/horizon-client/src/mobs/equine.rs::ridden_step gap: minor: the impulse is jump strength times the bar only, no honey block factor and no Jump Boost
AbstractHorse.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: Tame, Temper and Owner are read; EatingHaystack and Bred are not
AbstractHorse.setOffspringAttribute port crates/horizon-client/src/mobs/equine.rs::inherit max health, jump strength and speed from both parents
AbstractHorse.onPlayerJump inline crates/horizon-client/src/game/mounts.rs::Game::tick_mount_riding gap: minor: the rear and the jump sound; donkeys and mules play the horse jump sound
AbstractHorse.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst events 7 and 6: hearts and smoke around the mount
AbstractHorse.positionRider port crates/horizon-client/src/game/mounts.rs::Game::position_rider gap: minor: the rider's body yaw is not copied from the mount
AbstractHorse.generateMaxHealth port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse_health
AbstractHorse.generateJumpStrength port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse_jump
AbstractHorse.generateSpeed port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse_speed
AbstractHorse.getSlot missing minor: /item cannot reach the mount slots horse.0 to horse.14
AbstractHorse.getControllingPassenger port crates/horizon-client/src/mobs/equine.rs::controlled gap: player: a tamed skeleton horse obeys its rider without a saddle
AbstractHorse.getDismountLocationInDirection inline crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: minor: no climb up to 0.75 above the mount and no pose boxes, only block checks beside the mount
AbstractHorse.getDismountLocationForPassenger port crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: minor: tries both sides by the mount's yaw then on top, not by the rider's main arm
AbstractHorse.getPassengerAttachmentPoint inline crates/horizon-client/src/game/mounts.rs::Game::position_rider gap: player: the rider does not slide back and up when the horse rears; the seat is a fixed point per species
Donkey.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: player: only Horse, Donkey and llamas get the tame, full health, not ridden rules, so two tame mules in love also breed (a mule never mates in vanilla)
Donkey.getBreedOffspring inline crates/horizon-client/src/game/creatures.rs::Game::breed donkey with horse gives a mule, donkey with donkey a donkey; attributes from both parents
Horse.randomizeAttributes port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse health, speed and jump strength
Horse.setVariantAndMarkings inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize coat and markings drawn at spawn; breeding mixes them in creatures.rs Game::breed
Horse.setVariant missing minor: only reached by the horse/variant item component, which Horizon does not read
Horse.get missing minor: the horse/variant component is never reported
Horse.applyImplicitComponent missing minor: a horse/variant component on a spawn egg or item is ignored
Horse.playGallopSound missing player: a ridden horse never plays the gallop and the now and then breathing sound
Horse.mobInteract inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: player: an untamed horse with a non-food item in hand is mounted instead of rearing angrily, a full health tame horse with food in hand is mounted instead of ignoring the click, and a golden dandelion on a foal does nothing
Horse.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use horse or donkey partner, both tame, adult, not ridden and at full health
Horse.hurtArmor missing player: horse armour never loses durability when the horse is hurt (the body item is only an id)
Horse.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize random coat and markings, the herd shares the coat
Llama.setStrength inline crates/horizon-client/src/mobs/llama.rs::from_nbt strength kept in variant2 and clamped to 1 to 5 where it is set (from_nbt, offspring, apply_offspring)
Llama.setRandomStrength inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize one in 25 llamas rolls up to 5, else up to 3
Llama.addAdditionalSaveData port crates/horizon-client/src/mobs/llama.rs::to_nbt Variant and Strength
Llama.readAdditionalSaveData port crates/horizon-client/src/mobs/llama.rs::from_nbt
Llama.registerGoals port crates/horizon-client/src/mobs/llama.rs::register goals and targets as vanilla, path length 40
Llama.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta strength and variant entries
Llama.get missing minor: the llama/variant component is never reported
Llama.applyImplicitComponent missing minor: a llama/variant component on an item is ignored
Llama.playChestEquipsSound inline crates/horizon-client/src/game/llamas.rs::Game::interact_llama entity.llama.chest when a chest is added
Llama.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use any llama or trader llama, both tame, adult, not ridden and at full health
Llama.causeFallDamage inline crates/horizon-client/src/mobs/living.rs::Mob::cause_fall_damage gap: player: the rider of a llama takes no fall damage; the llama's own damage uses its safe distance of 6
Llama.leaveCaravan inline crates/horizon-client/src/mobs/caravan.rs::FollowCaravan::stop clears the caravan head
Llama.LlamaHurtByTargetGoal.canContinueToUse port crates/horizon-client/src/mobs/llama.rs::LlamaHurtBy::can_continue stops after a spit
Mule.playChestEquipsSound inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: minor: a mule uses the donkey's chest sound (entity.donkey.chest) instead of entity.mule.chest
SkeletonHorse.checkSkeletonHorseSpawnRules inline crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules spawner reasons need light or a light ignoring reason, otherwise the animal rules
SkeletonHorse.randomizeAttributes port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse jump strength only
SkeletonHorse.getSwimSound missing minor: a skeleton horse in water uses the generic swim sound, no skeleton_horse.swim, step_water or gallop_water
SkeletonHorse.playSwimSound missing minor: the swim volume rules for a skeleton horse are not applied
SkeletonHorse.playJumpSound missing minor: no skeleton_horse.jump_water in water; the horse jump sound plays on land
SkeletonHorse.aiStep inline crates/horizon-client/src/game/passengers.rs::Game::tick_skeleton_traps a trap horse that is not persistent is removed after 18000 ticks
SkeletonHorse.addAdditionalSaveData port crates/horizon-client/src/mobs/riders.rs::write_nbt SkeletonTrap and SkeletonTrapTime
SkeletonHorse.readAdditionalSaveData port crates/horizon-client/src/mobs/riders.rs::read_nbt
SkeletonHorse.setTrap inline crates/horizon-client/src/game/passengers.rs::Game::spring_skeleton_trap the trap flag is a plain bool polled every tick instead of adding and removing a goal; lightning.rs sets it
SkeletonTrapGoal.canUse inline crates/horizon-client/src/game/passengers.rs::Game::tick_skeleton_traps a living player within 10 blocks
SkeletonTrapGoal.tick port crates/horizon-client/src/game/passengers.rs::Game::spring_skeleton_trap lightning, a skeleton on the horse and three more horse and skeleton pairs
SkeletonTrapGoal.createHorse inline crates/horizon-client/src/game/passengers.rs::Game::spring_skeleton_trap tame, adult, invulnerable for 60 ticks, persistent
TraderLlama.makeNewLlama inline crates/horizon-client/src/mobs/llama.rs::apply_offspring the baby trader llama is persistent
TraderLlama.registerGoals port crates/horizon-client/src/mobs/llama.rs::register adds panic 2.0, the defend trader target and the zombie and illager targets
TraderLlama.canDespawn port crates/horizon-client/src/mobs/caravan.rs::trader_llama_tick despawn delay counts down unless tamed, led by something else, ridden, age locked or persistent
TraderLlama.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize an event spawn is an adult; a lone one gets no baby chance
ZombieHorse.randomizeAttributes port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse jump strength and speed
ZombieHorse.generateZombieHorseJumpStrength inline crates/horizon-client/src/mobs/finalize.rs::Ctx::horse 0.5 plus three draws of 0.0667
ZombieHorse.generateZombieHorseSpeed inline crates/horizon-client/src/mobs/finalize.rs::Ctx::horse (9 plus three draws) over 42.16
ZombieHorse.addBehaviourGoals inline crates/horizon-client/src/mobs/equine.rs::register float and tempt with the zombie horse food, no mount panic
ZombieHorse.mobInteract inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: player: an untamed zombie horse with a non-food item in hand is mounted instead of rearing angrily, and food that is not eaten still mounts it
Cat.getSoundSet missing player: cats always use the classic adult sounds, so royal cats and kittens never get their own voices
Cat.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: variant, lying, relax and collar are sent, the sound variant entry is not
Cat.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt variant, sound_variant and CollarColor
Cat.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt
Cat.getAmbientSound inline crates/horizon-client/src/mobs/ai.rs::play_ambient gap: minor: purr when in love and the stray sound are used; a tame cat never plays the purreow variant
Cat.createAttributes skip:data attributes come from entity-types.json
Cat.handleLieDown inline crates/horizon-client/src/mobs/tame.rs::cat_ai_step gap: minor: purring and the amounts are ported; lying on top of a sleeping player (a 0.15 shift of the pose) is not tracked
Cat.updateLieDownAmount port crates/horizon-client/src/mobs/tame.rs::cat_amounts
Cat.updateRelaxStateOneAmount port crates/horizon-client/src/mobs/tame.rs::cat_amounts
Cat.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: minor: a sitting cat is refused as a mate, vanilla only needs both tame and in love
Cat.removeWhenFarAway missing minor: wild cats never despawn for distance (vanilla: untamed and older than 2400 ticks)
Cat.reassessTameGoals inline crates/horizon-client/src/mobs/tame.rs::register_cat the player avoidance goal is conditioned on being untamed instead of added and removed
Cat.tryToTame inline crates/horizon-client/src/game/creatures.rs::Game::interact_mob one chance in three, then tame, sitting, event 7 or 6 and the advancement trigger
Cat.CatAvoidEntityGoal.canContinueToUse inline crates/horizon-client/src/mobs/goals.rs::AvoidEntity::can_continue gap: minor: a cat tamed mid flight finishes its escape path, the untamed check is only in can_use
Cat.CatRelaxOnOwnerGoal.spaceIsOccupied port crates/horizon-client/src/mobs/tame.rs::CatRelaxOnOwner::occupied another lying or relaxing cat within 2 blocks of the spot
Cat.CatRelaxOnOwnerGoal.canContinueToUse port crates/horizon-client/src/mobs/tame.rs::CatRelaxOnOwner::can_continue tame, not sitting, owner still asleep and the spot free
Cat.CatTemptGoal.canScare missing player: a cat lured with fish is scared by every move or look of the player; vanilla lets a randomly picked player (re-rolled every 500 to 600 ticks) approach without scaring it
CatVariants.bootstrap skip:data variant registry bootstrap; Horizon reads cat variants from data
Ocelot.registerGoals missing player: an ocelot only panics, wanders and looks at players (the generic animal goals): it is not lured by fish, does not run from players, never stalks chickens or baby turtles and has no breed goal
Ocelot.customServerAiStep port crates/horizon-client/src/mobs/tame.rs::cat_anim crouch and sprint pose from the move speed, shared with cats; nothing sets those speeds for an ocelot yet
Ocelot.removeWhenFarAway missing minor: ocelots never despawn for distance (vanilla: not trusting and older than 2400 ticks)
Ocelot.createAttributes skip:data attributes come from entity-types.json
Ocelot.mobInteract missing player: raw fish never makes a wild ocelot trust the player (no one in three roll, no hearts or smoke); it only puts the ocelot in love mode
Ocelot.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst events 41 and 40: hearts and smoke; nothing sends them without the trust roll
Ocelot.reassessTrustingGoals missing player: no player avoidance goal, so wild ocelots never run from the player
Ocelot.checkSpawnObstruction port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_obstruction unobstructed, no liquid, at or above sea level on grass or leaves
Ocelot.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize baby chance 1.0 for a group
Ocelot.getLeashOffset missing minor: the lead ties at full eye height instead of half of it (leash::leash_offset only special-cases llamas)
Ocelot.OcelotAvoidEntityGoal.canUse missing player: see reassessTrustingGoals, no avoidance goal exists
Ocelot.OcelotAvoidEntityGoal.canContinueToUse missing minor: see reassessTrustingGoals, no avoidance goal exists
Ocelot.OcelotTemptGoal.canScare missing minor: see registerGoals, an ocelot has no tempt goal
AbstractFish.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register panic, player avoidance and random swimming; gap: player: creative players do not scare fish (the avoid goal skips them, vanilla only skips spectators)
AbstractFish.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob a water bucket scoops the fish with its bucket data
AbstractFish.FishSwimGoal.canUse inline crates/horizon-client/src/mobs/aquatic.rs::register Stroll::swimming(1.0, 40) is the random swim goal; fish never follow a leader so it always applies
AbstractSchoolingFish.registerGoals missing player: no follow the flock leader goal, so cod, salmon and tropical fish spawn in groups but swim about alone instead of schooling
AbstractSchoolingFish.isFollower missing minor: part of the missing schooling; the leader id is kept at spawn but never read
AbstractSchoolingFish.canBeFollowed missing minor: part of the missing schooling
AbstractSchoolingFish.tick missing minor: part of the missing schooling (school size reset when alone)
AbstractSchoolingFish.inRangeOfLeader missing minor: part of the missing schooling
AbstractSchoolingFish.pathToLeader missing minor: part of the missing schooling
AbstractSchoolingFish.addFollowers missing minor: part of the missing schooling
AbstractSchoolingFish.finalizeSpawn inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: the group shares a leader id and variant, but followers never use it to follow the leader
Pufferfish.readAdditionalSaveData missing minor: PuffState is not read or written, a reloaded pufferfish starts deflated
Pufferfish.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register the puff goal at priority 1
Pufferfish.touch missing minor: only the player is stung (inside ai_step); other mobs touching a puffed fish are not hurt or poisoned
Salmon.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta size entry, small 0 to large 2
Salmon.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant the type tag, medium by default
Salmon.get inline crates/horizon-client/src/entity_nbt.rs::bucket_components the size component goes onto the bucket
Salmon.applyImplicitComponent port crates/horizon-client/src/entity_nbt.rs::load_bucket_data size from the bucket
Salmon.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize weighted size: small 30, medium 50, large 15
TropicalFish.packVariant inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt packed pattern, base colour and pattern colour; lan.rs::mob_meta packs it for sync
TropicalFish.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta packed variant entry
TropicalFish.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant an unknown pattern is a kob
TropicalFish.setPattern inline crates/horizon-client/src/entity_nbt.rs::load_bucket_data only reached from the bucket's pattern component
TropicalFish.setBaseColor inline crates/horizon-client/src/entity_nbt.rs::load_bucket_data only reached from the bucket's base colour component
TropicalFish.setPatternColor inline crates/horizon-client/src/entity_nbt.rs::load_bucket_data only reached from the bucket's pattern colour component
TropicalFish.get inline crates/horizon-client/src/entity_nbt.rs::bucket_components pattern and both colours go onto the bucket
TropicalFish.applyImplicitComponents port crates/horizon-client/src/entity_nbt.rs::load_bucket_data pattern and colours from the bucket
TropicalFish.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize one in ten is a lone random fish, else a shared common variant
TropicalFish.checkTropicalFishSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules water below and above, and any height biomes or the surface rule
TropicalFish.Pattern.addToTooltip missing player: a tropical fish bucket shows no pattern and colour lines in its tooltip
1 AbstractHorse.registerGoals port crates/horizon-client/src/mobs/equine.rs::register same goals and priorities; llamas and camels have their own register
2 AbstractHorse.addBehaviourGoals inline crates/horizon-client/src/mobs/equine.rs::register float, mount panic and tempt come after the rest; none for a skeleton horse, no panic for a zombie horse
3 AbstractHorse.getFlag skip:other bit accessor of the synched flags; Horizon keeps tame, eating (flag) and standing (counter) as separate fields
4 AbstractHorse.setFlag skip:other bit accessor of the synched flags; the bits are packed for sync in lan.rs::mob_meta and read back in equine::set_flags
5 AbstractHorse.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot saddle needs an alive tamed adult; horses, zombie horses, skeleton horses and llamas allow every slot
6 AbstractHorse.equipBodyArmor inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: minor: right click armours only a tamed Horse, a tamed zombie horse needs the inventory screen
7 AbstractHorse.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip body and saddle of a tamed mount
8 AbstractHorse.modifyTemper inline crates/horizon-client/src/game/mounts.rs::Game::feed_mount temper raised by the food, clamped to the maximum; a buck adds 5 in equine.rs RunAroundLikeCrazy::tick
9 AbstractHorse.eating inline crates/horizon-client/src/game/mounts.rs::Game::feed_mount gap: minor: the mouth stays open 3 ticks instead of 30; a foal uses the adult eat sound
10 AbstractHorse.causeFallDamage inline crates/horizon-client/src/mobs/living.rs::Mob::cause_fall_damage gap: player: a landing horse makes no thud (entity.horse.land) and its rider takes no fall damage (position_rider zeroes the rider's fall distance); the mount's own damage uses its safe distance of 6
11 AbstractHorse.createInventory skip:java resizes a SimpleContainer; Horizon sizes the chest items when the menu opens
12 AbstractHorse.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound saddle slot plays entity.horse.saddle
13 AbstractHorse.hurtServer missing player: a hurt horse never rears up (vanilla: one hit in three makes it stand for a second)
14 AbstractHorse.playStepSound inline crates/horizon-client/src/mobs/ai.rs::step_sound gap: player: horses play the block's own step sound at 15%, never entity.horse.step, step_wood, step_baby or the gallop of a ridden horse; snow above the block is not used either
15 AbstractHorse.isWoodSoundType missing minor: part of playStepSound, horses on wood use the block's wood step instead of horse.step_wood
16 AbstractHorse.fedFood port crates/horizon-client/src/game/mounts.rs::Game::feed_mount handleEating and consuming one item; llamas use llamas.rs feed_llama
17 AbstractHorse.doPlayerRide inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount clears eating and standing, turns the player to the mount and mounts; the block at the end of interact_mount
18 AbstractHorse.isImmobile missing player: a grazing or rearing horse is not held still, goals and strolling keep running while its head is down or it is up on its hind legs
19 AbstractHorse.dropEquipment inline crates/horizon-client/src/mobs/drops.rs::die the equine branch drops the inventory items and a donkey's or mule's chest
20 AbstractHorse.followMommy missing minor: no Bred flag, so a bred foal is not pulled to its mother from 16 blocks; the FollowParent goal covers 8
21 AbstractHorse.openMouth inline crates/horizon-client/src/game/mounts.rs::Game::feed_mount gap: minor: sets the mouth animation to 1 once, it closes after 3 ticks; the mouth flag is not synced to a remote client
22 AbstractHorse.setStanding inline crates/horizon-client/src/mobs/equine.rs::make_mad the 20 tick rear; RandomStand::start and the jump in tick_mount_riding set the same counter
23 AbstractHorse.standIfPossible inline crates/horizon-client/src/mobs/equine.rs::make_mad rears only species that can; the hurt caller is missing (see hurtServer)
24 AbstractHorse.tickRidden port crates/horizon-client/src/mobs/equine.rs::ridden_step yaw and half the pitch follow the rider; no gallop counter (see playStepSound)
25 AbstractHorse.addPassenger inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: minor: the rider's yaw is snapped to the mount's on mounting, the pitch is not
26 AbstractHorse.getRiddenInput port crates/horizon-client/src/mobs/equine.rs::ridden_step gap: player: no allowStandSliding, so a horse that lands from a small hop while still rearing ignores the keys until the rear ends
27 AbstractHorse.executeRidersJump port crates/horizon-client/src/mobs/equine.rs::ridden_step gap: minor: the impulse is jump strength times the bar only, no honey block factor and no Jump Boost
28 AbstractHorse.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: Tame, Temper and Owner are read; EatingHaystack and Bred are not
29 AbstractHorse.setOffspringAttribute port crates/horizon-client/src/mobs/equine.rs::inherit max health, jump strength and speed from both parents
30 AbstractHorse.onPlayerJump inline crates/horizon-client/src/game/mounts.rs::Game::tick_mount_riding gap: minor: the rear and the jump sound; donkeys and mules play the horse jump sound
31 AbstractHorse.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst events 7 and 6: hearts and smoke around the mount
32 AbstractHorse.positionRider port crates/horizon-client/src/game/mounts.rs::Game::position_rider gap: minor: the rider's body yaw is not copied from the mount
33 AbstractHorse.generateMaxHealth port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse_health
34 AbstractHorse.generateJumpStrength port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse_jump
35 AbstractHorse.generateSpeed port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse_speed
36 AbstractHorse.getSlot missing minor: /item cannot reach the mount slots horse.0 to horse.14
37 AbstractHorse.getControllingPassenger port crates/horizon-client/src/mobs/equine.rs::controlled gap: player: a tamed skeleton horse obeys its rider without a saddle
38 AbstractHorse.getDismountLocationInDirection inline crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: minor: no climb up to 0.75 above the mount and no pose boxes, only block checks beside the mount
39 AbstractHorse.getDismountLocationForPassenger port crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: minor: tries both sides by the mount's yaw then on top, not by the rider's main arm
40 AbstractHorse.getPassengerAttachmentPoint inline crates/horizon-client/src/game/mounts.rs::Game::position_rider gap: player: the rider does not slide back and up when the horse rears; the seat is a fixed point per species
41 Donkey.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: player: only Horse, Donkey and llamas get the tame, full health, not ridden rules, so two tame mules in love also breed (a mule never mates in vanilla)
42 Donkey.getBreedOffspring inline crates/horizon-client/src/game/creatures.rs::Game::breed donkey with horse gives a mule, donkey with donkey a donkey; attributes from both parents
43 Horse.randomizeAttributes port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse health, speed and jump strength
44 Horse.setVariantAndMarkings inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize coat and markings drawn at spawn; breeding mixes them in creatures.rs Game::breed
45 Horse.setVariant missing minor: only reached by the horse/variant item component, which Horizon does not read
46 Horse.get missing minor: the horse/variant component is never reported
47 Horse.applyImplicitComponent missing minor: a horse/variant component on a spawn egg or item is ignored
48 Horse.playGallopSound missing player: a ridden horse never plays the gallop and the now and then breathing sound
49 Horse.mobInteract inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: player: an untamed horse with a non-food item in hand is mounted instead of rearing angrily, a full health tame horse with food in hand is mounted instead of ignoring the click, and a golden dandelion on a foal does nothing
50 Horse.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use horse or donkey partner, both tame, adult, not ridden and at full health
51 Horse.hurtArmor missing player: horse armour never loses durability when the horse is hurt (the body item is only an id)
52 Horse.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize random coat and markings, the herd shares the coat
53 Llama.setStrength inline crates/horizon-client/src/mobs/llama.rs::from_nbt strength kept in variant2 and clamped to 1 to 5 where it is set (from_nbt, offspring, apply_offspring)
54 Llama.setRandomStrength inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize one in 25 llamas rolls up to 5, else up to 3
55 Llama.addAdditionalSaveData port crates/horizon-client/src/mobs/llama.rs::to_nbt Variant and Strength
56 Llama.readAdditionalSaveData port crates/horizon-client/src/mobs/llama.rs::from_nbt
57 Llama.registerGoals port crates/horizon-client/src/mobs/llama.rs::register goals and targets as vanilla, path length 40
58 Llama.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta strength and variant entries
59 Llama.get missing minor: the llama/variant component is never reported
60 Llama.applyImplicitComponent missing minor: a llama/variant component on an item is ignored
61 Llama.playChestEquipsSound inline crates/horizon-client/src/game/llamas.rs::Game::interact_llama entity.llama.chest when a chest is added
62 Llama.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use any llama or trader llama, both tame, adult, not ridden and at full health
63 Llama.causeFallDamage inline crates/horizon-client/src/mobs/living.rs::Mob::cause_fall_damage gap: player: the rider of a llama takes no fall damage; the llama's own damage uses its safe distance of 6
64 Llama.leaveCaravan inline crates/horizon-client/src/mobs/caravan.rs::FollowCaravan::stop clears the caravan head
65 Llama.LlamaHurtByTargetGoal.canContinueToUse port crates/horizon-client/src/mobs/llama.rs::LlamaHurtBy::can_continue stops after a spit
66 Mule.playChestEquipsSound inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: minor: a mule uses the donkey's chest sound (entity.donkey.chest) instead of entity.mule.chest
67 SkeletonHorse.checkSkeletonHorseSpawnRules inline crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules spawner reasons need light or a light ignoring reason, otherwise the animal rules
68 SkeletonHorse.randomizeAttributes port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse jump strength only
69 SkeletonHorse.getSwimSound missing minor: a skeleton horse in water uses the generic swim sound, no skeleton_horse.swim, step_water or gallop_water
70 SkeletonHorse.playSwimSound missing minor: the swim volume rules for a skeleton horse are not applied
71 SkeletonHorse.playJumpSound missing minor: no skeleton_horse.jump_water in water; the horse jump sound plays on land
72 SkeletonHorse.aiStep inline crates/horizon-client/src/game/passengers.rs::Game::tick_skeleton_traps a trap horse that is not persistent is removed after 18000 ticks
73 SkeletonHorse.addAdditionalSaveData port crates/horizon-client/src/mobs/riders.rs::write_nbt SkeletonTrap and SkeletonTrapTime
74 SkeletonHorse.readAdditionalSaveData port crates/horizon-client/src/mobs/riders.rs::read_nbt
75 SkeletonHorse.setTrap inline crates/horizon-client/src/game/passengers.rs::Game::spring_skeleton_trap the trap flag is a plain bool polled every tick instead of adding and removing a goal; lightning.rs sets it
76 SkeletonTrapGoal.canUse inline crates/horizon-client/src/game/passengers.rs::Game::tick_skeleton_traps a living player within 10 blocks
77 SkeletonTrapGoal.tick port crates/horizon-client/src/game/passengers.rs::Game::spring_skeleton_trap lightning, a skeleton on the horse and three more horse and skeleton pairs
78 SkeletonTrapGoal.createHorse inline crates/horizon-client/src/game/passengers.rs::Game::spring_skeleton_trap tame, adult, invulnerable for 60 ticks, persistent
79 TraderLlama.makeNewLlama inline crates/horizon-client/src/mobs/llama.rs::apply_offspring the baby trader llama is persistent
80 TraderLlama.registerGoals port crates/horizon-client/src/mobs/llama.rs::register adds panic 2.0, the defend trader target and the zombie and illager targets
81 TraderLlama.canDespawn port crates/horizon-client/src/mobs/caravan.rs::trader_llama_tick despawn delay counts down unless tamed, led by something else, ridden, age locked or persistent
82 TraderLlama.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize an event spawn is an adult; a lone one gets no baby chance
83 ZombieHorse.randomizeAttributes port crates/horizon-client/src/mobs/finalize.rs::Ctx::horse jump strength and speed
84 ZombieHorse.generateZombieHorseJumpStrength inline crates/horizon-client/src/mobs/finalize.rs::Ctx::horse 0.5 plus three draws of 0.0667
85 ZombieHorse.generateZombieHorseSpeed inline crates/horizon-client/src/mobs/finalize.rs::Ctx::horse (9 plus three draws) over 42.16
86 ZombieHorse.addBehaviourGoals inline crates/horizon-client/src/mobs/equine.rs::register float and tempt with the zombie horse food, no mount panic
87 ZombieHorse.mobInteract inline crates/horizon-client/src/game/mounts.rs::Game::interact_mount gap: player: an untamed zombie horse with a non-food item in hand is mounted instead of rearing angrily, and food that is not eaten still mounts it
88 Cat.getSoundSet missing player: cats always use the classic adult sounds, so royal cats and kittens never get their own voices
89 Cat.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: variant, lying, relax and collar are sent, the sound variant entry is not
90 Cat.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt variant, sound_variant and CollarColor
91 Cat.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt
92 Cat.getAmbientSound inline crates/horizon-client/src/mobs/ai.rs::play_ambient gap: minor: purr when in love and the stray sound are used; a tame cat never plays the purreow variant
93 Cat.createAttributes skip:data attributes come from entity-types.json
94 Cat.handleLieDown inline crates/horizon-client/src/mobs/tame.rs::cat_ai_step gap: minor: purring and the amounts are ported; lying on top of a sleeping player (a 0.15 shift of the pose) is not tracked
95 Cat.updateLieDownAmount port crates/horizon-client/src/mobs/tame.rs::cat_amounts
96 Cat.updateRelaxStateOneAmount port crates/horizon-client/src/mobs/tame.rs::cat_amounts
97 Cat.canMate inline crates/horizon-client/src/mobs/goals.rs::Breed::can_use gap: minor: a sitting cat is refused as a mate, vanilla only needs both tame and in love
98 Cat.removeWhenFarAway missing minor: wild cats never despawn for distance (vanilla: untamed and older than 2400 ticks)
99 Cat.reassessTameGoals inline crates/horizon-client/src/mobs/tame.rs::register_cat the player avoidance goal is conditioned on being untamed instead of added and removed
100 Cat.tryToTame inline crates/horizon-client/src/game/creatures.rs::Game::interact_mob one chance in three, then tame, sitting, event 7 or 6 and the advancement trigger
101 Cat.CatAvoidEntityGoal.canContinueToUse inline crates/horizon-client/src/mobs/goals.rs::AvoidEntity::can_continue gap: minor: a cat tamed mid flight finishes its escape path, the untamed check is only in can_use
102 Cat.CatRelaxOnOwnerGoal.spaceIsOccupied port crates/horizon-client/src/mobs/tame.rs::CatRelaxOnOwner::occupied another lying or relaxing cat within 2 blocks of the spot
103 Cat.CatRelaxOnOwnerGoal.canContinueToUse port crates/horizon-client/src/mobs/tame.rs::CatRelaxOnOwner::can_continue tame, not sitting, owner still asleep and the spot free
104 Cat.CatTemptGoal.canScare missing player: a cat lured with fish is scared by every move or look of the player; vanilla lets a randomly picked player (re-rolled every 500 to 600 ticks) approach without scaring it
105 CatVariants.bootstrap skip:data variant registry bootstrap; Horizon reads cat variants from data
106 Ocelot.registerGoals missing player: an ocelot only panics, wanders and looks at players (the generic animal goals): it is not lured by fish, does not run from players, never stalks chickens or baby turtles and has no breed goal
107 Ocelot.customServerAiStep port crates/horizon-client/src/mobs/tame.rs::cat_anim crouch and sprint pose from the move speed, shared with cats; nothing sets those speeds for an ocelot yet
108 Ocelot.removeWhenFarAway missing minor: ocelots never despawn for distance (vanilla: not trusting and older than 2400 ticks)
109 Ocelot.createAttributes skip:data attributes come from entity-types.json
110 Ocelot.mobInteract missing player: raw fish never makes a wild ocelot trust the player (no one in three roll, no hearts or smoke); it only puts the ocelot in love mode
111 Ocelot.handleEntityEvent port crates/horizon-client/src/particles.rs::entity_event_burst events 41 and 40: hearts and smoke; nothing sends them without the trust roll
112 Ocelot.reassessTrustingGoals missing player: no player avoidance goal, so wild ocelots never run from the player
113 Ocelot.checkSpawnObstruction port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_obstruction unobstructed, no liquid, at or above sea level on grass or leaves
114 Ocelot.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize baby chance 1.0 for a group
115 Ocelot.getLeashOffset missing minor: the lead ties at full eye height instead of half of it (leash::leash_offset only special-cases llamas)
116 Ocelot.OcelotAvoidEntityGoal.canUse missing player: see reassessTrustingGoals, no avoidance goal exists
117 Ocelot.OcelotAvoidEntityGoal.canContinueToUse missing minor: see reassessTrustingGoals, no avoidance goal exists
118 Ocelot.OcelotTemptGoal.canScare missing minor: see registerGoals, an ocelot has no tempt goal
119 AbstractFish.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register panic, player avoidance and random swimming; gap: player: creative players do not scare fish (the avoid goal skips them, vanilla only skips spectators)
120 AbstractFish.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob a water bucket scoops the fish with its bucket data
121 AbstractFish.FishSwimGoal.canUse inline crates/horizon-client/src/mobs/aquatic.rs::register Stroll::swimming(1.0, 40) is the random swim goal; fish never follow a leader so it always applies
122 AbstractSchoolingFish.registerGoals missing player: no follow the flock leader goal, so cod, salmon and tropical fish spawn in groups but swim about alone instead of schooling
123 AbstractSchoolingFish.isFollower missing minor: part of the missing schooling; the leader id is kept at spawn but never read
124 AbstractSchoolingFish.canBeFollowed missing minor: part of the missing schooling
125 AbstractSchoolingFish.tick missing minor: part of the missing schooling (school size reset when alone)
126 AbstractSchoolingFish.inRangeOfLeader missing minor: part of the missing schooling
127 AbstractSchoolingFish.pathToLeader missing minor: part of the missing schooling
128 AbstractSchoolingFish.addFollowers missing minor: part of the missing schooling
129 AbstractSchoolingFish.finalizeSpawn inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: the group shares a leader id and variant, but followers never use it to follow the leader
130 Pufferfish.readAdditionalSaveData missing minor: PuffState is not read or written, a reloaded pufferfish starts deflated
131 Pufferfish.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register the puff goal at priority 1
132 Pufferfish.touch missing minor: only the player is stung (inside ai_step); other mobs touching a puffed fish are not hurt or poisoned
133 Salmon.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta size entry, small 0 to large 2
134 Salmon.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant the type tag, medium by default
135 Salmon.get inline crates/horizon-client/src/entity_nbt.rs::bucket_components the size component goes onto the bucket
136 Salmon.applyImplicitComponent port crates/horizon-client/src/entity_nbt.rs::load_bucket_data size from the bucket
137 Salmon.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize weighted size: small 30, medium 50, large 15
138 TropicalFish.packVariant inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt packed pattern, base colour and pattern colour; lan.rs::mob_meta packs it for sync
139 TropicalFish.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta packed variant entry
140 TropicalFish.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant an unknown pattern is a kob
141 TropicalFish.setPattern inline crates/horizon-client/src/entity_nbt.rs::load_bucket_data only reached from the bucket's pattern component
142 TropicalFish.setBaseColor inline crates/horizon-client/src/entity_nbt.rs::load_bucket_data only reached from the bucket's base colour component
143 TropicalFish.setPatternColor inline crates/horizon-client/src/entity_nbt.rs::load_bucket_data only reached from the bucket's pattern colour component
144 TropicalFish.get inline crates/horizon-client/src/entity_nbt.rs::bucket_components pattern and both colours go onto the bucket
145 TropicalFish.applyImplicitComponents port crates/horizon-client/src/entity_nbt.rs::load_bucket_data pattern and colours from the bucket
146 TropicalFish.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize one in ten is a lone random fish, else a shared common variant
147 TropicalFish.checkTropicalFishSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules water below and above, and any height biomes or the surface rule
148 TropicalFish.Pattern.addToTooltip missing player: a tropical fish bucket shows no pattern and colour lines in its tooltip
+132
View File
@@ -0,0 +1,132 @@
Fox.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the type and the flags byte are synced; the two trusted-entity slots are not
Fox.canEat inline crates/horizon-client/src/mobs/fox.rs::ai_step held food (eats), no target, on the ground and awake, tested in the eating block of ai_step
Fox.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate gap: player: only Ctx::finalize (structure mobs, probe) calls it; natural spawns and eggs use spawning.rs::finalize, so a fresh fox never holds an emerald, egg, rabbit foot or the like in its mouth
Fox.handleEntityEvent missing player: no item crumbs at the mouth of a fox that is eating (event 45 is never broadcast or handled; only the sound plays)
Fox.createAttributes skip:data attributes come from entity-types.json
Fox.checkFoxSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules foxes_spawnable_on below and bright enough
Fox.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: live spawns (natural, spawner, summon) run spawning.rs::finalize, which has no fox arm beyond pick-up-loot: every spawned fox is red (no snow foxes in snowy biomes), no baby packs, no item in the mouth; Ctx::finalize is only reached by structure mobs and the probe
Fox.setTargetGoals port crates/horizon-client/src/mobs/fox.rs::register red and snow target orders as goals gated on the variant read when the goal runs
Fox.get missing minor: the fox/variant component is not reported (species_variant_component has no fox)
Fox.applyImplicitComponent missing minor: a fox/variant component on a spawn egg or item is ignored
Fox.getTrustedEntities missing player: foxes trust nobody, so a fox you bred still runs from you (the avoid-player goal has no trust test) and never defends you
Fox.addTrustedEntity missing player: foxes bred or hatched by a player never trust them (breeding does not pass the breeder on)
Fox.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: player: only Type is read; Trusted, Sleeping, Sitting and Crouching are dropped, so a reload wakes a sleeping fox and forgets trust
Fox.clearTrusted missing minor: trust is not modelled, so there is nothing to clear
Fox.getFlag port crates/horizon-client/src/mobs/fox.rs::flag flags byte in extra.ints[0]
Fox.canHoldItem missing player: part of the missing item pickup (a fox never reaches the point of choosing what to hold)
Fox.spitOutItem missing minor: the old item is never spat out with entity.fox.spit because pickup is missing
Fox.dropItemStack missing minor: the rest of a stack is never dropped by a fox because pickup is missing
Fox.pickUpItem missing player: foxes never pick up dropped items (food, emeralds, anything): the loot pickup of Mob.aiStep exists only for pandas (game/pandas.rs) and the fox search-for-items goal is absent
Fox.getHeadRollAngle port crates/horizon-client/src/mobs/fox.rs::pose head_roll_angle from the interested angle at the partial tick
Fox.setTarget missing minor: only clears the defending flag, which is never set
Fox.playAmbientSound missing player: no night screech at double volume (entity.fox.screech) when no player is near
Fox.getAmbientSound missing player: a sleeping fox makes no sleep sound and foxes never screech at night; the ambient is always entity.fox.ambient
Fox.getLeashOffset missing minor: a lead hangs at the default offset (eye height), not at 0.55 of it
Fox.FoxAlertableEntitiesSelector.test inline crates/horizon-client/src/mobs/fox.rs::alertable gap: minor: any other mob counts even when asleep or sneaking, and a trusted mob is not skipped (no trust)
Fox.FoxEatBerriesGoal.onReachedTarget inline crates/horizon-client/src/mobs/fox.rs::EatBerries::tick after 40 ticks at the bush, picks when mob griefing is on
Fox.FoxEatBerriesGoal.pickGlowBerry port crates/horizon-client/src/mobs/fox.rs::EatBerries::pick CaveVines.use: one glow berry, berries off, pick sound with 0.8 to 1.2 pitch
Fox.FoxEatBerriesGoal.pickSweetBerries port crates/horizon-client/src/mobs/fox.rs::EatBerries::pick 1 or 2 berries (+1 when fully grown), the first into the mouth when empty, age back to 1
Fox.FoxFollowParentGoal.canContinueToUse inline crates/horizon-client/src/mobs/fox.rs::Wrap::can_continue defending is never set, so only the follow-parent test remains
Fox.FoxLookAtPlayerGoal.canContinueToUse inline crates/horizon-client/src/mobs/fox.rs::Wrap::can_continue Wrap with the faceplanted or interested test on both can_use and can_continue
Fox.FoxMeleeAttackGoal.checkAndPerformAttack inline crates/horizon-client/src/mobs/goals.rs::MeleeAttack::tick gap: player: the generic melee strike runs; a fox bite plays no entity.fox.bite sound
Fox.FoxPanicGoal.shouldPanic inline crates/horizon-client/src/mobs/fox.rs::register Panic(2.2); the not-defending test is moot because defending is never set
Fox.FoxPounceGoal.canContinueToUse inline crates/horizon-client/src/mobs/fox.rs::Pounce::can_continue target alive, still in the air or tilted 15 degrees, not faceplanted
Fox.FoxStrollThroughVillageGoal.canFoxMove missing minor: the stroll-through-village goal is not ported (foxes never follow village streets); fox.rs::can_move is Fox.canMove, a different test
Frog.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta variant holder and tongue target id
Frog.getTongueTarget inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::tick gap: minor: the target lives in Frog.State; FrogLookControl.resetXRotOnTick has no frog case, so the head pitch is zeroed while the tongue is out
Frog.get port crates/horizon-client/src/mobs/finalize.rs::species_variant_component frog/variant component
Frog.applyImplicitComponent missing minor: a frog/variant component on a spawn egg or item is ignored
Frog.customServerAiStep port crates/horizon-client/src/mobs/frog.rs::server_ai_step the attackables sensor and memory timers; the activities run as goals
Frog.getBreedOffspring missing player: frogs never breed: they take slimeballs and show hearts, but no breed goal exists, so no frogspawn is ever laid by frogs
Frog.spawnChildFromBreeding missing player: frogs never become pregnant (IS_PREGNANT) and so never lay frogspawn; no breed goal means this is never reached, and the generic baby spawn would be wrong for frogs anyway
Frog.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome (live spawns set it in spawning.rs::finalize from biome.frog); the long jump cooldown it sets has no user
Frog.createAttributes skip:data attributes come from entity-types.json
Frog.checkFrogSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules frogs_spawnable_on below and bright enough
Frog.FrogNodeEvaluator.getStart missing minor: frogs use the plain ground navigation, so a frog in water does not start its path at the box corner
Frog.FrogNodeEvaluator.getPathType missing minor: blocks above #frog_prefer_jump_to (lily pad, dripleaf) are not treated as open path nodes
Frog.FrogPathNavigation.canCutCorner missing minor: no frog navigation, so water-border nodes allow cutting corners
Frog.FrogPathNavigation.createPathFinder missing player: frogs path as plain walkers (NavKind::Ground, no water malus 4 or trapdoor block); vanilla frogs use amphibious pathing with a shallow-water preference
FrogAi.initCoreActivity inline crates/horizon-client/src/mobs/frog.rs::register gap: minor: Panic runs at 1.25 where AnimalPanic uses 2.0; look and move sinks are the controls
FrogAi.initIdleActivity inline crates/horizon-client/src/mobs/frog.rs::register gap: player: Croak, stroll and look at player (6 blocks) are there; no slimeball tempt, no mate search and no TryFindLand
FrogAi.initSwimActivity inline crates/horizon-client/src/mobs/frog.rs::register gap: minor: no separate swim activity: Float and the land stroll stand in, no random swim at 0.75 or find-land
FrogAi.initLaySpawnActivity missing player: pregnant frogs never walk to water and lay frogspawn (no pregnancy, no TryLaySpawnOnFluidNearLand)
FrogAi.initJumpActivity missing player: frogs never long jump (no leap onto lily pads or big dripleaf)
FrogAi.initTongueActivity inline crates/horizon-client/src/mobs/frog.rs::register ShootTongue goal at priority 2 with the attack-target checks inside it
FrogAi.isAcceptableLandingSpot missing minor: landing test of the missing frog long jump
FrogVariants.bootstrap skip:data variant registry; the biome to variant choice is BiomeFacts.frog
FrogVariants.register skip:data registry registration
ShootTongue.checkExtraStartConditions inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_use path check with the unreachable memory, not croaking; the sensor only offers edible targets
ShootTongue.canStillUse inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_continue phase not done, no panic, target alive, 100 tick timeout
ShootTongue.eatEntity inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::tick CatchAnimation arm: frog eat sound at 2.0, then the frog's attack on the target
ShootTongue.canPathfindToTarget inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_use a path to the target that ends within 1.75 blocks
ShootTongue.addUnreachableTargetToMemory inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_use up to 5 ids kept 100 ticks in Frog.State.unreachable
Tadpole.customServerAiStep inline crates/horizon-client/src/mobs/aquatic.rs::register gap: player: panic and swim-around goals stand in for the brain; tadpoles do not follow a player holding a slimeball and do not look at players
Tadpole.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Age and AgeLocked
Tadpole.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt Age and AgeLocked
Tadpole.setAgeLockedData missing player: a golden dandelion on a tadpole does nothing (no age lock use anywhere in the game)
Tadpole.saveToBucketTag port crates/horizon-client/src/entity_nbt.rs::bucket_data Age and AgeLocked for axolotls and tadpoles
Tadpole.loadFromBucketTag port crates/horizon-client/src/entity_nbt.rs::load_bucket_data Age and AgeLocked
Tadpole.ageUp inline crates/horizon-client/src/mobs/aquatic.rs::ai_step gap: player: at 24000 the frog is spawned fresh with yaw and persistence only (SpawnSetup), so a named, silenced or glowing tadpole turns into a plain frog; the grow-up sound is 1.0 loud, not 0.15
TadpoleAi.initCoreActivity inline crates/horizon-client/src/mobs/aquatic.rs::register panic at 2.0 as a goal
TadpoleAi.initIdleActivity inline crates/horizon-client/src/mobs/aquatic.rs::register gap: player: swims around with speed 1.0 every 40 ticks (vanilla 0.5); no look at player, no slimeball tempt
Goat.createHorn missing player: a horn dropped by a ramming goat is always the default ponder horn (no random instrument from the goat's uuid, regular or screaming set) and drops with a flat upward push
Goat.createAttributes skip:data attributes come from entity-types.json
Goat.ageBoundaryReached port crates/horizon-client/src/mobs/finalize.rs::age_boundary_reached attack damage 1 for a baby, 2 for an adult
Goat.getBreedOffspring missing player: a baby goat is never screaming (not inherited from a parent, no 2 percent roll on the breeding path) and starts with no ram or long jump cooldown
Goat.customServerAiStep inline crates/horizon-client/src/mobs/ai.rs::generic goals stand in for the brain: Float, Panic 2.0, Breed, Tempt, FollowParent, stroll and look (ai.rs generic) and the ram goal (goat.rs); the ram cooldown counts down in goat.rs::tick
Goat.setYHeadRot missing minor: the head is not clamped to 15 degrees of the body on every set; only walking and body turning limit it (control.rs)
Goat.playEatingSound port crates/horizon-client/src/mobs/ai.rs::eating_sound screaming or normal eat sound at 0.8 to 1.2 pitch
Goat.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: live spawns use spawning.rs::finalize, which has no goat arm: no screaming goats (2 percent), no one-horned goats (10 percent), and no starting ram cooldown, so a fresh goat can ram at once; Ctx::finalize only runs for structure mobs and the probe
Goat.getDefaultDimensions port crates/horizon-client/src/mobs/living.rs::Mob::dims baby box (0.45 x 0.65, eye 0.59375) from the species table; no long jump pose scale since there is no long jump
Goat.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt IsScreamingGoat, HasLeftHorn, HasRightHorn
Goat.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt IsScreamingGoat and both horn flags (default true)
Goat.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the two horn flags are synced; the screaming flag is not
Goat.checkGoatSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules goats_spawnable_on below and bright enough
GoatAi.initMemories port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: the long jump (600 to 1200) and ram (600 to 6000) cooldowns are only set by Ctx::finalize (structure mobs, probe); live spawns and babies start at zero, so goats ram right after spawning
GoatAi.initCoreActivity inline crates/horizon-client/src/mobs/ai.rs::generic Float (swim), Panic 2.0 and the cooldown count in goat.rs::tick
GoatAi.initIdleActivity inline crates/horizon-client/src/mobs/ai.rs::generic Breed, Tempt 1.25 with goat_food, FollowParent 1.25, stroll, look at player 6; no walk-to-look-target or do-nothing options
GoatAi.initLongJumpActivity missing player: goats never long jump between ledges (no crouch and leap)
GoatAi.initRamActivity port crates/horizon-client/src/mobs/goat.rs::register the Ram goal: prepare four to seven blocks away, wait 20 ticks head down, charge, knock back or break a horn
CopperGolem.createAttributes skip:data attributes come from entity-types.json
CopperGolem.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta weather state and golem state
CopperGolem.canTurnToStatue inline crates/horizon-client/src/mobs/copper_golem.rs::update_weathering oxidized, standing in air, 0.0058 chance per tick on the level random
CopperGolem.playHeadSpinSound port crates/horizon-client/src/mobs/copper_golem.rs::ai_step gap: minor: local spin sound by oxidation level, but a silent golem still plays it
CopperGolem.getLeashOffset missing minor: a lead hangs at the default offset, not 0.75 of the eye height with no forward shift
CopperGolemAi.initCoreActivity port crates/horizon-client/src/mobs/animal_brain.rs::copper_golem_package gap: player: panic 1.5, look sink, move sink and the two countdowns are there; InteractWithDoor is not, so a golem's path through a closed wooden door ends at the door
CopperGolemAi.initIdleActivity port crates/horizon-client/src/mobs/animal_brain.rs::copper_golem_package transport between chests, look at player, then stroll (2 blocks) or do nothing while the transport cooldown runs
CopperGolemAi.getTargetReachedInteractions inline crates/horizon-client/src/mobs/transport_items.rs::reached_interaction pickup, pickup nothing, place, place nothing from what the chest holds and what the golem carries
CopperGolemAi.onReachedTargetInteraction inline crates/horizon-client/src/mobs/transport_items.rs::Transport::on_reached tick 1 opens the chest and sets the state, tick 9 plays the sound, tick 60 closes it
IronGolem.registerGoals port crates/horizon-client/src/mobs/golem.rs::register_iron gap: player: no MoveBackToVillageGoal and no village-bound stroll (plain stroll 0.6), so golems wander off from their village; no ResetUniversalAngerTargetGoal
IronGolem.createAttributes skip:data attributes come from entity-types.json
IronGolem.doPush missing minor: a hostile mob that bumps the golem is not picked as its target one time in 20 (the golem still finds enemies by its nearest-target goal)
IronGolem.canSpawnSprintParticle missing player: a walking iron golem kicks up no dust of the block under its feet (sprint dust is drawn for players only, client_ambient.rs)
IronGolem.canAttack missing player: a golem the player built can still attack the player after being hit (player-created is not tracked)
IronGolem.addAdditionalSaveData missing minor: PlayerCreated and the persistent anger are not written from the live mob
IronGolem.readAdditionalSaveData missing minor: PlayerCreated and the persistent anger are not read
IronGolem.hurtServer missing player: no entity.iron_golem.damage crack sound when damage moves the golem to a new crackiness level (the crack texture does change, mobs/golem.rs::crackiness)
IronGolem.isPlayerCreated missing player: the player-created flag does not exist, so every golem acts like a village golem toward the player
IronGolem.setPlayerCreated missing player: building a golem from iron blocks does not mark it player-created (game/golems.rs create_triggered)
IronGolem.getLeashOffset missing minor: a lead hangs at the default offset, not 0.875 of the eye height
SnowGolem.registerGoals port crates/horizon-client/src/mobs/golem.rs::register_snow gap: minor: stroll uses the 0.001 water-avoiding probability, vanilla 1.0000001E-5
SnowGolem.shear port crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob shear sound, pumpkin off, shearing loot table at eye height
SnowGolem.hasPumpkin inline crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob extra.sheared is the inverse; synced as DATA_PUMPKIN_ID in lan.rs and remote_mob_data.rs
SnowGolem.setPumpkin inline crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob sets extra.sheared (shears, dispenser); nothing puts a pumpkin back, as in vanilla
SnowGolem.getLeashOffset missing minor: a lead hangs at the default offset, not 0.75 of the eye height
HappyGhast.setServerStillTimeout inline crates/horizon-client/src/mobs/happy_ghast.rs::still_tick gap: minor: the timeout is extra.counter (10 when a player stands on top, 10 on dismount, 0 on boarding); the one-off position sync to tracking players is not sent, lan.rs only marks the entity precise
HappyGhast.registerGoals port crates/horizon-client/src/mobs/happy_ghast.rs::setup adult goals: float, tempt (harness and food for a bare adult, food otherwise), float around within 16
HappyGhast.adultGhastSetup port crates/horizon-client/src/mobs/happy_ghast.rs::setup adult half: ghast move control, happy ghast look control, goals, brain stopped
HappyGhast.babyGhastSetup port crates/horizon-client/src/mobs/happy_ghast.rs::setup baby half: flying move control, baby flying navigation, no goals, timeout cleared
HappyGhast.ageBoundaryReached port crates/horizon-client/src/mobs/happy_ghast.rs::ensure_setup reruns setup when the age sign changes
HappyGhast.createAttributes skip:data attributes come from entity-types.json
HappyGhast.getAmbientSoundInterval port crates/horizon-client/src/mobs.rs::Mob::ambient_interval six times as long while it carries a rider
HappyGhast.canUseSlot inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast a harness goes only on a living adult without one; shears take it off
HappyGhast.addPassenger inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast gap: minor: goggles-down sound for the first rider and the still timeout reset; only one rider fits (vanilla four) and the timeout is always 0
HappyGhast.getControllingPassenger port crates/horizon-client/src/mobs/happy_ghast.rs::controlled gap: minor: harnessed adult with a rider; the not-on-still-timeout test is missing
HappyGhast.tickRidden port crates/horizon-client/src/mobs/happy_ghast.rs::ridden turns 8 percent toward the rider's yaw, pitch half of theirs, head and body follow
HappyGhast.getHappyGhastRestrictionRadius port crates/horizon-client/src/mobs/happy_ghast.rs::restriction_radius 64 for a bare adult, 32 otherwise
HappyGhast.checkRestriction inline crates/horizon-client/src/mobs/happy_ghast.rs::ai_step home set to the block when unleashed and unridden and stale or the radius changed
HappyGhast.continuousHeal inline crates/horizon-client/src/mobs/happy_ghast.rs::ai_step gap: minor: one point every 600 ticks, every 20 in precipitation; the in-clouds fast heal is missing
HappyGhast.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: STAYS_STILL is synced; IS_LEASH_HOLDER is not tracked (no leashHolderTime), so the harness rope layer is never drawn
HappyGhast.syncStayStillFlag port crates/horizon-client/src/game/lan.rs::mob_meta STAYS_STILL shown while the timeout is above zero (on_still_timeout)
HappyGhastAi.initCoreActivity port crates/horizon-client/src/mobs/animal_brain.rs::ghastling_package swim, flying panic 2.0, look sink, move sink and the tempt cooldown countdown
HappyGhastAi.initIdleActivity port crates/horizon-client/src/mobs/animal_brain.rs::ghastling_package tempt with look in the eyes, follow a player, follow an adult, then fly stroll or walk to the look target
1 Fox.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the type and the flags byte are synced; the two trusted-entity slots are not
2 Fox.canEat inline crates/horizon-client/src/mobs/fox.rs::ai_step held food (eats), no target, on the ground and awake, tested in the eating block of ai_step
3 Fox.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate gap: player: only Ctx::finalize (structure mobs, probe) calls it; natural spawns and eggs use spawning.rs::finalize, so a fresh fox never holds an emerald, egg, rabbit foot or the like in its mouth
4 Fox.handleEntityEvent missing player: no item crumbs at the mouth of a fox that is eating (event 45 is never broadcast or handled; only the sound plays)
5 Fox.createAttributes skip:data attributes come from entity-types.json
6 Fox.checkFoxSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules foxes_spawnable_on below and bright enough
7 Fox.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: live spawns (natural, spawner, summon) run spawning.rs::finalize, which has no fox arm beyond pick-up-loot: every spawned fox is red (no snow foxes in snowy biomes), no baby packs, no item in the mouth; Ctx::finalize is only reached by structure mobs and the probe
8 Fox.setTargetGoals port crates/horizon-client/src/mobs/fox.rs::register red and snow target orders as goals gated on the variant read when the goal runs
9 Fox.get missing minor: the fox/variant component is not reported (species_variant_component has no fox)
10 Fox.applyImplicitComponent missing minor: a fox/variant component on a spawn egg or item is ignored
11 Fox.getTrustedEntities missing player: foxes trust nobody, so a fox you bred still runs from you (the avoid-player goal has no trust test) and never defends you
12 Fox.addTrustedEntity missing player: foxes bred or hatched by a player never trust them (breeding does not pass the breeder on)
13 Fox.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: player: only Type is read; Trusted, Sleeping, Sitting and Crouching are dropped, so a reload wakes a sleeping fox and forgets trust
14 Fox.clearTrusted missing minor: trust is not modelled, so there is nothing to clear
15 Fox.getFlag port crates/horizon-client/src/mobs/fox.rs::flag flags byte in extra.ints[0]
16 Fox.canHoldItem missing player: part of the missing item pickup (a fox never reaches the point of choosing what to hold)
17 Fox.spitOutItem missing minor: the old item is never spat out with entity.fox.spit because pickup is missing
18 Fox.dropItemStack missing minor: the rest of a stack is never dropped by a fox because pickup is missing
19 Fox.pickUpItem missing player: foxes never pick up dropped items (food, emeralds, anything): the loot pickup of Mob.aiStep exists only for pandas (game/pandas.rs) and the fox search-for-items goal is absent
20 Fox.getHeadRollAngle port crates/horizon-client/src/mobs/fox.rs::pose head_roll_angle from the interested angle at the partial tick
21 Fox.setTarget missing minor: only clears the defending flag, which is never set
22 Fox.playAmbientSound missing player: no night screech at double volume (entity.fox.screech) when no player is near
23 Fox.getAmbientSound missing player: a sleeping fox makes no sleep sound and foxes never screech at night; the ambient is always entity.fox.ambient
24 Fox.getLeashOffset missing minor: a lead hangs at the default offset (eye height), not at 0.55 of it
25 Fox.FoxAlertableEntitiesSelector.test inline crates/horizon-client/src/mobs/fox.rs::alertable gap: minor: any other mob counts even when asleep or sneaking, and a trusted mob is not skipped (no trust)
26 Fox.FoxEatBerriesGoal.onReachedTarget inline crates/horizon-client/src/mobs/fox.rs::EatBerries::tick after 40 ticks at the bush, picks when mob griefing is on
27 Fox.FoxEatBerriesGoal.pickGlowBerry port crates/horizon-client/src/mobs/fox.rs::EatBerries::pick CaveVines.use: one glow berry, berries off, pick sound with 0.8 to 1.2 pitch
28 Fox.FoxEatBerriesGoal.pickSweetBerries port crates/horizon-client/src/mobs/fox.rs::EatBerries::pick 1 or 2 berries (+1 when fully grown), the first into the mouth when empty, age back to 1
29 Fox.FoxFollowParentGoal.canContinueToUse inline crates/horizon-client/src/mobs/fox.rs::Wrap::can_continue defending is never set, so only the follow-parent test remains
30 Fox.FoxLookAtPlayerGoal.canContinueToUse inline crates/horizon-client/src/mobs/fox.rs::Wrap::can_continue Wrap with the faceplanted or interested test on both can_use and can_continue
31 Fox.FoxMeleeAttackGoal.checkAndPerformAttack inline crates/horizon-client/src/mobs/goals.rs::MeleeAttack::tick gap: player: the generic melee strike runs; a fox bite plays no entity.fox.bite sound
32 Fox.FoxPanicGoal.shouldPanic inline crates/horizon-client/src/mobs/fox.rs::register Panic(2.2); the not-defending test is moot because defending is never set
33 Fox.FoxPounceGoal.canContinueToUse inline crates/horizon-client/src/mobs/fox.rs::Pounce::can_continue target alive, still in the air or tilted 15 degrees, not faceplanted
34 Fox.FoxStrollThroughVillageGoal.canFoxMove missing minor: the stroll-through-village goal is not ported (foxes never follow village streets); fox.rs::can_move is Fox.canMove, a different test
35 Frog.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta variant holder and tongue target id
36 Frog.getTongueTarget inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::tick gap: minor: the target lives in Frog.State; FrogLookControl.resetXRotOnTick has no frog case, so the head pitch is zeroed while the tongue is out
37 Frog.get port crates/horizon-client/src/mobs/finalize.rs::species_variant_component frog/variant component
38 Frog.applyImplicitComponent missing minor: a frog/variant component on a spawn egg or item is ignored
39 Frog.customServerAiStep port crates/horizon-client/src/mobs/frog.rs::server_ai_step the attackables sensor and memory timers; the activities run as goals
40 Frog.getBreedOffspring missing player: frogs never breed: they take slimeballs and show hearts, but no breed goal exists, so no frogspawn is ever laid by frogs
41 Frog.spawnChildFromBreeding missing player: frogs never become pregnant (IS_PREGNANT) and so never lay frogspawn; no breed goal means this is never reached, and the generic baby spawn would be wrong for frogs anyway
42 Frog.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome (live spawns set it in spawning.rs::finalize from biome.frog); the long jump cooldown it sets has no user
43 Frog.createAttributes skip:data attributes come from entity-types.json
44 Frog.checkFrogSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules frogs_spawnable_on below and bright enough
45 Frog.FrogNodeEvaluator.getStart missing minor: frogs use the plain ground navigation, so a frog in water does not start its path at the box corner
46 Frog.FrogNodeEvaluator.getPathType missing minor: blocks above #frog_prefer_jump_to (lily pad, dripleaf) are not treated as open path nodes
47 Frog.FrogPathNavigation.canCutCorner missing minor: no frog navigation, so water-border nodes allow cutting corners
48 Frog.FrogPathNavigation.createPathFinder missing player: frogs path as plain walkers (NavKind::Ground, no water malus 4 or trapdoor block); vanilla frogs use amphibious pathing with a shallow-water preference
49 FrogAi.initCoreActivity inline crates/horizon-client/src/mobs/frog.rs::register gap: minor: Panic runs at 1.25 where AnimalPanic uses 2.0; look and move sinks are the controls
50 FrogAi.initIdleActivity inline crates/horizon-client/src/mobs/frog.rs::register gap: player: Croak, stroll and look at player (6 blocks) are there; no slimeball tempt, no mate search and no TryFindLand
51 FrogAi.initSwimActivity inline crates/horizon-client/src/mobs/frog.rs::register gap: minor: no separate swim activity: Float and the land stroll stand in, no random swim at 0.75 or find-land
52 FrogAi.initLaySpawnActivity missing player: pregnant frogs never walk to water and lay frogspawn (no pregnancy, no TryLaySpawnOnFluidNearLand)
53 FrogAi.initJumpActivity missing player: frogs never long jump (no leap onto lily pads or big dripleaf)
54 FrogAi.initTongueActivity inline crates/horizon-client/src/mobs/frog.rs::register ShootTongue goal at priority 2 with the attack-target checks inside it
55 FrogAi.isAcceptableLandingSpot missing minor: landing test of the missing frog long jump
56 FrogVariants.bootstrap skip:data variant registry; the biome to variant choice is BiomeFacts.frog
57 FrogVariants.register skip:data registry registration
58 ShootTongue.checkExtraStartConditions inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_use path check with the unreachable memory, not croaking; the sensor only offers edible targets
59 ShootTongue.canStillUse inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_continue phase not done, no panic, target alive, 100 tick timeout
60 ShootTongue.eatEntity inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::tick CatchAnimation arm: frog eat sound at 2.0, then the frog's attack on the target
61 ShootTongue.canPathfindToTarget inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_use a path to the target that ends within 1.75 blocks
62 ShootTongue.addUnreachableTargetToMemory inline crates/horizon-client/src/mobs/frog.rs::ShootTongue::can_use up to 5 ids kept 100 ticks in Frog.State.unreachable
63 Tadpole.customServerAiStep inline crates/horizon-client/src/mobs/aquatic.rs::register gap: player: panic and swim-around goals stand in for the brain; tadpoles do not follow a player holding a slimeball and do not look at players
64 Tadpole.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Age and AgeLocked
65 Tadpole.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt Age and AgeLocked
66 Tadpole.setAgeLockedData missing player: a golden dandelion on a tadpole does nothing (no age lock use anywhere in the game)
67 Tadpole.saveToBucketTag port crates/horizon-client/src/entity_nbt.rs::bucket_data Age and AgeLocked for axolotls and tadpoles
68 Tadpole.loadFromBucketTag port crates/horizon-client/src/entity_nbt.rs::load_bucket_data Age and AgeLocked
69 Tadpole.ageUp inline crates/horizon-client/src/mobs/aquatic.rs::ai_step gap: player: at 24000 the frog is spawned fresh with yaw and persistence only (SpawnSetup), so a named, silenced or glowing tadpole turns into a plain frog; the grow-up sound is 1.0 loud, not 0.15
70 TadpoleAi.initCoreActivity inline crates/horizon-client/src/mobs/aquatic.rs::register panic at 2.0 as a goal
71 TadpoleAi.initIdleActivity inline crates/horizon-client/src/mobs/aquatic.rs::register gap: player: swims around with speed 1.0 every 40 ticks (vanilla 0.5); no look at player, no slimeball tempt
72 Goat.createHorn missing player: a horn dropped by a ramming goat is always the default ponder horn (no random instrument from the goat's uuid, regular or screaming set) and drops with a flat upward push
73 Goat.createAttributes skip:data attributes come from entity-types.json
74 Goat.ageBoundaryReached port crates/horizon-client/src/mobs/finalize.rs::age_boundary_reached attack damage 1 for a baby, 2 for an adult
75 Goat.getBreedOffspring missing player: a baby goat is never screaming (not inherited from a parent, no 2 percent roll on the breeding path) and starts with no ram or long jump cooldown
76 Goat.customServerAiStep inline crates/horizon-client/src/mobs/ai.rs::generic goals stand in for the brain: Float, Panic 2.0, Breed, Tempt, FollowParent, stroll and look (ai.rs generic) and the ram goal (goat.rs); the ram cooldown counts down in goat.rs::tick
77 Goat.setYHeadRot missing minor: the head is not clamped to 15 degrees of the body on every set; only walking and body turning limit it (control.rs)
78 Goat.playEatingSound port crates/horizon-client/src/mobs/ai.rs::eating_sound screaming or normal eat sound at 0.8 to 1.2 pitch
79 Goat.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: live spawns use spawning.rs::finalize, which has no goat arm: no screaming goats (2 percent), no one-horned goats (10 percent), and no starting ram cooldown, so a fresh goat can ram at once; Ctx::finalize only runs for structure mobs and the probe
80 Goat.getDefaultDimensions port crates/horizon-client/src/mobs/living.rs::Mob::dims baby box (0.45 x 0.65, eye 0.59375) from the species table; no long jump pose scale since there is no long jump
81 Goat.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt IsScreamingGoat, HasLeftHorn, HasRightHorn
82 Goat.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt IsScreamingGoat and both horn flags (default true)
83 Goat.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: the two horn flags are synced; the screaming flag is not
84 Goat.checkGoatSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules goats_spawnable_on below and bright enough
85 GoatAi.initMemories port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: the long jump (600 to 1200) and ram (600 to 6000) cooldowns are only set by Ctx::finalize (structure mobs, probe); live spawns and babies start at zero, so goats ram right after spawning
86 GoatAi.initCoreActivity inline crates/horizon-client/src/mobs/ai.rs::generic Float (swim), Panic 2.0 and the cooldown count in goat.rs::tick
87 GoatAi.initIdleActivity inline crates/horizon-client/src/mobs/ai.rs::generic Breed, Tempt 1.25 with goat_food, FollowParent 1.25, stroll, look at player 6; no walk-to-look-target or do-nothing options
88 GoatAi.initLongJumpActivity missing player: goats never long jump between ledges (no crouch and leap)
89 GoatAi.initRamActivity port crates/horizon-client/src/mobs/goat.rs::register the Ram goal: prepare four to seven blocks away, wait 20 ticks head down, charge, knock back or break a horn
90 CopperGolem.createAttributes skip:data attributes come from entity-types.json
91 CopperGolem.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta weather state and golem state
92 CopperGolem.canTurnToStatue inline crates/horizon-client/src/mobs/copper_golem.rs::update_weathering oxidized, standing in air, 0.0058 chance per tick on the level random
93 CopperGolem.playHeadSpinSound port crates/horizon-client/src/mobs/copper_golem.rs::ai_step gap: minor: local spin sound by oxidation level, but a silent golem still plays it
94 CopperGolem.getLeashOffset missing minor: a lead hangs at the default offset, not 0.75 of the eye height with no forward shift
95 CopperGolemAi.initCoreActivity port crates/horizon-client/src/mobs/animal_brain.rs::copper_golem_package gap: player: panic 1.5, look sink, move sink and the two countdowns are there; InteractWithDoor is not, so a golem's path through a closed wooden door ends at the door
96 CopperGolemAi.initIdleActivity port crates/horizon-client/src/mobs/animal_brain.rs::copper_golem_package transport between chests, look at player, then stroll (2 blocks) or do nothing while the transport cooldown runs
97 CopperGolemAi.getTargetReachedInteractions inline crates/horizon-client/src/mobs/transport_items.rs::reached_interaction pickup, pickup nothing, place, place nothing from what the chest holds and what the golem carries
98 CopperGolemAi.onReachedTargetInteraction inline crates/horizon-client/src/mobs/transport_items.rs::Transport::on_reached tick 1 opens the chest and sets the state, tick 9 plays the sound, tick 60 closes it
99 IronGolem.registerGoals port crates/horizon-client/src/mobs/golem.rs::register_iron gap: player: no MoveBackToVillageGoal and no village-bound stroll (plain stroll 0.6), so golems wander off from their village; no ResetUniversalAngerTargetGoal
100 IronGolem.createAttributes skip:data attributes come from entity-types.json
101 IronGolem.doPush missing minor: a hostile mob that bumps the golem is not picked as its target one time in 20 (the golem still finds enemies by its nearest-target goal)
102 IronGolem.canSpawnSprintParticle missing player: a walking iron golem kicks up no dust of the block under its feet (sprint dust is drawn for players only, client_ambient.rs)
103 IronGolem.canAttack missing player: a golem the player built can still attack the player after being hit (player-created is not tracked)
104 IronGolem.addAdditionalSaveData missing minor: PlayerCreated and the persistent anger are not written from the live mob
105 IronGolem.readAdditionalSaveData missing minor: PlayerCreated and the persistent anger are not read
106 IronGolem.hurtServer missing player: no entity.iron_golem.damage crack sound when damage moves the golem to a new crackiness level (the crack texture does change, mobs/golem.rs::crackiness)
107 IronGolem.isPlayerCreated missing player: the player-created flag does not exist, so every golem acts like a village golem toward the player
108 IronGolem.setPlayerCreated missing player: building a golem from iron blocks does not mark it player-created (game/golems.rs create_triggered)
109 IronGolem.getLeashOffset missing minor: a lead hangs at the default offset, not 0.875 of the eye height
110 SnowGolem.registerGoals port crates/horizon-client/src/mobs/golem.rs::register_snow gap: minor: stroll uses the 0.001 water-avoiding probability, vanilla 1.0000001E-5
111 SnowGolem.shear port crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob shear sound, pumpkin off, shearing loot table at eye height
112 SnowGolem.hasPumpkin inline crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob extra.sheared is the inverse; synced as DATA_PUMPKIN_ID in lan.rs and remote_mob_data.rs
113 SnowGolem.setPumpkin inline crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob sets extra.sheared (shears, dispenser); nothing puts a pumpkin back, as in vanilla
114 SnowGolem.getLeashOffset missing minor: a lead hangs at the default offset, not 0.75 of the eye height
115 HappyGhast.setServerStillTimeout inline crates/horizon-client/src/mobs/happy_ghast.rs::still_tick gap: minor: the timeout is extra.counter (10 when a player stands on top, 10 on dismount, 0 on boarding); the one-off position sync to tracking players is not sent, lan.rs only marks the entity precise
116 HappyGhast.registerGoals port crates/horizon-client/src/mobs/happy_ghast.rs::setup adult goals: float, tempt (harness and food for a bare adult, food otherwise), float around within 16
117 HappyGhast.adultGhastSetup port crates/horizon-client/src/mobs/happy_ghast.rs::setup adult half: ghast move control, happy ghast look control, goals, brain stopped
118 HappyGhast.babyGhastSetup port crates/horizon-client/src/mobs/happy_ghast.rs::setup baby half: flying move control, baby flying navigation, no goals, timeout cleared
119 HappyGhast.ageBoundaryReached port crates/horizon-client/src/mobs/happy_ghast.rs::ensure_setup reruns setup when the age sign changes
120 HappyGhast.createAttributes skip:data attributes come from entity-types.json
121 HappyGhast.getAmbientSoundInterval port crates/horizon-client/src/mobs.rs::Mob::ambient_interval six times as long while it carries a rider
122 HappyGhast.canUseSlot inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast a harness goes only on a living adult without one; shears take it off
123 HappyGhast.addPassenger inline crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast gap: minor: goggles-down sound for the first rider and the still timeout reset; only one rider fits (vanilla four) and the timeout is always 0
124 HappyGhast.getControllingPassenger port crates/horizon-client/src/mobs/happy_ghast.rs::controlled gap: minor: harnessed adult with a rider; the not-on-still-timeout test is missing
125 HappyGhast.tickRidden port crates/horizon-client/src/mobs/happy_ghast.rs::ridden turns 8 percent toward the rider's yaw, pitch half of theirs, head and body follow
126 HappyGhast.getHappyGhastRestrictionRadius port crates/horizon-client/src/mobs/happy_ghast.rs::restriction_radius 64 for a bare adult, 32 otherwise
127 HappyGhast.checkRestriction inline crates/horizon-client/src/mobs/happy_ghast.rs::ai_step home set to the block when unleashed and unridden and stale or the radius changed
128 HappyGhast.continuousHeal inline crates/horizon-client/src/mobs/happy_ghast.rs::ai_step gap: minor: one point every 600 ticks, every 20 in precipitation; the in-clouds fast heal is missing
129 HappyGhast.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: STAYS_STILL is synced; IS_LEASH_HOLDER is not tracked (no leashHolderTime), so the harness rope layer is never drawn
130 HappyGhast.syncStayStillFlag port crates/horizon-client/src/game/lan.rs::mob_meta STAYS_STILL shown while the timeout is above zero (on_still_timeout)
131 HappyGhastAi.initCoreActivity port crates/horizon-client/src/mobs/animal_brain.rs::ghastling_package swim, flying panic 2.0, look sink, move sink and the tempt cooldown countdown
132 HappyGhastAi.initIdleActivity port crates/horizon-client/src/mobs/animal_brain.rs::ghastling_package tempt with look in the eyes, follow a player, follow an adult, then fly stroll or walk to the look target
+147
View File
@@ -0,0 +1,147 @@
AbstractNautilus.createAttributes skip:data attributes come from the entity type table (MobType in mobs.rs)
AbstractNautilus.checkNautilusSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Nautilus arm: sea level minus 25 to minus 5, water below and above; only the nautilus has a placement (the zombie nautilus has none of its own)
AbstractNautilus.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot saddle and body slots need an alive, grown, tame nautilus
AbstractNautilus.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip body and saddle always, other slots only with pick_up_loot
AbstractNautilus.getControllingPassenger port crates/horizon-client/src/mobs/nautilus.rs::controlled a rider on a saddled nautilus
AbstractNautilus.getRiddenSpeed inline crates/horizon-client/src/mobs/nautilus.rs::ridden 0.0325 in water, 0.02 on land, times the movement speed
AbstractNautilus.doPlayerRide inline crates/horizon-client/src/game/nautili.rs::Game::interact_nautilus the player mounts it and a lead breaks; there is no home to clear
AbstractNautilus.getNautilusRestrictionRadius missing player: a tame nautilus is never kept near its home, so it wanders off instead of staying within 32 blocks (16 for a baby or a saddled one)
AbstractNautilus.checkRestriction missing player: no home is set for a tame nautilus (ai.home is only set by leads and happy ghasts), see getNautilusRestrictionRadius
AbstractNautilus.applyEffects inline crates/horizon-client/src/mobs/nautilus.rs::ai_step the rider gets breath of the nautilus for 60 ticks, refreshed every 40 ticks
AbstractNautilus.onPlayerJump inline crates/horizon-client/src/game/mounts.rs::Game::charge_mount_jump the charged jump scale (0.4 to 1.0) goes to the rider input; the dash itself waits for its cooldown in nautilus::ridden
AbstractNautilus.executeRidersJump port crates/horizon-client/src/mobs/nautilus.rs::dash gap: minor: the push leaves out getBlockSpeedFactor (soul sand, honey); 1.2 in water, 0.5 on land, 40 tick cooldown, dashing flag
AbstractNautilus.handleStartJump inline crates/horizon-client/src/mobs/nautilus.rs::ai_step the dash sound plays on the tick after the dash (scratch[1]); no game event
AbstractNautilus.onSyncedDataUpdated skip:other client mirror of the dash flag; the nautilus keeps its own dash clock (anim_ticks) and the jump bar uses mount.jump_ticks
AbstractNautilus.tryToTame inline crates/horizon-client/src/game/nautili.rs::Game::interact_nautilus one chance in three, taming particles (event 7 or 6), eating sound, tame_animal trigger
AbstractNautilus.hurtServer port crates/horizon-client/src/mobs/nautilus.rs::after_hurt angry at the attacker for 400 ticks
AbstractNautilus.finalizeSpawn port crates/horizon-client/src/mobs/nautilus.rs::finalize attack target cooldown of 2400 to 3600 ticks
AbstractNautilus.getEquipSound port crates/horizon-client/src/mobs/nautilus.rs::saddle_sound underwater saddle sound while the eyes are in water
AbstractNautilus.createInventory skip:other getInventoryColumns is 0, so the container has no slots; saddle and armour are equipment slots
AbstractNautilus.openCustomInventoryScreen missing player: shift-use on a tame nautilus or the inventory key while riding opens no screen (has_mount_menu is horses and llamas only), so a saddle or armour put on cannot be taken off again
AbstractNautilus.getSlot skip:other slots 500 and up address the container, which has no slots; every other slot is an equipment slot
AbstractNautilus.isAggravated missing minor: only feeds canBeLeashed; a charging or angry nautilus can still be leashed (leash.rs::can_be_leashed has no nautilus arm)
Nautilus.customServerAiStep inline crates/horizon-client/src/mobs/nautilus.rs::register the goal list replaces the brain and its fight or idle switch; the cooldowns tick in ai_step
Nautilus.getAmbientSound port crates/horizon-client/src/mobs/nautilus.rs::sounds by age and by under water or on land
Nautilus.getHurtSound port crates/horizon-client/src/mobs/nautilus.rs::sounds by age and by under water or on land
Nautilus.getDeathSound port crates/horizon-client/src/mobs/nautilus.rs::sounds by age and by under water or on land
Nautilus.playEatingSound port crates/horizon-client/src/mobs/nautilus.rs::eat_sound baby and adult eat sounds
Nautilus.baseTick inline crates/horizon-client/src/mobs/ai.rs::base_tick gap: minor: dries out on land through the generic needs_water air supply, so the damage is the drown kind instead of dry_out and a no-AI nautilus dries out too
NautilusAi.initCoreActivity inline crates/horizon-client/src/mobs/nautilus.rs::register panic 1.6 is a goal; the look and move sinks are the generic controls and the cooldown counters tick in ai_step
NautilusAi.initIdleActivity inline crates/horizon-client/src/mobs/nautilus.rs::register gap: minor: breed 0.4, tempt 1.3, swim stroll 1.0 and the target pick (find_target), but SetWalkTargetFromLookTarget is not ported so it does not swim toward what it looks at
NautilusAi.initFightActivity inline crates/horizon-client/src/mobs/nautilus.rs::register the Charge goal: speed 0.6, 12 block range, 80 tick cooldown, only without love or temptation
NautilusAi.isHostileTarget inline crates/horizon-client/src/mobs/nautilus.rs::find_target a pufferfish in water (the nautilus_hostiles tag holds only the pufferfish)
ZombieNautilus.defineSynchedData skip:other synched variant id; Horizon keeps the variant in extra.variant and reads it from the server's data in remote_mob_data.rs
ZombieNautilus.get skip:other reads the variant as a data component for predicates; Horizon has no entity component view
ZombieNautilus.applyImplicitComponent missing minor: a spawn egg's zombie_nautilus_variant component is not applied (only bucketed mobs read item components)
ZombieNautilus.finalizeSpawn port crates/horizon-client/src/mobs/nautilus.rs::finalize warm variant in warm oceans (coral), temperate elsewhere
ZombieNautilusAi.initCoreActivity inline crates/horizon-client/src/mobs/nautilus.rs::register zombie arm: no panic; the cooldown counters tick in ai_step
ZombieNautilusAi.initIdleActivity inline crates/horizon-client/src/mobs/nautilus.rs::register zombie arm: tempt 0.9, swim stroll 1.0, target pick in find_target; no breeding
ZombieNautilusAi.initFightActivity inline crates/horizon-client/src/mobs/nautilus.rs::register zombie arm: Charge goal at speed 0.5
ZombieNautilusVariants.bootstrap skip:data variant registry; Horizon has VARIANTS in nautilus.rs and the biome tag in spawning.rs
Panda.setMainGene skip:other stores the gene id in extra.variant; the random re-roll for an id above 6 never happens
Panda.setHiddenGene skip:other stores the gene id in extra.variant2; the random re-roll for an id above 6 never happens
Panda.defineSynchedData skip:other synched flags, counters and genes; Horizon keeps them in the panda State and extra.variant, extra.variant2
Panda.getFlag port crates/horizon-client/src/mobs/panda.rs::flag reads the DATA_ID_FLAGS bit (set_flag writes it)
Panda.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt MainGene and HiddenGene by name
Panda.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt MainGene and HiddenGene by name, normal when absent
Panda.addEatingParticles inline crates/horizon-client/src/mobs/panda.rs::handle_eating eat sound every 5 ticks and the six crumbs (crumbs)
Panda.updateSitAmount inline crates/horizon-client/src/mobs/panda.rs::update_amounts sit amount rises 0.15 and falls 0.19 a tick
Panda.updateOnBackAnimation inline crates/horizon-client/src/mobs/panda.rs::update_amounts on-back amount, same steps
Panda.updateRollAmount inline crates/horizon-client/src/mobs/panda.rs::update_amounts roll amount, same steps
Panda.pickUpItem inline crates/horizon-client/src/game/pandas.rs::Game::tick_pandas takes a panda_eats_from_ground item at its feet with an empty mouth (mob_griefing), guaranteed drop
Panda.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize random main and hidden genes, set_attributes, ageable group with 0.2 chance
Panda.setGeneFromParents port crates/horizon-client/src/mobs/panda.rs::inherit genes from both parents with a 1 in 32 re-roll each; the one-parent branch is never reached
Panda.PandaAttackGoal.canUse port crates/horizon-client/src/mobs/panda.rs::When::can_use melee attack only while can_perform_action
Panda.PandaAvoidGoal.canUse port crates/horizon-client/src/mobs/panda.rs::When::can_use avoid goals only for a worried panda that can perform an action
Parrot.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize random one of five variants, ageable group without babies
Parrot.createAttributes skip:data attributes (health 6, flying speed 0.4) come from the entity type table
Parrot.createNavigation missing player: parrots have no flying navigation or flying move control, so they walk and hop on the ground and never fly to where a path through the air would lead
Parrot.calculateFlapping missing player: flap and flap_speed are only updated for chickens, so a parrot's wings never flap and a falling one does not glide (no 0.6 fall damping)
Parrot.checkParrotSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Parrot arm: parrots_spawnable_on below and bright enough
Parrot.onFlap missing player: no parrot wing sound while flying (entity.parrot.fly at 0.15), no next_flap tracking
Parrot.hurtServer missing player: a hit does not stand a sitting tame parrot up (only wolves reset sitting in tame::after_hurt)
Parrot.get skip:other reads the variant as a data component for predicates; Horizon has no entity component view
Parrot.applyImplicitComponent missing minor: a spawn egg's parrot_variant component is not applied (only bucketed mobs read item components)
Parrot.defineSynchedData skip:other synched variant id; Horizon keeps it in extra.variant (remote_mob_data.rs reads index 20)
Parrot.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant Variant clamped to 0 to 4, red and blue when absent
Parrot.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: no parrot arm, the lead attaches at the full eye height instead of 0.5 times it
Parrot.ParrotWanderGoal.getPosition missing player: parrots wander with a ground stroll (Stroll::avoiding_water in tame.rs::register_parrot), so they never pick a flying position or one of the tree perches
Parrot.ParrotWanderGoal.getTreePos missing player: parrots never fly to settle on leaves or logs nearby
ShoulderRidingEntity.setEntityOnShoulder port crates/horizon-client/src/game/shoulders.rs::Game::parrot_to_shoulder saved into the first free ShoulderEntityLeft or ShoulderEntityRight slot, the parrot removed from the world
Pig.registerGoals port crates/horizon-client/src/mobs/farm.rs::register Species::Pig arm: float, panic 1.25, breed, two temptations (stick and food), follow parent, stroll, look
Pig.getControllingPassenger port crates/horizon-client/src/mobs/equine.rs::controlled saddled and the rider holds the carrot on a stick (r.steer)
Pig.onSyncedDataUpdated missing minor: a server's pig does not start its client boost timer from the synched boost time (remote.rs reads only the strider's flag there)
Pig.defineSynchedData skip:other synched boost time, variant and sound variant; Horizon keeps them in extra.counter, extra.counter2, extra.variant and extra.sound_variant
Pig.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt variant, sound_variant and the saddle in equipment
Pig.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt variant, sound_variant and the saddle
Pig.mobInteract port crates/horizon-client/src/game/mounts.rs::Game::interact_steerable gap: player: a saddled pig is mounted even when the click holds its food, so it cannot be fed or bred while saddled (vanilla feeds first)
Pig.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot the saddle needs an alive, grown pig
Pig.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip the saddle always
Pig.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound entity.pig.saddle
Pig.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit a pig outside peaceful becomes a zombified piglin
Pig.tickRidden inline crates/horizon-client/src/mobs/equine.rs::ridden_step turns to the rider's yaw, pitch halved, and ticks the boost
Pig.getRiddenSpeed inline crates/horizon-client/src/mobs/equine.rs::ridden_step movement speed times 0.225 times the boost factor
Pig.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: minor: the baby always takes the first parent's variant, not either parent's by a coin
Pig.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: no pig arm, the lead attaches at the full eye height instead of 0.6 times it
Pig.getSoundSet inline crates/horizon-client/src/mobs/ai.rs::voice_sounds gap: player: only the baby or adult classic sounds are used, so mini and big sound variants (chosen and saved) never sound different
Pig.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome tag and a random sound variant
PigSoundVariants.bootstrap skip:data sound variant registry; names come from finalize::sound_variants
PigVariants.bootstrap skip:data variant registry; the variants and their biome tags are read from data
PigVariants.register skip:data registry helper
PolarBear.createAttributes skip:data attributes come from the entity type table
PolarBear.checkPolarBearSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::PolarBear arm: ice-block rule in the alternate biomes, animal rule elsewhere
PolarBear.getDefaultDimensions missing minor: the box of a rearing bear stays its normal height (vanilla grows it up to twice with the stand animation); Mob::dims has no polar bear arm
PolarBear.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize ageable group with chance 1.0 (the PolarBear and Ocelot arm)
Rabbit.getJumpPower port crates/horizon-client/src/mobs/rabbit.rs::jump_scale 0.5 toward higher ground or a wall, 0.2 when slow, else 0.3, divided by 0.42 (jump_power adds the block factor and boost)
Rabbit.getJumpCompletion skip:other only copied into the render state; the rabbit model plays the hop and idle keyframe animations instead
Rabbit.setSpeedModifier inline crates/horizon-client/src/mobs/rabbit.rs::prepare_move speed modifier is zeroed on the ground and restored in flight; 1.5 in water
Rabbit.setJumping inline crates/horizon-client/src/mobs/rabbit.rs::start_jumping the jump sound with pitch times 0.8 plays when the hop starts
Rabbit.defineSynchedData skip:other synched variant id; Horizon keeps it in extra.variant (remote_mob_data.rs reads index 18)
Rabbit.facePoint inline crates/horizon-client/src/mobs/rabbit.rs::server_ai_step yaw set toward the wanted or next path point before each hop
Rabbit.setLandingDelay inline crates/horizon-client/src/mobs/rabbit.rs::server_ai_step 10 ticks, 3 when the speed modifier is 2.2 or more
Rabbit.createAttributes skip:data attributes come from the entity type table
Rabbit.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt RabbitType; MoreCarrotTicks is kept at 0
Rabbit.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: RabbitType (0 to 5 and 99) is read but MoreCarrotTicks is ignored
Rabbit.playAttackSound missing minor: only the killer bunny plays it and Horizon has no killer bunny behaviour
Rabbit.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: minor: the baby always takes the first parent's coat; vanilla takes either parent's and one time in 20 rolls a biome coat
Rabbit.setVariant inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: variant 99 (killer bunny, from /summon or a save) only changes the texture: no armour 8, no plus 5 attack, no melee or target goals, no Killer Bunny name
Rabbit.get skip:other reads the variant as a data component for predicates; Horizon has no entity component view
Rabbit.applyImplicitComponent missing minor: a spawn egg's rabbit variant component is not applied (only bucketed mobs read item components)
Rabbit.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome, shared across a group
Rabbit.getRandomRabbitVariant inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize white and white splotched in snowy biomes, gold in deserts, else brown, salt or black
Rabbit.checkRabbitSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Rabbit arm: rabbits_spawnable_on below and bright enough
Rabbit.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: no rabbit arm, the lead attaches at the full eye height instead of 0.6 times it
Rabbit.shouldPlayIdleAnimation inline crates/horizon-client/src/mobs/rabbit.rs::base_tick idle timeout over, not leashed, not no-AI
Rabbit.RabbitAvoidEntityGoal.canUse missing player: rabbits never run from players (8 blocks), wolves (10) or monsters (4); no avoid goal is registered for them
Rabbit.RaidGardenGoal.canUse missing player: rabbits never walk to ripe carrot crops to eat them; no MoreCarrotTicks clock
Rabbit.RaidGardenGoal.tick missing player: a rabbit never eats carrots, so ripe carrots are never knocked back or destroyed by rabbits
Rabbit.RaidGardenGoal.isValidTarget missing player: part of the missing carrot raid (a ripe carrot on a crop-supporting block)
Sheep.registerGoals port crates/horizon-client/src/mobs/farm.rs::register Species::Sheep arm: float, panic, breed, tempt, follow parent, eat block, stroll, look
Sheep.aiStep inline crates/horizon-client/src/mobs/ai.rs::species_ai_step the eat animation counter (anim_ticks) counts down each tick
Sheep.handleEntityEvent missing player: on a server a sheep never lowers its head to eat grass, because entity event 10 is not handled in remote.rs (the integrated server sets anim_ticks itself)
Sheep.getHeadEatPositionScale inline crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head drops by 9 times the scale (halved for a lamb)
Sheep.getHeadEatAngleScale inline crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head tilt of pi/5 with the nibbling wobble
Sheep.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob shears drop the shearing loot and set sheared; a dye recolours an unsheared sheep
Sheep.setColor skip:other stores the 4-bit wool colour in extra.color
Sheep.get skip:other reads the colour as a data component for predicates; Horizon has no entity component view
Sheep.applyImplicitComponent missing minor: a spawn egg's sheep colour component is not applied (only bucketed mobs read item components)
Sheep.isSheared skip:other reads extra.sheared
Sheep.setSheared skip:other writes extra.sheared (shear, regrow and nbt set it directly)
Sheep.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: player: a lamb always takes the first parent's wool colour; vanilla mixes the two (red and blue give purple)
Sheep.ate port crates/horizon-client/src/mobs/ai.rs::ate wool grows back and a lamb ages up by 60 seconds
Sheep.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize wool colour from the biome's climate (farm::sheep_color)
SheepColorSpawnRules.commonColors inline crates/horizon-client/src/mobs/farm.rs::sheep_color the 82 weight tail: the common colour, pink one time in 500
SheepColorSpawnRules.getSheepColorConfiguration port crates/horizon-client/src/mobs/farm.rs::sheep_color the three climate tables; the climate itself is picked in Ctx::finalize from the warm and cold farm animal tags
SheepColorSpawnRules.weighted inline crates/horizon-client/src/mobs/farm.rs::sheep_color the weighted pick is the running subtraction over the list
Sniffer.defineSynchedData skip:other synched state and seed drop tick; Horizon keeps them in extra.variant and extra.ints[3]
Sniffer.onPathfindingStart inline crates/horizon-client/src/mobs/sniffer.rs::ai_step water is passable only while it is on fire or in water; reset each tick (the onPathfindingDone part)
Sniffer.canPlayDiggingSound inline crates/horizon-client/src/game/sniffers.rs::Game::tick_sniffer_effects gap: minor: the digging sound is a one-shot at the start of the dig (SnifferSoundInstance is not kept), so it is not cut off when the sniffer stops or gets a target
Sniffer.resetAnimations inline crates/horizon-client/src/mobs/sniffer.rs::animate all five animation states stop when the state changes
Sniffer.onScentingStart inline crates/horizon-client/src/mobs/animal_brain.rs::transition scenting sound, pitch 1.3 for a baby
Sniffer.onDiggingStart inline crates/horizon-client/src/mobs/animal_brain.rs::transition the seed drop is set 120 ticks ahead (ints[3]); the client sound starts from the animation in tick_sniffer_effects
Sniffer.dropSeed inline crates/horizon-client/src/mobs/sniffer.rs::ai_step gift loot sniffer_digging at the head block and the drop seed sound when the tick comes
Sniffer.storeExploredPosition inline crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop the on-pos is put in front of the explored list, kept to 20
Sniffer.jumpFromGround missing minor: no sniffer arm in Mob::jump_from_ground, so its hop gets no extra forward nudge (moveRelative 0.1 forward) when it moves slowly
Sniffer.mobInteract inline crates/horizon-client/src/mobs/ai.rs::eating_sound the eating sound plays when the food was taken (feed_animal)
Sniffer.playEatingSound port crates/horizon-client/src/mobs/ai.rs::eating_sound Species::Sniffer arm: entity.sniffer.eat with pitch 0.8 to 1.2
Sniffer.playSearchingSound port crates/horizon-client/src/game/sniffers.rs::Game::tick_sniffer_effects searching sound every 20 ticks while searching, near any player
1 AbstractNautilus.createAttributes skip:data attributes come from the entity type table (MobType in mobs.rs)
2 AbstractNautilus.checkNautilusSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Nautilus arm: sea level minus 25 to minus 5, water below and above; only the nautilus has a placement (the zombie nautilus has none of its own)
3 AbstractNautilus.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot saddle and body slots need an alive, grown, tame nautilus
4 AbstractNautilus.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip body and saddle always, other slots only with pick_up_loot
5 AbstractNautilus.getControllingPassenger port crates/horizon-client/src/mobs/nautilus.rs::controlled a rider on a saddled nautilus
6 AbstractNautilus.getRiddenSpeed inline crates/horizon-client/src/mobs/nautilus.rs::ridden 0.0325 in water, 0.02 on land, times the movement speed
7 AbstractNautilus.doPlayerRide inline crates/horizon-client/src/game/nautili.rs::Game::interact_nautilus the player mounts it and a lead breaks; there is no home to clear
8 AbstractNautilus.getNautilusRestrictionRadius missing player: a tame nautilus is never kept near its home, so it wanders off instead of staying within 32 blocks (16 for a baby or a saddled one)
9 AbstractNautilus.checkRestriction missing player: no home is set for a tame nautilus (ai.home is only set by leads and happy ghasts), see getNautilusRestrictionRadius
10 AbstractNautilus.applyEffects inline crates/horizon-client/src/mobs/nautilus.rs::ai_step the rider gets breath of the nautilus for 60 ticks, refreshed every 40 ticks
11 AbstractNautilus.onPlayerJump inline crates/horizon-client/src/game/mounts.rs::Game::charge_mount_jump the charged jump scale (0.4 to 1.0) goes to the rider input; the dash itself waits for its cooldown in nautilus::ridden
12 AbstractNautilus.executeRidersJump port crates/horizon-client/src/mobs/nautilus.rs::dash gap: minor: the push leaves out getBlockSpeedFactor (soul sand, honey); 1.2 in water, 0.5 on land, 40 tick cooldown, dashing flag
13 AbstractNautilus.handleStartJump inline crates/horizon-client/src/mobs/nautilus.rs::ai_step the dash sound plays on the tick after the dash (scratch[1]); no game event
14 AbstractNautilus.onSyncedDataUpdated skip:other client mirror of the dash flag; the nautilus keeps its own dash clock (anim_ticks) and the jump bar uses mount.jump_ticks
15 AbstractNautilus.tryToTame inline crates/horizon-client/src/game/nautili.rs::Game::interact_nautilus one chance in three, taming particles (event 7 or 6), eating sound, tame_animal trigger
16 AbstractNautilus.hurtServer port crates/horizon-client/src/mobs/nautilus.rs::after_hurt angry at the attacker for 400 ticks
17 AbstractNautilus.finalizeSpawn port crates/horizon-client/src/mobs/nautilus.rs::finalize attack target cooldown of 2400 to 3600 ticks
18 AbstractNautilus.getEquipSound port crates/horizon-client/src/mobs/nautilus.rs::saddle_sound underwater saddle sound while the eyes are in water
19 AbstractNautilus.createInventory skip:other getInventoryColumns is 0, so the container has no slots; saddle and armour are equipment slots
20 AbstractNautilus.openCustomInventoryScreen missing player: shift-use on a tame nautilus or the inventory key while riding opens no screen (has_mount_menu is horses and llamas only), so a saddle or armour put on cannot be taken off again
21 AbstractNautilus.getSlot skip:other slots 500 and up address the container, which has no slots; every other slot is an equipment slot
22 AbstractNautilus.isAggravated missing minor: only feeds canBeLeashed; a charging or angry nautilus can still be leashed (leash.rs::can_be_leashed has no nautilus arm)
23 Nautilus.customServerAiStep inline crates/horizon-client/src/mobs/nautilus.rs::register the goal list replaces the brain and its fight or idle switch; the cooldowns tick in ai_step
24 Nautilus.getAmbientSound port crates/horizon-client/src/mobs/nautilus.rs::sounds by age and by under water or on land
25 Nautilus.getHurtSound port crates/horizon-client/src/mobs/nautilus.rs::sounds by age and by under water or on land
26 Nautilus.getDeathSound port crates/horizon-client/src/mobs/nautilus.rs::sounds by age and by under water or on land
27 Nautilus.playEatingSound port crates/horizon-client/src/mobs/nautilus.rs::eat_sound baby and adult eat sounds
28 Nautilus.baseTick inline crates/horizon-client/src/mobs/ai.rs::base_tick gap: minor: dries out on land through the generic needs_water air supply, so the damage is the drown kind instead of dry_out and a no-AI nautilus dries out too
29 NautilusAi.initCoreActivity inline crates/horizon-client/src/mobs/nautilus.rs::register panic 1.6 is a goal; the look and move sinks are the generic controls and the cooldown counters tick in ai_step
30 NautilusAi.initIdleActivity inline crates/horizon-client/src/mobs/nautilus.rs::register gap: minor: breed 0.4, tempt 1.3, swim stroll 1.0 and the target pick (find_target), but SetWalkTargetFromLookTarget is not ported so it does not swim toward what it looks at
31 NautilusAi.initFightActivity inline crates/horizon-client/src/mobs/nautilus.rs::register the Charge goal: speed 0.6, 12 block range, 80 tick cooldown, only without love or temptation
32 NautilusAi.isHostileTarget inline crates/horizon-client/src/mobs/nautilus.rs::find_target a pufferfish in water (the nautilus_hostiles tag holds only the pufferfish)
33 ZombieNautilus.defineSynchedData skip:other synched variant id; Horizon keeps the variant in extra.variant and reads it from the server's data in remote_mob_data.rs
34 ZombieNautilus.get skip:other reads the variant as a data component for predicates; Horizon has no entity component view
35 ZombieNautilus.applyImplicitComponent missing minor: a spawn egg's zombie_nautilus_variant component is not applied (only bucketed mobs read item components)
36 ZombieNautilus.finalizeSpawn port crates/horizon-client/src/mobs/nautilus.rs::finalize warm variant in warm oceans (coral), temperate elsewhere
37 ZombieNautilusAi.initCoreActivity inline crates/horizon-client/src/mobs/nautilus.rs::register zombie arm: no panic; the cooldown counters tick in ai_step
38 ZombieNautilusAi.initIdleActivity inline crates/horizon-client/src/mobs/nautilus.rs::register zombie arm: tempt 0.9, swim stroll 1.0, target pick in find_target; no breeding
39 ZombieNautilusAi.initFightActivity inline crates/horizon-client/src/mobs/nautilus.rs::register zombie arm: Charge goal at speed 0.5
40 ZombieNautilusVariants.bootstrap skip:data variant registry; Horizon has VARIANTS in nautilus.rs and the biome tag in spawning.rs
41 Panda.setMainGene skip:other stores the gene id in extra.variant; the random re-roll for an id above 6 never happens
42 Panda.setHiddenGene skip:other stores the gene id in extra.variant2; the random re-roll for an id above 6 never happens
43 Panda.defineSynchedData skip:other synched flags, counters and genes; Horizon keeps them in the panda State and extra.variant, extra.variant2
44 Panda.getFlag port crates/horizon-client/src/mobs/panda.rs::flag reads the DATA_ID_FLAGS bit (set_flag writes it)
45 Panda.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt MainGene and HiddenGene by name
46 Panda.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt MainGene and HiddenGene by name, normal when absent
47 Panda.addEatingParticles inline crates/horizon-client/src/mobs/panda.rs::handle_eating eat sound every 5 ticks and the six crumbs (crumbs)
48 Panda.updateSitAmount inline crates/horizon-client/src/mobs/panda.rs::update_amounts sit amount rises 0.15 and falls 0.19 a tick
49 Panda.updateOnBackAnimation inline crates/horizon-client/src/mobs/panda.rs::update_amounts on-back amount, same steps
50 Panda.updateRollAmount inline crates/horizon-client/src/mobs/panda.rs::update_amounts roll amount, same steps
51 Panda.pickUpItem inline crates/horizon-client/src/game/pandas.rs::Game::tick_pandas takes a panda_eats_from_ground item at its feet with an empty mouth (mob_griefing), guaranteed drop
52 Panda.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize random main and hidden genes, set_attributes, ageable group with 0.2 chance
53 Panda.setGeneFromParents port crates/horizon-client/src/mobs/panda.rs::inherit genes from both parents with a 1 in 32 re-roll each; the one-parent branch is never reached
54 Panda.PandaAttackGoal.canUse port crates/horizon-client/src/mobs/panda.rs::When::can_use melee attack only while can_perform_action
55 Panda.PandaAvoidGoal.canUse port crates/horizon-client/src/mobs/panda.rs::When::can_use avoid goals only for a worried panda that can perform an action
56 Parrot.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize random one of five variants, ageable group without babies
57 Parrot.createAttributes skip:data attributes (health 6, flying speed 0.4) come from the entity type table
58 Parrot.createNavigation missing player: parrots have no flying navigation or flying move control, so they walk and hop on the ground and never fly to where a path through the air would lead
59 Parrot.calculateFlapping missing player: flap and flap_speed are only updated for chickens, so a parrot's wings never flap and a falling one does not glide (no 0.6 fall damping)
60 Parrot.checkParrotSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Parrot arm: parrots_spawnable_on below and bright enough
61 Parrot.onFlap missing player: no parrot wing sound while flying (entity.parrot.fly at 0.15), no next_flap tracking
62 Parrot.hurtServer missing player: a hit does not stand a sitting tame parrot up (only wolves reset sitting in tame::after_hurt)
63 Parrot.get skip:other reads the variant as a data component for predicates; Horizon has no entity component view
64 Parrot.applyImplicitComponent missing minor: a spawn egg's parrot_variant component is not applied (only bucketed mobs read item components)
65 Parrot.defineSynchedData skip:other synched variant id; Horizon keeps it in extra.variant (remote_mob_data.rs reads index 20)
66 Parrot.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_variant Variant clamped to 0 to 4, red and blue when absent
67 Parrot.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: no parrot arm, the lead attaches at the full eye height instead of 0.5 times it
68 Parrot.ParrotWanderGoal.getPosition missing player: parrots wander with a ground stroll (Stroll::avoiding_water in tame.rs::register_parrot), so they never pick a flying position or one of the tree perches
69 Parrot.ParrotWanderGoal.getTreePos missing player: parrots never fly to settle on leaves or logs nearby
70 ShoulderRidingEntity.setEntityOnShoulder port crates/horizon-client/src/game/shoulders.rs::Game::parrot_to_shoulder saved into the first free ShoulderEntityLeft or ShoulderEntityRight slot, the parrot removed from the world
71 Pig.registerGoals port crates/horizon-client/src/mobs/farm.rs::register Species::Pig arm: float, panic 1.25, breed, two temptations (stick and food), follow parent, stroll, look
72 Pig.getControllingPassenger port crates/horizon-client/src/mobs/equine.rs::controlled saddled and the rider holds the carrot on a stick (r.steer)
73 Pig.onSyncedDataUpdated missing minor: a server's pig does not start its client boost timer from the synched boost time (remote.rs reads only the strider's flag there)
74 Pig.defineSynchedData skip:other synched boost time, variant and sound variant; Horizon keeps them in extra.counter, extra.counter2, extra.variant and extra.sound_variant
75 Pig.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt variant, sound_variant and the saddle in equipment
76 Pig.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt variant, sound_variant and the saddle
77 Pig.mobInteract port crates/horizon-client/src/game/mounts.rs::Game::interact_steerable gap: player: a saddled pig is mounted even when the click holds its food, so it cannot be fed or bred while saddled (vanilla feeds first)
78 Pig.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot the saddle needs an alive, grown pig
79 Pig.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip the saddle always
80 Pig.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound entity.pig.saddle
81 Pig.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit a pig outside peaceful becomes a zombified piglin
82 Pig.tickRidden inline crates/horizon-client/src/mobs/equine.rs::ridden_step turns to the rider's yaw, pitch halved, and ticks the boost
83 Pig.getRiddenSpeed inline crates/horizon-client/src/mobs/equine.rs::ridden_step movement speed times 0.225 times the boost factor
84 Pig.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: minor: the baby always takes the first parent's variant, not either parent's by a coin
85 Pig.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: no pig arm, the lead attaches at the full eye height instead of 0.6 times it
86 Pig.getSoundSet inline crates/horizon-client/src/mobs/ai.rs::voice_sounds gap: player: only the baby or adult classic sounds are used, so mini and big sound variants (chosen and saved) never sound different
87 Pig.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome tag and a random sound variant
88 PigSoundVariants.bootstrap skip:data sound variant registry; names come from finalize::sound_variants
89 PigVariants.bootstrap skip:data variant registry; the variants and their biome tags are read from data
90 PigVariants.register skip:data registry helper
91 PolarBear.createAttributes skip:data attributes come from the entity type table
92 PolarBear.checkPolarBearSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::PolarBear arm: ice-block rule in the alternate biomes, animal rule elsewhere
93 PolarBear.getDefaultDimensions missing minor: the box of a rearing bear stays its normal height (vanilla grows it up to twice with the stand animation); Mob::dims has no polar bear arm
94 PolarBear.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize ageable group with chance 1.0 (the PolarBear and Ocelot arm)
95 Rabbit.getJumpPower port crates/horizon-client/src/mobs/rabbit.rs::jump_scale 0.5 toward higher ground or a wall, 0.2 when slow, else 0.3, divided by 0.42 (jump_power adds the block factor and boost)
96 Rabbit.getJumpCompletion skip:other only copied into the render state; the rabbit model plays the hop and idle keyframe animations instead
97 Rabbit.setSpeedModifier inline crates/horizon-client/src/mobs/rabbit.rs::prepare_move speed modifier is zeroed on the ground and restored in flight; 1.5 in water
98 Rabbit.setJumping inline crates/horizon-client/src/mobs/rabbit.rs::start_jumping the jump sound with pitch times 0.8 plays when the hop starts
99 Rabbit.defineSynchedData skip:other synched variant id; Horizon keeps it in extra.variant (remote_mob_data.rs reads index 18)
100 Rabbit.facePoint inline crates/horizon-client/src/mobs/rabbit.rs::server_ai_step yaw set toward the wanted or next path point before each hop
101 Rabbit.setLandingDelay inline crates/horizon-client/src/mobs/rabbit.rs::server_ai_step 10 ticks, 3 when the speed modifier is 2.2 or more
102 Rabbit.createAttributes skip:data attributes come from the entity type table
103 Rabbit.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt RabbitType; MoreCarrotTicks is kept at 0
104 Rabbit.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: RabbitType (0 to 5 and 99) is read but MoreCarrotTicks is ignored
105 Rabbit.playAttackSound missing minor: only the killer bunny plays it and Horizon has no killer bunny behaviour
106 Rabbit.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: minor: the baby always takes the first parent's coat; vanilla takes either parent's and one time in 20 rolls a biome coat
107 Rabbit.setVariant inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: player: variant 99 (killer bunny, from /summon or a save) only changes the texture: no armour 8, no plus 5 attack, no melee or target goals, no Killer Bunny name
108 Rabbit.get skip:other reads the variant as a data component for predicates; Horizon has no entity component view
109 Rabbit.applyImplicitComponent missing minor: a spawn egg's rabbit variant component is not applied (only bucketed mobs read item components)
110 Rabbit.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize variant by biome, shared across a group
111 Rabbit.getRandomRabbitVariant inline crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize white and white splotched in snowy biomes, gold in deserts, else brown, salt or black
112 Rabbit.checkRabbitSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Rabbit arm: rabbits_spawnable_on below and bright enough
113 Rabbit.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: no rabbit arm, the lead attaches at the full eye height instead of 0.6 times it
114 Rabbit.shouldPlayIdleAnimation inline crates/horizon-client/src/mobs/rabbit.rs::base_tick idle timeout over, not leashed, not no-AI
115 Rabbit.RabbitAvoidEntityGoal.canUse missing player: rabbits never run from players (8 blocks), wolves (10) or monsters (4); no avoid goal is registered for them
116 Rabbit.RaidGardenGoal.canUse missing player: rabbits never walk to ripe carrot crops to eat them; no MoreCarrotTicks clock
117 Rabbit.RaidGardenGoal.tick missing player: a rabbit never eats carrots, so ripe carrots are never knocked back or destroyed by rabbits
118 Rabbit.RaidGardenGoal.isValidTarget missing player: part of the missing carrot raid (a ripe carrot on a crop-supporting block)
119 Sheep.registerGoals port crates/horizon-client/src/mobs/farm.rs::register Species::Sheep arm: float, panic, breed, tempt, follow parent, eat block, stroll, look
120 Sheep.aiStep inline crates/horizon-client/src/mobs/ai.rs::species_ai_step the eat animation counter (anim_ticks) counts down each tick
121 Sheep.handleEntityEvent missing player: on a server a sheep never lowers its head to eat grass, because entity event 10 is not handled in remote.rs (the integrated server sets anim_ticks itself)
122 Sheep.getHeadEatPositionScale inline crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head drops by 9 times the scale (halved for a lamb)
123 Sheep.getHeadEatAngleScale inline crates/horizon-client/src/mobs/anim.rs::setup Anim::Sheep arm: head tilt of pi/5 with the nibbling wobble
124 Sheep.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob shears drop the shearing loot and set sheared; a dye recolours an unsheared sheep
125 Sheep.setColor skip:other stores the 4-bit wool colour in extra.color
126 Sheep.get skip:other reads the colour as a data component for predicates; Horizon has no entity component view
127 Sheep.applyImplicitComponent missing minor: a spawn egg's sheep colour component is not applied (only bucketed mobs read item components)
128 Sheep.isSheared skip:other reads extra.sheared
129 Sheep.setSheared skip:other writes extra.sheared (shear, regrow and nbt set it directly)
130 Sheep.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: player: a lamb always takes the first parent's wool colour; vanilla mixes the two (red and blue give purple)
131 Sheep.ate port crates/horizon-client/src/mobs/ai.rs::ate wool grows back and a lamb ages up by 60 seconds
132 Sheep.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize wool colour from the biome's climate (farm::sheep_color)
133 SheepColorSpawnRules.commonColors inline crates/horizon-client/src/mobs/farm.rs::sheep_color the 82 weight tail: the common colour, pink one time in 500
134 SheepColorSpawnRules.getSheepColorConfiguration port crates/horizon-client/src/mobs/farm.rs::sheep_color the three climate tables; the climate itself is picked in Ctx::finalize from the warm and cold farm animal tags
135 SheepColorSpawnRules.weighted inline crates/horizon-client/src/mobs/farm.rs::sheep_color the weighted pick is the running subtraction over the list
136 Sniffer.defineSynchedData skip:other synched state and seed drop tick; Horizon keeps them in extra.variant and extra.ints[3]
137 Sniffer.onPathfindingStart inline crates/horizon-client/src/mobs/sniffer.rs::ai_step water is passable only while it is on fire or in water; reset each tick (the onPathfindingDone part)
138 Sniffer.canPlayDiggingSound inline crates/horizon-client/src/game/sniffers.rs::Game::tick_sniffer_effects gap: minor: the digging sound is a one-shot at the start of the dig (SnifferSoundInstance is not kept), so it is not cut off when the sniffer stops or gets a target
139 Sniffer.resetAnimations inline crates/horizon-client/src/mobs/sniffer.rs::animate all five animation states stop when the state changes
140 Sniffer.onScentingStart inline crates/horizon-client/src/mobs/animal_brain.rs::transition scenting sound, pitch 1.3 for a baby
141 Sniffer.onDiggingStart inline crates/horizon-client/src/mobs/animal_brain.rs::transition the seed drop is set 120 ticks ahead (ints[3]); the client sound starts from the animation in tick_sniffer_effects
142 Sniffer.dropSeed inline crates/horizon-client/src/mobs/sniffer.rs::ai_step gift loot sniffer_digging at the head block and the drop seed sound when the tick comes
143 Sniffer.storeExploredPosition inline crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop the on-pos is put in front of the explored list, kept to 20
144 Sniffer.jumpFromGround missing minor: no sniffer arm in Mob::jump_from_ground, so its hop gets no extra forward nudge (moveRelative 0.1 forward) when it moves slowly
145 Sniffer.mobInteract inline crates/horizon-client/src/mobs/ai.rs::eating_sound the eating sound plays when the food was taken (feed_animal)
146 Sniffer.playEatingSound port crates/horizon-client/src/mobs/ai.rs::eating_sound Species::Sniffer arm: entity.sniffer.eat with pitch 0.8 to 1.2
147 Sniffer.playSearchingSound port crates/horizon-client/src/game/sniffers.rs::Game::tick_sniffer_effects searching sound every 20 ticks while searching, near any player
+140
View File
@@ -0,0 +1,140 @@
WorldGenRegion.getChunk port crates/horizon-world/src/worldgen/feature_region.rs::TerrainRegion::chunk gap: minor: returns the resident chunk without the generating-step status check
GossipContainer.getReputation port crates/horizon-client/src/gossip.rs::Gossips::reputation Villager calls it with all types only; the type predicate is fixed to all
Frog.travelInWater missing minor: frog water travel (getSpeed() move, 0.9 drag on all axes) absent; generic fluid travel used instead
HappyGhast.HappyGhastBodyRotationControl.clientTick port crates/horizon-client/src/mobs/happy_ghast.rs::ridden gap: minor: vehicle yaw sync only; the super.clientTick step is Mob::body_rotation_tick in control.rs
SnifferAi.initCoreActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package core behaviour list (Swim, panic, sink, cooldown) built here
SnifferAi.initSniffingActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package Searching entry here; memory gates in update_activity
SnifferAi.initDigActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package Digging and FinishedDigging entries here; memory gates in update_activity
SnifferAi.initIdleActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package idle entries (make love with reset, temptation, look sink, RunOne) here
SnifferAi.Digging.canStillUse port crates/horizon-client/src/mobs/animal_brain.rs::B::tick_or_stop
SnifferAi.Digging.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
SnifferAi.FinishedDigging.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
SnifferAi.Searching.canStillUse port crates/horizon-client/src/mobs/animal_brain.rs::B::tick_or_stop
SnifferAi.Searching.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
SnifferAi.Sniffing.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
Squid.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register
Squid.rotateVector inline crates/horizon-client/src/mobs/aquatic.rs::spawn_ink xRot then yRot of the body angles, inside spawn_ink
Squid.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize S::Squid arm: ageable group with 0.05 baby chance
Turtle.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta HAS_EGG and LAYING_EGG as entity metadata 18 and 19
Turtle.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt home_pos and has_egg written here
Turtle.checkTurtleSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Turtle arm: below sea+4, sand, bright
Turtle.createAttributes skip:data attribute values come from data tables (attr lookups in mobs.rs)
Turtle.getAmbientSound port crates/horizon-client/src/mobs/ai.rs::ambient_sound gap: player: turtles in water or babies also play the land ambient (no Turtle arm; vanilla is silent there)
Turtle.playStepSound port crates/horizon-client/src/mobs/ai.rs::step_sound shamble and shamble_baby at 0.15 volume
Turtle.travelInWater missing player: turtles swim with generic fluid travel (0.02 base speed, 0.8 vertical drag), not 0.1 move speed, 0.9 drag and the slow sink
Turtle.TurtleLayEggGoal.isValidTarget port crates/horizon-client/src/mobs/turtle.rs::LayEgg::valid air above and sand below
Wolf.registerGoals port crates/horizon-client/src/mobs/tame.rs::register
Wolf.getSoundSet missing player: wolves always use the classic voice; the sound variant (big, puglin, sad, angry...) never changes what plays
Wolf.createAttributes skip:data attribute values come from data tables
Wolf.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta flags, variant and anger metadata sent to clients
Wolf.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt CollarColor written
Wolf.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt CollarColor, sound_variant and anger read
Wolf.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: minor: sound variant is stored but no sound uses it (see getSoundSet)
Wolf.getAmbientSound port crates/horizon-client/src/mobs/ai.rs::ambient_sound gap: minor: angry is taken as having a target, not the anger timer
Wolf.die missing minor: a wolf that dies mid-shake keeps its shake state; Horizon never resets the wet and shake fields on death
Wolf.getHeadRollAngle port crates/horizon-client/src/mobs/tame.rs::anim
Wolf.applyTamingSideEffects port crates/horizon-client/src/mobs/tame.rs::set_tame
Wolf.hurtArmor port crates/horizon-client/src/mobs.rs::Mob::hurt_wolf_armor
Wolf.tryToTame port crates/horizon-client/src/game/creatures.rs::Game::interact_mob one in three tames; particles 7 or 6, sit, stop nav, clear target
Wolf.handleEntityEvent inline crates/horizon-client/src/mobs/tame.rs::ai_step entity events 8 and 56 folded into the shake state in ai_step
Wolf.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: player: wolf rope point uses full eye height, not 0.6 times it
Wolf.checkWolfSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Wolf arm: wolves_spawnable_on and bright
Wolf.WolfAvoidEntityGoal.avoidLlama port crates/horizon-client/src/mobs/tame.rs::AvoidLlamas::can_use strength check inside can_use
WolfVariants.bootstrap skip:data registry bootstrap; variants are the WOLF_VARIANTS table in tame.rs
DragonFlightHistory.copyFrom skip:java ring-buffer copy; Horizon keeps the flight history as fields of Dragon
EndCrystal.defineSynchedData missing player: multiplayer guests never get a crystal's beam target, and the base is always shown (remote spawn ignores show_bottom)
EndCrystal.addAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Crystal::to_nbt
EndCrystal.readAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Crystal::from_nbt
EndCrystal.hurtClient missing unsure: client hit check that refuses dragon-sourced hits; not found in destroy_crystal
EndCrystal.shouldRenderAtSqrDistance skip:ui render culling so beams draw from farther away; drawing only
EnderDragon.<init> port crates/horizon-client/src/game/dragon.rs::Dragon::new gap: minor: parts are placed later by Game::place_dragon_parts
EnderDragon.isFlapping port crates/horizon-client/src/game/dragon.rs::Game::tick_dragon
EnderDragon.onFlap port crates/horizon-client/src/game/dragon.rs::Game::tick_dragon flap sound at volume 5 and pitch 0.8 plus random 0.3
EnderDragon.defineSynchedData port crates/horizon-client/src/game/dragon.rs::Game::lan_dragon_state DATA_PHASE defined as hovering on the wire
EnderDragon.tickPart port crates/horizon-client/src/game/dragon.rs::Game::place_dragon_parts
EnderDragon.getHeadYOffset inline crates/horizon-client/src/game/dragon.rs::Game::place_dragon_parts sitting gives -1, else flight sample 5 minus sample 0
EnderDragon.knockBack port crates/horizon-client/src/game/dragon.rs::Game::dragon_contacts wing zones push players
EnderDragon.handleKillingBlow inline crates/horizon-client/src/game/dragon.rs::Dragon::hurt health set to 1 and dying phase unless sitting
EnderDragon.knockback missing minor: a hit does not push the dragon back outside the sitting phase
EnderDragon.findClosestNode port crates/horizon-client/src/game/dragon.rs::Game::closest_node
EnderDragon.findPath port crates/horizon-client/src/game/dragon.rs::Game::dragon_path
EnderDragon.reconstructPath inline crates/horizon-client/src/game/dragon.rs::Game::dragon_path path list built inside the A* search
EnderDragon.addAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Dragon::to_nbt
EnderDragon.readAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Dragon::from_nbt gap: minor: sitting_damage_received is not read back
EnderDragon.getHeadLookVector port crates/horizon-client/src/game/dragon.rs::Game::dragon_look
EnderDragon.onSyncedDataUpdated port crates/horizon-client/src/game/dragon.rs::Game::remote_dragon_data phase set on guests from synced data
EnderDragon.recreateFromPacket port crates/horizon-client/src/game/dragon.rs::Game::spawn_remote_dragon gap: minor: part entity ids are not assigned; parts are indexes
EnderDragonPart.hurtServer port crates/horizon-client/src/game/dragon.rs::Dragon::hurt hits route to the dragon with the part index
EnderDragonPart.is skip:other identity check; parts are SPECIAL+index ids in special_targets
DragonStrafePlayerPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Strafe arm: charge, sight, fireball, then holding pattern
DragonStrafePlayerPhase.findNewTarget port crates/horizon-client/src/game/dragon.rs::Game::ring_path
DragonStrafePlayerPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
DragonStrafePlayerPhase.begin inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase fresh strafe state (charge 0, no path or target) when entered
EnderDragonPhaseManager.getPhase skip:java lazy cache of phase instances; Horizon phases are enum values
WitherBoss.createNavigation port crates/horizon-client/src/mobs/wither.rs::register gap: minor: door and float flags are not set here
WitherBoss.registerGoals port crates/horizon-client/src/mobs/wither.rs::register
WitherBoss.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: only heads A and B are synced; the invulnerable counter is sent at index 19, the slot of target C
WitherBoss.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt Invul read; boss bar name not checked here
WitherBoss.canDestroy inline crates/horizon-client/src/mobs/wither.rs::custom_server_ai_step air and wither-immune checks in the block loop
WitherBoss.getHeadX port crates/horizon-client/src/mobs/wither.rs::head_pos
WitherBoss.getHeadY port crates/horizon-client/src/mobs/wither.rs::head_pos
WitherBoss.getHeadZ port crates/horizon-client/src/mobs/wither.rs::head_pos
WitherBoss.rotlerp port crates/horizon-client/src/mobs/control.rs::rotlerp result wrapped into 0 to 360, equal modulo 360
WitherBoss.performRangedAttack port crates/horizon-client/src/mobs/wither.rs::shoot
WitherBoss.createAttributes skip:data attribute values come from data tables
WitherBoss.isPowered port crates/horizon-client/src/mobs/wither.rs::powered
ArmorStand.refreshDimensions skip:other no cached dimensions: bounds are computed from position, small and marker
ArmorStand.defineSynchedData port crates/horizon-client/src/game/lan_entities.rs::Game::lan_object_states flag and pose values sent to clients; defaults are the DEFAULT_POSE table
ArmorStand.canUseSlot inline crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand hand slots gated by show_arms; gap: minor: body and saddle are never offered and disabled bits are not read
ArmorStand.pushEntities missing minor: armour stands do not push nearby minecarts
ArmorStand.interact port crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand
ArmorStand.getClickedSlot inline crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand click height picks feet, chest, legs, head or offhand
ArmorStand.isDisabled inline crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand gap: minor: disabled-slot bits are not read; hands gated by show_arms only
ArmorStand.handleEntityEvent inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand event 32 becomes the wobble timer and the hit sound
ArmorStand.showBreakingParticles missing player: no plank particles when a stand breaks, by a creative hand or the second hit
ArmorStand.causeDamage port crates/horizon-client/src/entities.rs::ArmorStand::environment_tick gap: minor: fire damage only (4 per second burning, 0.15 per contact); hit and explosion paths are elsewhere
ArmorStand.brokenByPlayer inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand stand item dropped, then the equipment
ArmorStand.brokenByAnything inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand gap: minor: vanishing-curse items are not filtered on the hand-break path, only on the burn path
ArmorStand.playBrokenSound inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand break sound on both break paths
ArmorStand.setYBodyRot skip:other client rotation setter from packets; a stand turns only with its yaw field
ArmorStand.setYHeadRot skip:other client rotation setter from packets; a stand turns only with its yaw field
ArmorStand.kill inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand removes the stand; no game event
ArmorStand.setSmall port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt Small tag
ArmorStand.isSmall skip:other accessor; reads the small field
ArmorStand.setShowArms port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt ShowArms tag
ArmorStand.showArms skip:other accessor; reads the show_arms field
ArmorStand.setNoBasePlate port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt NoBasePlate tag
ArmorStand.showBasePlate skip:other accessor; reads the no_base_plate field
ArmorStand.setMarker port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt Marker tag
ArmorStand.isMarker skip:other accessor; reads the marker field
ArmorStand.setBit skip:other packed-flag helper; Horizon keeps separate bools and packs them when sent
ArmorStand.skipAttackInteraction missing minor: adventure-mode protection on stand hits is not checked
ArmorStand.onSyncedDataUpdated skip:other client refresh when flags sync; bounds are computed on demand
ArmorStand.getDimensionsMarker inline crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_hit marker stands are skipped, so they have no box
ArmorStand.getLightProbePosition skip:ui render light probe for markers; drawing only
ArmorStand.setArmorStandPose port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt Pose tag read into the six pose parts
ArmorStand.getArmorStandPose port crates/horizon-client/src/entity_nbt.rs::armor_stand_to_nbt Pose tag written from the six pose parts
BlockAttachedEntity.skipAttackInteraction inline crates/horizon-client/src/game/cushions.rs::Game::attack_cushion the mayInteract gate and the break; frames and paintings keep their own copies
BlockAttachedEntity.kill inline crates/horizon-client/src/game/cushions.rs::Game::break_cushion removal and the break; no game event
BlockAttachedEntity.ignoreExplosion missing player: explosions do not break paintings, item frames, cushions or armour stands; only players, mobs, items, TNT and minecarts are hurt
BlockAttachedEntity.move missing minor: a piston push does not break a cushion, painting or frame here
BlockAttachedEntity.push missing minor: a push from a blast or piston does not break a cushion, painting or frame
BlockAttachedEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::cushion_from_nbt gap: minor: no 16-block check on block_pos; the stored block is used as is
Cushion.isBreakingDeniedFor inline crates/horizon-client/src/game/cushions.rs::Game::attack_cushion the may_build gate
Cushion.isBreakingDeniedAtPosFor inline crates/horizon-client/src/game/cushions.rs::Game::attack_cushion the mayInteract gate, folded into the one may_build check
Cushion.tickAtCheckInterval inline crates/horizon-client/src/game/cushions.rs::Game::tick_cushions gap: minor: fluid effects not applied; fire and survival checked every 100 ticks
Cushion.thunderHit missing player: a lightning strike does not break a cushion
Cushion.setPos skip:other position field write; the block position is kept apart in cushion.pos
Cushion.canBePlacedAt port crates/horizon-client/src/cushion.rs::can_place
Cushion.wouldSurviveAt port crates/horizon-client/src/cushion.rs::survives
Cushion.hasAnchorBelow inline crates/horizon-client/src/cushion.rs::survives anchor scan under the box
Cushion.isCoveredBySuffocatingBlocks inline crates/horizon-client/src/cushion.rs::survives per-block suffocating test through PlacementWorld::suffocating
Cushion.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::cushion_from_nbt color tag read
Cushion.get port crates/horizon-client/src/game/pick_entity.rs::Game::entity_pick_result the pick gives the cushion item in its colour
Cushion.applyImplicitComponent port crates/horizon-client/src/game/cushions.rs::Game::place_cushion colour from the stack's cushion colour data
HangingEntity.onSyncedDataUpdated skip:other client resync of the facing; Horizon keeps the facing as a field
HangingEntity.setDirection skip:other facing field write; bounds are derived on demand from the facing
HangingEntity.recalculateBoundingBox skip:other bounds are derived on demand from the facing
HangingEntity.calculateSupportBox inline crates/horizon-client/src/game/paintings.rs::Game::painting_survives support box moved half a block into the wall
HangingEntity.canCoexist port crates/horizon-client/src/game/paintings.rs::Game::painting_survives gap: minor: only other paintings are checked for overlap; item frames and the same-facing rule are not
HangingEntity.hasLevelCollision port crates/horizon-client/src/game/paintings.rs::Game::painting_survives block collision of the box
1 WorldGenRegion.getChunk port crates/horizon-world/src/worldgen/feature_region.rs::TerrainRegion::chunk gap: minor: returns the resident chunk without the generating-step status check
2 GossipContainer.getReputation port crates/horizon-client/src/gossip.rs::Gossips::reputation Villager calls it with all types only; the type predicate is fixed to all
3 Frog.travelInWater missing minor: frog water travel (getSpeed() move, 0.9 drag on all axes) absent; generic fluid travel used instead
4 HappyGhast.HappyGhastBodyRotationControl.clientTick port crates/horizon-client/src/mobs/happy_ghast.rs::ridden gap: minor: vehicle yaw sync only; the super.clientTick step is Mob::body_rotation_tick in control.rs
5 SnifferAi.initCoreActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package core behaviour list (Swim, panic, sink, cooldown) built here
6 SnifferAi.initSniffingActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package Searching entry here; memory gates in update_activity
7 SnifferAi.initDigActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package Digging and FinishedDigging entries here; memory gates in update_activity
8 SnifferAi.initIdleActivity inline crates/horizon-client/src/mobs/animal_brain.rs::sniffer_package idle entries (make love with reset, temptation, look sink, RunOne) here
9 SnifferAi.Digging.canStillUse port crates/horizon-client/src/mobs/animal_brain.rs::B::tick_or_stop
10 SnifferAi.Digging.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
11 SnifferAi.FinishedDigging.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
12 SnifferAi.Searching.canStillUse port crates/horizon-client/src/mobs/animal_brain.rs::B::tick_or_stop
13 SnifferAi.Searching.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
14 SnifferAi.Sniffing.stop port crates/horizon-client/src/mobs/animal_brain.rs::B::do_stop
15 Squid.registerGoals port crates/horizon-client/src/mobs/aquatic.rs::register
16 Squid.rotateVector inline crates/horizon-client/src/mobs/aquatic.rs::spawn_ink xRot then yRot of the body angles, inside spawn_ink
17 Squid.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize S::Squid arm: ageable group with 0.05 baby chance
18 Turtle.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta HAS_EGG and LAYING_EGG as entity metadata 18 and 19
19 Turtle.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt home_pos and has_egg written here
20 Turtle.checkTurtleSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Turtle arm: below sea+4, sand, bright
21 Turtle.createAttributes skip:data attribute values come from data tables (attr lookups in mobs.rs)
22 Turtle.getAmbientSound port crates/horizon-client/src/mobs/ai.rs::ambient_sound gap: player: turtles in water or babies also play the land ambient (no Turtle arm; vanilla is silent there)
23 Turtle.playStepSound port crates/horizon-client/src/mobs/ai.rs::step_sound shamble and shamble_baby at 0.15 volume
24 Turtle.travelInWater missing player: turtles swim with generic fluid travel (0.02 base speed, 0.8 vertical drag), not 0.1 move speed, 0.9 drag and the slow sink
25 Turtle.TurtleLayEggGoal.isValidTarget port crates/horizon-client/src/mobs/turtle.rs::LayEgg::valid air above and sand below
26 Wolf.registerGoals port crates/horizon-client/src/mobs/tame.rs::register
27 Wolf.getSoundSet missing player: wolves always use the classic voice; the sound variant (big, puglin, sad, angry...) never changes what plays
28 Wolf.createAttributes skip:data attribute values come from data tables
29 Wolf.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta flags, variant and anger metadata sent to clients
30 Wolf.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt CollarColor written
31 Wolf.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt CollarColor, sound_variant and anger read
32 Wolf.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize gap: minor: sound variant is stored but no sound uses it (see getSoundSet)
33 Wolf.getAmbientSound port crates/horizon-client/src/mobs/ai.rs::ambient_sound gap: minor: angry is taken as having a target, not the anger timer
34 Wolf.die missing minor: a wolf that dies mid-shake keeps its shake state; Horizon never resets the wet and shake fields on death
35 Wolf.getHeadRollAngle port crates/horizon-client/src/mobs/tame.rs::anim
36 Wolf.applyTamingSideEffects port crates/horizon-client/src/mobs/tame.rs::set_tame
37 Wolf.hurtArmor port crates/horizon-client/src/mobs.rs::Mob::hurt_wolf_armor
38 Wolf.tryToTame port crates/horizon-client/src/game/creatures.rs::Game::interact_mob one in three tames; particles 7 or 6, sit, stop nav, clear target
39 Wolf.handleEntityEvent inline crates/horizon-client/src/mobs/tame.rs::ai_step entity events 8 and 56 folded into the shake state in ai_step
40 Wolf.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: player: wolf rope point uses full eye height, not 0.6 times it
41 Wolf.checkWolfSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules S::Wolf arm: wolves_spawnable_on and bright
42 Wolf.WolfAvoidEntityGoal.avoidLlama port crates/horizon-client/src/mobs/tame.rs::AvoidLlamas::can_use strength check inside can_use
43 WolfVariants.bootstrap skip:data registry bootstrap; variants are the WOLF_VARIANTS table in tame.rs
44 DragonFlightHistory.copyFrom skip:java ring-buffer copy; Horizon keeps the flight history as fields of Dragon
45 EndCrystal.defineSynchedData missing player: multiplayer guests never get a crystal's beam target, and the base is always shown (remote spawn ignores show_bottom)
46 EndCrystal.addAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Crystal::to_nbt
47 EndCrystal.readAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Crystal::from_nbt
48 EndCrystal.hurtClient missing unsure: client hit check that refuses dragon-sourced hits; not found in destroy_crystal
49 EndCrystal.shouldRenderAtSqrDistance skip:ui render culling so beams draw from farther away; drawing only
50 EnderDragon.<init> port crates/horizon-client/src/game/dragon.rs::Dragon::new gap: minor: parts are placed later by Game::place_dragon_parts
51 EnderDragon.isFlapping port crates/horizon-client/src/game/dragon.rs::Game::tick_dragon
52 EnderDragon.onFlap port crates/horizon-client/src/game/dragon.rs::Game::tick_dragon flap sound at volume 5 and pitch 0.8 plus random 0.3
53 EnderDragon.defineSynchedData port crates/horizon-client/src/game/dragon.rs::Game::lan_dragon_state DATA_PHASE defined as hovering on the wire
54 EnderDragon.tickPart port crates/horizon-client/src/game/dragon.rs::Game::place_dragon_parts
55 EnderDragon.getHeadYOffset inline crates/horizon-client/src/game/dragon.rs::Game::place_dragon_parts sitting gives -1, else flight sample 5 minus sample 0
56 EnderDragon.knockBack port crates/horizon-client/src/game/dragon.rs::Game::dragon_contacts wing zones push players
57 EnderDragon.handleKillingBlow inline crates/horizon-client/src/game/dragon.rs::Dragon::hurt health set to 1 and dying phase unless sitting
58 EnderDragon.knockback missing minor: a hit does not push the dragon back outside the sitting phase
59 EnderDragon.findClosestNode port crates/horizon-client/src/game/dragon.rs::Game::closest_node
60 EnderDragon.findPath port crates/horizon-client/src/game/dragon.rs::Game::dragon_path
61 EnderDragon.reconstructPath inline crates/horizon-client/src/game/dragon.rs::Game::dragon_path path list built inside the A* search
62 EnderDragon.addAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Dragon::to_nbt
63 EnderDragon.readAdditionalSaveData port crates/horizon-client/src/game/dragon.rs::Dragon::from_nbt gap: minor: sitting_damage_received is not read back
64 EnderDragon.getHeadLookVector port crates/horizon-client/src/game/dragon.rs::Game::dragon_look
65 EnderDragon.onSyncedDataUpdated port crates/horizon-client/src/game/dragon.rs::Game::remote_dragon_data phase set on guests from synced data
66 EnderDragon.recreateFromPacket port crates/horizon-client/src/game/dragon.rs::Game::spawn_remote_dragon gap: minor: part entity ids are not assigned; parts are indexes
67 EnderDragonPart.hurtServer port crates/horizon-client/src/game/dragon.rs::Dragon::hurt hits route to the dragon with the part index
68 EnderDragonPart.is skip:other identity check; parts are SPECIAL+index ids in special_targets
69 DragonStrafePlayerPhase.doServerTick inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase Strafe arm: charge, sight, fireball, then holding pattern
70 DragonStrafePlayerPhase.findNewTarget port crates/horizon-client/src/game/dragon.rs::Game::ring_path
71 DragonStrafePlayerPhase.navigateToNextPathNode port crates/horizon-client/src/game/dragon.rs::Game::next_target
72 DragonStrafePlayerPhase.begin inline crates/horizon-client/src/game/dragon.rs::Game::tick_phase fresh strafe state (charge 0, no path or target) when entered
73 EnderDragonPhaseManager.getPhase skip:java lazy cache of phase instances; Horizon phases are enum values
74 WitherBoss.createNavigation port crates/horizon-client/src/mobs/wither.rs::register gap: minor: door and float flags are not set here
75 WitherBoss.registerGoals port crates/horizon-client/src/mobs/wither.rs::register
76 WitherBoss.defineSynchedData port crates/horizon-client/src/game/lan.rs::mob_meta gap: minor: only heads A and B are synced; the invulnerable counter is sent at index 19, the slot of target C
77 WitherBoss.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt Invul read; boss bar name not checked here
78 WitherBoss.canDestroy inline crates/horizon-client/src/mobs/wither.rs::custom_server_ai_step air and wither-immune checks in the block loop
79 WitherBoss.getHeadX port crates/horizon-client/src/mobs/wither.rs::head_pos
80 WitherBoss.getHeadY port crates/horizon-client/src/mobs/wither.rs::head_pos
81 WitherBoss.getHeadZ port crates/horizon-client/src/mobs/wither.rs::head_pos
82 WitherBoss.rotlerp port crates/horizon-client/src/mobs/control.rs::rotlerp result wrapped into 0 to 360, equal modulo 360
83 WitherBoss.performRangedAttack port crates/horizon-client/src/mobs/wither.rs::shoot
84 WitherBoss.createAttributes skip:data attribute values come from data tables
85 WitherBoss.isPowered port crates/horizon-client/src/mobs/wither.rs::powered
86 ArmorStand.refreshDimensions skip:other no cached dimensions: bounds are computed from position, small and marker
87 ArmorStand.defineSynchedData port crates/horizon-client/src/game/lan_entities.rs::Game::lan_object_states flag and pose values sent to clients; defaults are the DEFAULT_POSE table
88 ArmorStand.canUseSlot inline crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand hand slots gated by show_arms; gap: minor: body and saddle are never offered and disabled bits are not read
89 ArmorStand.pushEntities missing minor: armour stands do not push nearby minecarts
90 ArmorStand.interact port crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand
91 ArmorStand.getClickedSlot inline crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand click height picks feet, chest, legs, head or offhand
92 ArmorStand.isDisabled inline crates/horizon-client/src/game/armor_stands.rs::Game::interact_armor_stand gap: minor: disabled-slot bits are not read; hands gated by show_arms only
93 ArmorStand.handleEntityEvent inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand event 32 becomes the wobble timer and the hit sound
94 ArmorStand.showBreakingParticles missing player: no plank particles when a stand breaks, by a creative hand or the second hit
95 ArmorStand.causeDamage port crates/horizon-client/src/entities.rs::ArmorStand::environment_tick gap: minor: fire damage only (4 per second burning, 0.15 per contact); hit and explosion paths are elsewhere
96 ArmorStand.brokenByPlayer inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand stand item dropped, then the equipment
97 ArmorStand.brokenByAnything inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand gap: minor: vanishing-curse items are not filtered on the hand-break path, only on the burn path
98 ArmorStand.playBrokenSound inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand break sound on both break paths
99 ArmorStand.setYBodyRot skip:other client rotation setter from packets; a stand turns only with its yaw field
100 ArmorStand.setYHeadRot skip:other client rotation setter from packets; a stand turns only with its yaw field
101 ArmorStand.kill inline crates/horizon-client/src/game/armor_stands.rs::Game::attack_armor_stand removes the stand; no game event
102 ArmorStand.setSmall port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt Small tag
103 ArmorStand.isSmall skip:other accessor; reads the small field
104 ArmorStand.setShowArms port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt ShowArms tag
105 ArmorStand.showArms skip:other accessor; reads the show_arms field
106 ArmorStand.setNoBasePlate port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt NoBasePlate tag
107 ArmorStand.showBasePlate skip:other accessor; reads the no_base_plate field
108 ArmorStand.setMarker port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt Marker tag
109 ArmorStand.isMarker skip:other accessor; reads the marker field
110 ArmorStand.setBit skip:other packed-flag helper; Horizon keeps separate bools and packs them when sent
111 ArmorStand.skipAttackInteraction missing minor: adventure-mode protection on stand hits is not checked
112 ArmorStand.onSyncedDataUpdated skip:other client refresh when flags sync; bounds are computed on demand
113 ArmorStand.getDimensionsMarker inline crates/horizon-client/src/game/armor_stands.rs::Game::armor_stand_hit marker stands are skipped, so they have no box
114 ArmorStand.getLightProbePosition skip:ui render light probe for markers; drawing only
115 ArmorStand.setArmorStandPose port crates/horizon-client/src/entity_nbt.rs::armor_stand_from_nbt Pose tag read into the six pose parts
116 ArmorStand.getArmorStandPose port crates/horizon-client/src/entity_nbt.rs::armor_stand_to_nbt Pose tag written from the six pose parts
117 BlockAttachedEntity.skipAttackInteraction inline crates/horizon-client/src/game/cushions.rs::Game::attack_cushion the mayInteract gate and the break; frames and paintings keep their own copies
118 BlockAttachedEntity.kill inline crates/horizon-client/src/game/cushions.rs::Game::break_cushion removal and the break; no game event
119 BlockAttachedEntity.ignoreExplosion missing player: explosions do not break paintings, item frames, cushions or armour stands; only players, mobs, items, TNT and minecarts are hurt
120 BlockAttachedEntity.move missing minor: a piston push does not break a cushion, painting or frame here
121 BlockAttachedEntity.push missing minor: a push from a blast or piston does not break a cushion, painting or frame
122 BlockAttachedEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::cushion_from_nbt gap: minor: no 16-block check on block_pos; the stored block is used as is
123 Cushion.isBreakingDeniedFor inline crates/horizon-client/src/game/cushions.rs::Game::attack_cushion the may_build gate
124 Cushion.isBreakingDeniedAtPosFor inline crates/horizon-client/src/game/cushions.rs::Game::attack_cushion the mayInteract gate, folded into the one may_build check
125 Cushion.tickAtCheckInterval inline crates/horizon-client/src/game/cushions.rs::Game::tick_cushions gap: minor: fluid effects not applied; fire and survival checked every 100 ticks
126 Cushion.thunderHit missing player: a lightning strike does not break a cushion
127 Cushion.setPos skip:other position field write; the block position is kept apart in cushion.pos
128 Cushion.canBePlacedAt port crates/horizon-client/src/cushion.rs::can_place
129 Cushion.wouldSurviveAt port crates/horizon-client/src/cushion.rs::survives
130 Cushion.hasAnchorBelow inline crates/horizon-client/src/cushion.rs::survives anchor scan under the box
131 Cushion.isCoveredBySuffocatingBlocks inline crates/horizon-client/src/cushion.rs::survives per-block suffocating test through PlacementWorld::suffocating
132 Cushion.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::cushion_from_nbt color tag read
133 Cushion.get port crates/horizon-client/src/game/pick_entity.rs::Game::entity_pick_result the pick gives the cushion item in its colour
134 Cushion.applyImplicitComponent port crates/horizon-client/src/game/cushions.rs::Game::place_cushion colour from the stack's cushion colour data
135 HangingEntity.onSyncedDataUpdated skip:other client resync of the facing; Horizon keeps the facing as a field
136 HangingEntity.setDirection skip:other facing field write; bounds are derived on demand from the facing
137 HangingEntity.recalculateBoundingBox skip:other bounds are derived on demand from the facing
138 HangingEntity.calculateSupportBox inline crates/horizon-client/src/game/paintings.rs::Game::painting_survives support box moved half a block into the wall
139 HangingEntity.canCoexist port crates/horizon-client/src/game/paintings.rs::Game::painting_survives gap: minor: only other paintings are checked for overlap; item frames and the same-facing rule are not
140 HangingEntity.hasLevelCollision port crates/horizon-client/src/game/paintings.rs::Game::painting_survives block collision of the box
+139
View File
@@ -0,0 +1,139 @@
ItemFrame.defineSynchedData skip:other entity data defaults; ItemFrame starts with item None and rotation 0 in place_item_frame
ItemFrame.setDirection inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry facing sets the pose in frame_geometry; the box comes from ItemFrame::bounds
ItemFrame.recalculateBoundingBox inline crates/horizon-client/src/entities.rs::ItemFrame::bounds boxes are computed on demand; the position sync codec is network-only
ItemFrame.shouldDamageDropItem missing player: explosions never reach item frames here, so a blast does not break a frame and drop its item as in vanilla
ItemFrame.canHurtWhenFixed missing minor: creative players cannot break a fixed frame (vanilla lets them); attack_frame returns early for fixed frames
ItemFrame.hurtClient inline crates/horizon-client/src/game/frames.rs::Game::attack_frame gap: minor: no separate client-side fixed-frame gate; the creative exception is missing
ItemFrame.removeFramedMap inline crates/horizon-client/src/game/maps.rs::Game::lan_map_updates frame map markers come from item_frames each tick, so a removed frame needs no step
ItemFrame.getSlot missing minor: no slot 0 access for item frames in the item command path
ItemFrame.onSyncedDataUpdated skip:other network data-sync hook; the item is read from the frame field on demand
ItemFrame.setRotation inline crates/horizon-client/src/game/frames.rs::Game::interact_frame the rotate-by-one step; the neighbour update is in frame_output_changed
ItemFrame.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_frame_from_nbt gap: minor: Facing defaults to 2 where vanilla defaults to DOWN
ItemFrame.getFrameItemStackWithData missing minor: a broken frame never carries its custom name; drop_frame_items builds a plain item_frame stack
ItemFrame.getVisualRotationYInDegrees inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry the 45 degree step per rotation step is drawn in frame_geometry
LeashFenceKnotEntity.recalculateBoundingBox port crates/horizon-client/src/mobs/leash.rs::knot_state position and box from the block position
LeashFenceKnotEntity.getOrCreateKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot knots are not entities in game; the knot is used when a lead is tied
LeashFenceKnotEntity.getKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot the existing knot is the leashed-holder check at the fence position
LeashFenceKnotEntity.createKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot no in-game knot entity is created; LAN knot ids are assigned in lan_assign_ids
Painting.defineSynchedData skip:other entity data default variant; Horizon picks the variant in place_painting
Painting.get port crates/horizon-client/src/game/paintings.rs::PaintingVariants::get lookup of the variant by id; there is no component getter
Painting.applyImplicitComponent missing minor: a painting variant component on the item is ignored; placement always picks a random fitting variant
Painting.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::painting_from_nbt
Painting.dropItem port crates/horizon-client/src/game/paintings.rs::Game::break_painting gap: minor: the dropped painting item keeps no custom name
PaintingVariants.register skip:data registry bootstrap; variants load from the data files in PaintingVariants::load
FallingBlockEntity.callOnBrokenAfterFall inline crates/horizon-client/src/game/falling_damage.rs::Game::finish_falling_block anvil 1029 and brushable 2001 events are here; gap: minor: no dripstone landing sound on a broken landing
FallingBlockEntity.causeFallDamage port crates/horizon-client/src/game/falling_damage.rs::Game::finish_falling_block gap: minor: pointed dripstone uses the generic falling_block damage kind
FallingBlockEntity.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::falling_block_to_nbt gap: minor: TileEntityData of the carried block is not written
FallingBlockEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::falling_block_from_nbt gap: minor: TileEntityData is not read; damage settings come from falling_block::Damage::from_nbt
FallingBlockEntity.fillCrashReportCategory skip:debug crash report detail
FallingBlockEntity.getTypeName missing player: death texts for falling blocks cannot name the block (Falling Anvil) because the hit has no source entity
FallingBlockEntity.teleport missing unsure: no portal travel for falling blocks found in nether_portal.rs and no end-arrival tick
ItemEntity.restoreFrom skip:other the ItemEntity value moves between levels with thrower kept; nothing to copy
ItemEntity.setFluidMovement inline crates/horizon-client/src/entities.rs::ItemEntity::tick water and lava drag and buoyancy are applied in tick
ItemEntity.fireImmune inline crates/horizon-client/src/entities.rs::ItemEntity::environment_tick fire immunity via resists_fire in environment_tick
ItemEntity.hurtClient skip:other client-side hurt prediction; items are not attackable, so there is no client-side hurt path
ItemEntity.hurtServer inline crates/horizon-client/src/game/explosion.rs::Game::explosion_hurt_entities gap: minor: explosions destroy items at damage 5 without subtracting health; fire and lava hurt are in environment_tick
ItemEntity.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_entity_to_nbt
ItemEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_entity_from_nbt a missing Item returns None, which matches the discard
ItemEntity.getName missing minor: a dropped item's name (custom or item name) is not used anywhere in Horizon
ItemEntity.teleport inline crates/horizon-client/src/entities.rs::merge_with_neighbours the arrival merge is the normal per-tick merge, not a teleport step
ItemEntity.getVisualRotationYInDegrees inline crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry spin is applied in radians there; no degree conversion
ItemEntity.getSlot missing unsure: no slot 0 access for dropped items found in commands.rs
PrimedTnt.defineSynchedData skip:other fuse and block state are struct fields; spawn sets fuse 80; the block is always TNT
PrimedTnt.explode inline crates/horizon-client/src/game/tnt.rs::Game::tick_tnt gap: minor: power fixed at 4; no explosion_power and no used-portal damage calculator
PrimedTnt.addAdditionalSaveData missing minor: primed TNT is not written to saves, so a lit TNT is lost on save and reload
PrimedTnt.restoreFrom missing minor: PrimedTnt has no owner field, so the igniter is not kept through portal moves
PrimedTnt.teleport missing unsure: no used-portal flag on PrimedTnt; the portal damage calculator is not applied
Blaze.registerGoals port crates/horizon-client/src/mobs/nether.rs::register_blaze gap: minor: MoveTowardsRestriction goal (priority 5) is not registered
Blaze.createAttributes skip:data attribute defaults come from data tables
Blaze.isCharged inline crates/horizon-client/src/mobs/nether.rs::BlazeAttack::tick the charged state is m.extra.flag, set in the attack goal tick
Blaze.setCharged inline crates/horizon-client/src/mobs/nether.rs::BlazeAttack::tick same flag, set when a charge starts and ends
Creeper.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register
Creeper.getMaxFallDistance missing minor: the creeper's own comfortable fall distance is not used; nav uses the generic mob value
Creeper.defineSynchedData skip:other swell, powered and ignited are Mob fields
Creeper.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: Fuse and ExplosionRadius are written as constants 30 and 3, not the creeper's values
Creeper.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit
Creeper.spawnLingeringCloud missing player: a creeper that explodes with potion effects leaves no lingering area cloud
ElderGuardian.createAttributes skip:data attribute defaults come from data tables
Enderman.registerGoals port crates/horizon-client/src/mobs/enderman.rs::register gap: minor: no anger-reset target goal (priority 4)
Enderman.createAttributes skip:data attribute defaults come from data tables
Enderman.setTarget inline crates/horizon-client/src/mobs/enderman.rs::custom_server_ai_step the creepy flag is set per tick there; the attack speed boost is attacking_speed
Enderman.defineSynchedData skip:other carried block, creepy and stared-at state are Mob extra fields
Enderman.playStareSound inline crates/horizon-client/src/mobs/enderman.rs::LookForPlayer::tick gap: minor: the 400-tick throttle of the stare sound is not seen
Enderman.onSyncedDataUpdated skip:other client sync hook; the stare sound is played server-side from LookForPlayer
Enderman.addAdditionalSaveData missing minor: the carried block is not written to saves
Enderman.readAdditionalSaveData missing minor: the carried block is not read from saves
Enderman.canRandomlyTeleportTo port crates/horizon-client/src/mobs/enderman.rs::teleport_to the water check on the ground block
Enderman.repeatedlyTryToTeleport port crates/horizon-client/src/mobs/enderman.rs::ai_step pending teleports retry up to 64 times
Enderman.dropCustomDeathLoot missing player: an Enderman killed while holding a block drops no block
Enderman.hurtWithCleanWater missing player: a thrown splash water potion does nothing to an Enderman; vanilla hurts it
Enderman.EndermanLeaveBlockGoal.canPlaceBlock inline crates/horizon-client/src/mobs/enderman.rs::LeaveBlock::tick gap: minor: the place-on blacklist tag and the carried block canSurvive check are not in the tick
Endermite.registerGoals port crates/horizon-client/src/mobs/ai.rs::register Hostile family defaults; gap: unsure: the ClimbOnTopOfPowderSnow goal is not checked
Endermite.createAttributes skip:data attribute defaults come from data tables
Endermite.checkEndermiteSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm
Ghast.registerGoals port crates/horizon-client/src/mobs/nether.rs::register_ghast
Ghast.isInvulnerableTo inline crates/horizon-client/src/mobs.rs::Mob::damage_with reflected fireball and fire immunity checks are in damage_with
Ghast.createAttributes skip:data attribute defaults come from data tables
Ghast.checkGhastSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
Ghast.RandomFloatAroundGoal.getSuitableFlyToPosition port crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::start gap: minor: plain Ghast uses one random point in RandomFloatAround::start; the 64-try search runs for happy ghasts here
Ghast.RandomFloatAroundGoal.isGoodTarget port crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::good
Ghast.RandomFloatAroundGoal.chooseRandomPosition inline crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::start the random point pick is in start
Ghast.RandomFloatAroundGoal.chooseRandomPositionWithRestriction inline crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::start the home check is in start; plain ghasts have no home
Guardian.registerGoals port crates/horizon-client/src/mobs/guardian.rs::register gap: minor: no MoveTowardsRestriction goal (5) and no look-at-guardian goal (8)
Guardian.createAttributes skip:data attribute defaults come from data tables
Guardian.defineSynchedData skip:other moving flag and attack target are Mob extra state read by beam
Guardian.hasActiveAttackTarget inline crates/horizon-client/src/mobs/guardian.rs::beam the beam is shown while the flag and target are set
Guardian.getActiveAttackTarget inline crates/horizon-client/src/mobs/guardian.rs::beam the target is m.ai.target
Guardian.checkGuardianSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Guardian and ElderGuardian arm
Guardian.GuardianAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/guardian.rs::GuardianAttack::can_continue
Guardian.GuardianAttackSelector.test inline crates/horizon-client/src/mobs/guardian.rs::register the selector is the player, squid and axolotl beyond 9 filters in register
Monster.updateNoActionTime missing minor: noActionTime is not kept, so the light-driven idle timer that feeds despawn is absent
Monster.getProjectile missing unsure: no held-ammo choice for mobs found in mobs/*.rs
PatrollingMonster.addAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::write_nbt
PatrollingMonster.readAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::read_nbt
PatrollingMonster.checkPatrollingMonsterSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Pillager arm: block light 8 or less, then mob rules
PatrollingMonster.LongDistancePatrolGoal.findPatrolCompanions port crates/horizon-client/src/mobs/raider.rs::companions
Phantom.registerGoals port crates/horizon-client/src/mobs/phantom.rs::register
Phantom.updatePhantomSizeInfo missing minor: vanilla sets size only from NBT, and Horizon has no size, so no scale or attack bonus
Phantom.finalizeSpawn inline crates/horizon-client/src/mobs/phantom.rs::register the anchor 5 blocks above is set at creation; size 0
Phantom.readAdditionalSaveData missing unsure: anchor_pos and size are not read for phantoms
Phantom.addAdditionalSaveData missing unsure: anchor_pos and size are not written for phantoms
Phantom.getDefaultDimensions missing minor: no size scale on the phantom box; size is 0 unless NBT sets it
Phantom.PhantomBodyRotationControl.clientTick inline crates/horizon-client/src/mobs/phantom.rs::move_control the head yaw follows the body yaw there
Phantom.PhantomMoveTargetGoal.touchingTarget inline crates/horizon-client/src/mobs/phantom.rs::CircleAroundAnchor::tick the squared distance under 4 check near the move target
Phantom.PhantomSweepAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/phantom.rs::SweepAttack::can_continue the cat hiss and scare check
Ravager.registerGoals port crates/horizon-client/src/mobs/ravager.rs::register
Ravager.updateControlFlags missing unsure: no rider control-flag switch for ravagers in ravager.rs
Ravager.createAttributes skip:data attribute defaults come from data tables
Ravager.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt AttackTick, StunTick and RoarTick are written there
Ravager.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt the same three tick values are read there
Ravager.stunEffect port crates/horizon-client/src/mobs/ravager.rs::ai_step the stun particle is emitted from ai_step
Ravager.hasLineOfSight missing unsure: no stunned or roaring line-of-sight cut-off in ravager.rs
Ravager.applyRoarKnockbackClient inline crates/horizon-client/src/mobs/ravager.rs::roar the roar push is applied in roar
Ravager.strongKnockback inline crates/horizon-client/src/mobs/ravager.rs::roar the push of 4 along the direction is in roar
Ravager.addRoarParticleEffects inline crates/horizon-client/src/mobs/ravager.rs::roar the poof particles are emitted in roar
Shulker.registerGoals port crates/horizon-client/src/mobs/shulker.rs::register gap: minor: no defense target goal (priority 3)
Shulker.defineSynchedData skip:other attach face, peek and colour are Mob extra fields
Shulker.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt AttachFace, Peek and Color are read there
Shulker.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt AttachFace, Peek and Color are written there
Shulker.findNewAttachment inline crates/horizon-client/src/mobs/shulker.rs::tick keeps its face or teleports in tick, through attachable and teleport
Shulker.makeBoundingBox port crates/horizon-client/src/mobs/shulker.rs::progress_aabb
Shulker.getDefaultDimensions inline crates/horizon-client/src/mobs/shulker.rs::progress_aabb gap: minor: the down-face height scale is not seen here
Shulker.startRiding missing unsure: no attach-face reset to DOWN when a shulker mounts a vehicle in shulker.rs
Shulker.stopRiding missing unsure: no body yaw reset after a shulker dismounts in shulker.rs
Shulker.move missing unsure: no shulker-box move type (teleport) found in the piston code
Shulker.findAttachableSurface port crates/horizon-client/src/mobs/shulker.rs::attachable
Shulker.isPositionBlocked inline crates/horizon-client/src/mobs/shulker.rs::can_stay_at the blocked-position check is part of can_stay_at
Shulker.onSyncedDataUpdated skip:other network sync hook; the box is computed from the face on demand
Shulker.getRenderPosition missing unsure: no render slide after a shulker teleport in shulker.rs
Shulker.setVariant inline crates/horizon-client/src/mobs/shulker.rs::register colour comes from spawn data; NO_COLOR when unset
Shulker.getColor inline crates/horizon-client/src/mobs/shulker.rs::texture colour is read from extra.color for the texture
Shulker.get skip:other component getter; Horizon reads extra.color directly
Shulker.applyImplicitComponent missing minor: a shulker spawned with a SHULKER_COLOR component ignores it
Shulker.ShulkerDefenseAttackGoal.getTargetSearchArea missing minor: shulkers do not defend nearby shulkers; there is no defense target goal
Shulker.ShulkerNearestAttackGoal.getTargetSearchArea inline crates/horizon-client/src/mobs/shulker.rs::register the 4-deep search box is the when filter in register
Shulker.ShulkerPeekGoal.canContinueToUse port crates/horizon-client/src/mobs/shulker.rs::Peek::can_continue
Silverfish.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register
Silverfish.createAttributes skip:data attribute defaults come from data tables
Silverfish.getWalkTargetValue missing minor: no infested-host path value (10) for silverfish in ai.rs walk_target_value
Silverfish.checkSilverfishSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm
1 ItemFrame.defineSynchedData skip:other entity data defaults; ItemFrame starts with item None and rotation 0 in place_item_frame
2 ItemFrame.setDirection inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry facing sets the pose in frame_geometry; the box comes from ItemFrame::bounds
3 ItemFrame.recalculateBoundingBox inline crates/horizon-client/src/entities.rs::ItemFrame::bounds boxes are computed on demand; the position sync codec is network-only
4 ItemFrame.shouldDamageDropItem missing player: explosions never reach item frames here, so a blast does not break a frame and drop its item as in vanilla
5 ItemFrame.canHurtWhenFixed missing minor: creative players cannot break a fixed frame (vanilla lets them); attack_frame returns early for fixed frames
6 ItemFrame.hurtClient inline crates/horizon-client/src/game/frames.rs::Game::attack_frame gap: minor: no separate client-side fixed-frame gate; the creative exception is missing
7 ItemFrame.removeFramedMap inline crates/horizon-client/src/game/maps.rs::Game::lan_map_updates frame map markers come from item_frames each tick, so a removed frame needs no step
8 ItemFrame.getSlot missing minor: no slot 0 access for item frames in the item command path
9 ItemFrame.onSyncedDataUpdated skip:other network data-sync hook; the item is read from the frame field on demand
10 ItemFrame.setRotation inline crates/horizon-client/src/game/frames.rs::Game::interact_frame the rotate-by-one step; the neighbour update is in frame_output_changed
11 ItemFrame.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_frame_from_nbt gap: minor: Facing defaults to 2 where vanilla defaults to DOWN
12 ItemFrame.getFrameItemStackWithData missing minor: a broken frame never carries its custom name; drop_frame_items builds a plain item_frame stack
13 ItemFrame.getVisualRotationYInDegrees inline crates/horizon-client/src/game/frames.rs::Game::frame_geometry the 45 degree step per rotation step is drawn in frame_geometry
14 LeashFenceKnotEntity.recalculateBoundingBox port crates/horizon-client/src/mobs/leash.rs::knot_state position and box from the block position
15 LeashFenceKnotEntity.getOrCreateKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot knots are not entities in game; the knot is used when a lead is tied
16 LeashFenceKnotEntity.getKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot the existing knot is the leashed-holder check at the fence position
17 LeashFenceKnotEntity.createKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot no in-game knot entity is created; LAN knot ids are assigned in lan_assign_ids
18 Painting.defineSynchedData skip:other entity data default variant; Horizon picks the variant in place_painting
19 Painting.get port crates/horizon-client/src/game/paintings.rs::PaintingVariants::get lookup of the variant by id; there is no component getter
20 Painting.applyImplicitComponent missing minor: a painting variant component on the item is ignored; placement always picks a random fitting variant
21 Painting.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::painting_from_nbt
22 Painting.dropItem port crates/horizon-client/src/game/paintings.rs::Game::break_painting gap: minor: the dropped painting item keeps no custom name
23 PaintingVariants.register skip:data registry bootstrap; variants load from the data files in PaintingVariants::load
24 FallingBlockEntity.callOnBrokenAfterFall inline crates/horizon-client/src/game/falling_damage.rs::Game::finish_falling_block anvil 1029 and brushable 2001 events are here; gap: minor: no dripstone landing sound on a broken landing
25 FallingBlockEntity.causeFallDamage port crates/horizon-client/src/game/falling_damage.rs::Game::finish_falling_block gap: minor: pointed dripstone uses the generic falling_block damage kind
26 FallingBlockEntity.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::falling_block_to_nbt gap: minor: TileEntityData of the carried block is not written
27 FallingBlockEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::falling_block_from_nbt gap: minor: TileEntityData is not read; damage settings come from falling_block::Damage::from_nbt
28 FallingBlockEntity.fillCrashReportCategory skip:debug crash report detail
29 FallingBlockEntity.getTypeName missing player: death texts for falling blocks cannot name the block (Falling Anvil) because the hit has no source entity
30 FallingBlockEntity.teleport missing unsure: no portal travel for falling blocks found in nether_portal.rs and no end-arrival tick
31 ItemEntity.restoreFrom skip:other the ItemEntity value moves between levels with thrower kept; nothing to copy
32 ItemEntity.setFluidMovement inline crates/horizon-client/src/entities.rs::ItemEntity::tick water and lava drag and buoyancy are applied in tick
33 ItemEntity.fireImmune inline crates/horizon-client/src/entities.rs::ItemEntity::environment_tick fire immunity via resists_fire in environment_tick
34 ItemEntity.hurtClient skip:other client-side hurt prediction; items are not attackable, so there is no client-side hurt path
35 ItemEntity.hurtServer inline crates/horizon-client/src/game/explosion.rs::Game::explosion_hurt_entities gap: minor: explosions destroy items at damage 5 without subtracting health; fire and lava hurt are in environment_tick
36 ItemEntity.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_entity_to_nbt
37 ItemEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_entity_from_nbt a missing Item returns None, which matches the discard
38 ItemEntity.getName missing minor: a dropped item's name (custom or item name) is not used anywhere in Horizon
39 ItemEntity.teleport inline crates/horizon-client/src/entities.rs::merge_with_neighbours the arrival merge is the normal per-tick merge, not a teleport step
40 ItemEntity.getVisualRotationYInDegrees inline crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry spin is applied in radians there; no degree conversion
41 ItemEntity.getSlot missing unsure: no slot 0 access for dropped items found in commands.rs
42 PrimedTnt.defineSynchedData skip:other fuse and block state are struct fields; spawn sets fuse 80; the block is always TNT
43 PrimedTnt.explode inline crates/horizon-client/src/game/tnt.rs::Game::tick_tnt gap: minor: power fixed at 4; no explosion_power and no used-portal damage calculator
44 PrimedTnt.addAdditionalSaveData missing minor: primed TNT is not written to saves, so a lit TNT is lost on save and reload
45 PrimedTnt.restoreFrom missing minor: PrimedTnt has no owner field, so the igniter is not kept through portal moves
46 PrimedTnt.teleport missing unsure: no used-portal flag on PrimedTnt; the portal damage calculator is not applied
47 Blaze.registerGoals port crates/horizon-client/src/mobs/nether.rs::register_blaze gap: minor: MoveTowardsRestriction goal (priority 5) is not registered
48 Blaze.createAttributes skip:data attribute defaults come from data tables
49 Blaze.isCharged inline crates/horizon-client/src/mobs/nether.rs::BlazeAttack::tick the charged state is m.extra.flag, set in the attack goal tick
50 Blaze.setCharged inline crates/horizon-client/src/mobs/nether.rs::BlazeAttack::tick same flag, set when a charge starts and ends
51 Creeper.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register
52 Creeper.getMaxFallDistance missing minor: the creeper's own comfortable fall distance is not used; nav uses the generic mob value
53 Creeper.defineSynchedData skip:other swell, powered and ignited are Mob fields
54 Creeper.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: Fuse and ExplosionRadius are written as constants 30 and 3, not the creeper's values
55 Creeper.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit
56 Creeper.spawnLingeringCloud missing player: a creeper that explodes with potion effects leaves no lingering area cloud
57 ElderGuardian.createAttributes skip:data attribute defaults come from data tables
58 Enderman.registerGoals port crates/horizon-client/src/mobs/enderman.rs::register gap: minor: no anger-reset target goal (priority 4)
59 Enderman.createAttributes skip:data attribute defaults come from data tables
60 Enderman.setTarget inline crates/horizon-client/src/mobs/enderman.rs::custom_server_ai_step the creepy flag is set per tick there; the attack speed boost is attacking_speed
61 Enderman.defineSynchedData skip:other carried block, creepy and stared-at state are Mob extra fields
62 Enderman.playStareSound inline crates/horizon-client/src/mobs/enderman.rs::LookForPlayer::tick gap: minor: the 400-tick throttle of the stare sound is not seen
63 Enderman.onSyncedDataUpdated skip:other client sync hook; the stare sound is played server-side from LookForPlayer
64 Enderman.addAdditionalSaveData missing minor: the carried block is not written to saves
65 Enderman.readAdditionalSaveData missing minor: the carried block is not read from saves
66 Enderman.canRandomlyTeleportTo port crates/horizon-client/src/mobs/enderman.rs::teleport_to the water check on the ground block
67 Enderman.repeatedlyTryToTeleport port crates/horizon-client/src/mobs/enderman.rs::ai_step pending teleports retry up to 64 times
68 Enderman.dropCustomDeathLoot missing player: an Enderman killed while holding a block drops no block
69 Enderman.hurtWithCleanWater missing player: a thrown splash water potion does nothing to an Enderman; vanilla hurts it
70 Enderman.EndermanLeaveBlockGoal.canPlaceBlock inline crates/horizon-client/src/mobs/enderman.rs::LeaveBlock::tick gap: minor: the place-on blacklist tag and the carried block canSurvive check are not in the tick
71 Endermite.registerGoals port crates/horizon-client/src/mobs/ai.rs::register Hostile family defaults; gap: unsure: the ClimbOnTopOfPowderSnow goal is not checked
72 Endermite.createAttributes skip:data attribute defaults come from data tables
73 Endermite.checkEndermiteSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm
74 Ghast.registerGoals port crates/horizon-client/src/mobs/nether.rs::register_ghast
75 Ghast.isInvulnerableTo inline crates/horizon-client/src/mobs.rs::Mob::damage_with reflected fireball and fire immunity checks are in damage_with
76 Ghast.createAttributes skip:data attribute defaults come from data tables
77 Ghast.checkGhastSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules
78 Ghast.RandomFloatAroundGoal.getSuitableFlyToPosition port crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::start gap: minor: plain Ghast uses one random point in RandomFloatAround::start; the 64-try search runs for happy ghasts here
79 Ghast.RandomFloatAroundGoal.isGoodTarget port crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::good
80 Ghast.RandomFloatAroundGoal.chooseRandomPosition inline crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::start the random point pick is in start
81 Ghast.RandomFloatAroundGoal.chooseRandomPositionWithRestriction inline crates/horizon-client/src/mobs/happy_ghast.rs::FloatAround::start the home check is in start; plain ghasts have no home
82 Guardian.registerGoals port crates/horizon-client/src/mobs/guardian.rs::register gap: minor: no MoveTowardsRestriction goal (5) and no look-at-guardian goal (8)
83 Guardian.createAttributes skip:data attribute defaults come from data tables
84 Guardian.defineSynchedData skip:other moving flag and attack target are Mob extra state read by beam
85 Guardian.hasActiveAttackTarget inline crates/horizon-client/src/mobs/guardian.rs::beam the beam is shown while the flag and target are set
86 Guardian.getActiveAttackTarget inline crates/horizon-client/src/mobs/guardian.rs::beam the target is m.ai.target
87 Guardian.checkGuardianSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Guardian and ElderGuardian arm
88 Guardian.GuardianAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/guardian.rs::GuardianAttack::can_continue
89 Guardian.GuardianAttackSelector.test inline crates/horizon-client/src/mobs/guardian.rs::register the selector is the player, squid and axolotl beyond 9 filters in register
90 Monster.updateNoActionTime missing minor: noActionTime is not kept, so the light-driven idle timer that feeds despawn is absent
91 Monster.getProjectile missing unsure: no held-ammo choice for mobs found in mobs/*.rs
92 PatrollingMonster.addAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::write_nbt
93 PatrollingMonster.readAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::read_nbt
94 PatrollingMonster.checkPatrollingMonsterSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Pillager arm: block light 8 or less, then mob rules
95 PatrollingMonster.LongDistancePatrolGoal.findPatrolCompanions port crates/horizon-client/src/mobs/raider.rs::companions
96 Phantom.registerGoals port crates/horizon-client/src/mobs/phantom.rs::register
97 Phantom.updatePhantomSizeInfo missing minor: vanilla sets size only from NBT, and Horizon has no size, so no scale or attack bonus
98 Phantom.finalizeSpawn inline crates/horizon-client/src/mobs/phantom.rs::register the anchor 5 blocks above is set at creation; size 0
99 Phantom.readAdditionalSaveData missing unsure: anchor_pos and size are not read for phantoms
100 Phantom.addAdditionalSaveData missing unsure: anchor_pos and size are not written for phantoms
101 Phantom.getDefaultDimensions missing minor: no size scale on the phantom box; size is 0 unless NBT sets it
102 Phantom.PhantomBodyRotationControl.clientTick inline crates/horizon-client/src/mobs/phantom.rs::move_control the head yaw follows the body yaw there
103 Phantom.PhantomMoveTargetGoal.touchingTarget inline crates/horizon-client/src/mobs/phantom.rs::CircleAroundAnchor::tick the squared distance under 4 check near the move target
104 Phantom.PhantomSweepAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/phantom.rs::SweepAttack::can_continue the cat hiss and scare check
105 Ravager.registerGoals port crates/horizon-client/src/mobs/ravager.rs::register
106 Ravager.updateControlFlags missing unsure: no rider control-flag switch for ravagers in ravager.rs
107 Ravager.createAttributes skip:data attribute defaults come from data tables
108 Ravager.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt AttackTick, StunTick and RoarTick are written there
109 Ravager.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt the same three tick values are read there
110 Ravager.stunEffect port crates/horizon-client/src/mobs/ravager.rs::ai_step the stun particle is emitted from ai_step
111 Ravager.hasLineOfSight missing unsure: no stunned or roaring line-of-sight cut-off in ravager.rs
112 Ravager.applyRoarKnockbackClient inline crates/horizon-client/src/mobs/ravager.rs::roar the roar push is applied in roar
113 Ravager.strongKnockback inline crates/horizon-client/src/mobs/ravager.rs::roar the push of 4 along the direction is in roar
114 Ravager.addRoarParticleEffects inline crates/horizon-client/src/mobs/ravager.rs::roar the poof particles are emitted in roar
115 Shulker.registerGoals port crates/horizon-client/src/mobs/shulker.rs::register gap: minor: no defense target goal (priority 3)
116 Shulker.defineSynchedData skip:other attach face, peek and colour are Mob extra fields
117 Shulker.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt AttachFace, Peek and Color are read there
118 Shulker.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt AttachFace, Peek and Color are written there
119 Shulker.findNewAttachment inline crates/horizon-client/src/mobs/shulker.rs::tick keeps its face or teleports in tick, through attachable and teleport
120 Shulker.makeBoundingBox port crates/horizon-client/src/mobs/shulker.rs::progress_aabb
121 Shulker.getDefaultDimensions inline crates/horizon-client/src/mobs/shulker.rs::progress_aabb gap: minor: the down-face height scale is not seen here
122 Shulker.startRiding missing unsure: no attach-face reset to DOWN when a shulker mounts a vehicle in shulker.rs
123 Shulker.stopRiding missing unsure: no body yaw reset after a shulker dismounts in shulker.rs
124 Shulker.move missing unsure: no shulker-box move type (teleport) found in the piston code
125 Shulker.findAttachableSurface port crates/horizon-client/src/mobs/shulker.rs::attachable
126 Shulker.isPositionBlocked inline crates/horizon-client/src/mobs/shulker.rs::can_stay_at the blocked-position check is part of can_stay_at
127 Shulker.onSyncedDataUpdated skip:other network sync hook; the box is computed from the face on demand
128 Shulker.getRenderPosition missing unsure: no render slide after a shulker teleport in shulker.rs
129 Shulker.setVariant inline crates/horizon-client/src/mobs/shulker.rs::register colour comes from spawn data; NO_COLOR when unset
130 Shulker.getColor inline crates/horizon-client/src/mobs/shulker.rs::texture colour is read from extra.color for the texture
131 Shulker.get skip:other component getter; Horizon reads extra.color directly
132 Shulker.applyImplicitComponent missing minor: a shulker spawned with a SHULKER_COLOR component ignores it
133 Shulker.ShulkerDefenseAttackGoal.getTargetSearchArea missing minor: shulkers do not defend nearby shulkers; there is no defense target goal
134 Shulker.ShulkerNearestAttackGoal.getTargetSearchArea inline crates/horizon-client/src/mobs/shulker.rs::register the 4-deep search box is the when filter in register
135 Shulker.ShulkerPeekGoal.canContinueToUse port crates/horizon-client/src/mobs/shulker.rs::Peek::can_continue
136 Silverfish.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register
137 Silverfish.createAttributes skip:data attribute defaults come from data tables
138 Silverfish.getWalkTargetValue missing minor: no infested-host path value (10) for silverfish in ai.rs walk_target_value
139 Silverfish.checkSilverfishSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm
+149
View File
@@ -0,0 +1,149 @@
Strider.checkStriderSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules strider arm: climbs lava upward, then needs air above
Strider.onSyncedDataUpdated skip:other client copy of the boost sync; Horizon keeps one boost state on the server side (equine.rs boost)
Strider.defineSynchedData skip:java SynchedEntityData builder; the synced values are Mob fields (extra.flag, extra.counter2)
Strider.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot saddle needs alive and adult
Strider.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip saddle or pick-up loot
Strider.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound strider saddle sound
Strider.registerGoals port crates/horizon-client/src/mobs/strider.rs::register same goal priorities and speeds
Strider.setSuffocating inline crates/horizon-client/src/mobs/strider.rs::pre_tick stores the flag; the slowdown is applied on read (strider::movement_speed)
Strider.getPassengerAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: client-only walk bob of the rider is not applied (up to 0.06 block)
Strider.getDismountLocationForPassenger inline crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: player: no lava check and no dismount floor or pose test; a rider can land in lava or in a blocked spot
Strider.tickRidden port crates/horizon-client/src/mobs/equine.rs::ridden_step strider branch: rider yaw, half pitch, boost factor, cold slowdown
Strider.playStepSound port crates/horizon-client/src/mobs/ai.rs::step_sound lava or normal step sound
Strider.isBeingTempted inline crates/horizon-client/src/mobs/ai.rs::play_ambient the Tempt goal running check is folded into the ambient sound guard
Strider.canAddPassenger missing minor: a player can still board a saddled strider whose head is in lava; vanilla refuses (isEyeInFluid LAVA)
Strider.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: the strider 0.6 x eye height override is not applied; the default eye-height offset is used
Strider.StriderPathNavigation.createPathFinder port crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator ground nav kind gets the walk evaluator, as WalkNodeEvaluator
Strider.StriderPathNavigation.isStableDestination port crates/horizon-client/src/mobs/nav.rs::Mob::stable_destination lava counts as stable for lava walkers
Vex.registerGoals port crates/horizon-client/src/mobs/vex.rs::register float, charge, random move, look goals, owner and player targets
Vex.restoreFrom missing minor: a vex restored after a dimension trip keeps no owner link; Horizon has no mob restoreFrom
Vex.getVexFlag inline crates/horizon-client/src/mobs/vex.rs::Charge::can_continue the charging bit is the plain extra.flag; there is no flags byte
Vex.setVexFlag inline crates/horizon-client/src/mobs/vex.rs::Charge::start start sets extra.flag; stop and tick clear it
Vex.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize Vex arm: populate (sword) then enchant
Vex.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate iron sword in hand with drop chance 0
Witch.registerGoals port crates/horizon-client/src/mobs/witch.rs::register gap: minor: raiders that hurt a witch are still targeted back (vanilla ignores them)
Witch.handleEntityEvent missing player: a witch shows purple magic puffs about once a minute while idle; not drawn here (the RNG draw is kept in ai_step)
Witch.getDamageAfterMagicAbsorb missing player: witches take full magic, indirect magic, sonic boom and thorns damage; vanilla cuts it to 15% and ignores its own hits
Zoglin.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: look-at-target and move-to-target sinks are not separate; the goal set stands in for them
Zoglin.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: idle is a stroll only; no look-target sometimes and no do-nothing pauses
Zoglin.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: player: melee cooldown is 20 ticks; vanilla is 40 for adults and 15 for babies, so zoglins hit faster
Zoglin.findNearestValidAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin target filter: not a creeper or a zoglin
Zoglin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize Zoglin arm: 20 percent start as babies
Zoglin.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
Zoglin.doHurtTarget port crates/horizon-client/src/mobs/piglin.rs::hoglin_hurt_target headbutt event, zoglin attack sound, hurt and throw
Zoglin.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: HurtByTarget sets the attacker as target with no 4-block check against a much nearer current target
Zoglin.setAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: target has no 200-tick expiry; Horizon sets the target directly
Zoglin.updateActivity missing player: a zoglin that starts a fight does not play its angry grunt (zoglin.angry)
Zoglin.customServerAiStep inline crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: the brain tick is not run; the zoglin goal set runs in the general AI loop
Zoglin.setBaby port crates/horizon-client/src/mobs/finalize.rs::set_baby Zoglin arm: non-ageable baby age and 0.5 attack damage
Zoglin.handleEntityEvent port crates/horizon-client/src/mobs/piglin.rs::client_event event 4 starts the headbutt; the attack sound comes from hoglin_hurt_target
Zoglin.getAmbientSound missing player: a zoglin with a target grunts its ambient sound, not the angry one (zoglin.angry)
Breeze.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
Breeze.makeBrain port crates/horizon-client/src/mobs/monster_brain.rs::init breezes get the fight default activity
Breeze.onSyncedDataUpdated port crates/horizon-client/src/mobs/breeze.rs::ai_step client pose change restarts the matching animation
Breeze.resetAnimations inline crates/horizon-client/src/mobs/breeze.rs::ai_step the stop calls of the pose-change branch
Breeze.emitJumpTrailParticles missing player: no block-dust trail behind a long jump (about 5 ticks of particles)
Breeze.emitGroundParticles missing player: no block-dust puffs at its feet while it stands, shoots, inhales or lands; Horizon only draws the random number
Breeze.playWhirlSound port crates/horizon-client/src/mobs/breeze.rs::tick whirl sound on a random clock, as a local sound
Breeze.deflection port crates/horizon-client/src/game/creatures.rs::Game::tick_projectiles breeze turns projectiles back, except wind charges
Breeze.getHurtBy port crates/horizon-client/src/mobs/monster_brain.rs::hurt_by_entity the living source of the last hurt
Breeze.registerDebugValues skip:debug debug subscription values
BreezeAi.initCoreActivity port crates/horizon-client/src/mobs/monster_brain.rs::breeze_packages core swim and look-at-target sink
BreezeAi.initIdleActivity port crates/horizon-client/src/mobs/monster_brain.rs::breeze_packages idle: attack nearest, attack hurt-by, slide to target, do nothing or stroll
BreezeAi.initFightActivity port crates/horizon-client/src/mobs/monster_brain.rs::breeze_packages fight: stop, shoot, long jump, shoot when stuck, slide; the entry gate is fight_requirements
LongJump.canStillUse inline crates/horizon-client/src/mobs/monster_brain.rs::B::tick_or_stop keep-running check: not standing and no jump cooldown
LongJump.start inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start inhaling memory and pose, charge sound, look at the jump target
LongJump.isFinishedInhaling inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_tick inhaling memory gone and pose INHALING
LongJump.isFinishedJumping inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_tick landed on the ground or in water
LongJump.outOfAggroRange inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_can_run follow-range check drops the target
LongJump.tooCloseForJump inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_can_run distance minus 4 at most zero
Shoot.checkExtraStartConditions inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start standing pose and target within range
Shoot.canStillUse inline crates/horizon-client/src/mobs/monster_brain.rs::B::tick_or_stop target and shoot memory still present
Shoot.start inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start shooting pose, 15 tick charge, inhale sound
Shoot.stop inline crates/horizon-client/src/mobs/monster_brain.rs::B::do_stop back to standing and 10 tick cooldown
Shoot.isTargetWithinRange inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start squared distance under 256
Slide.checkExtraStartConditions inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start on ground, not in water, standing
Slide.randomPointInMiddleCircle port crates/horizon-client/src/mobs/monster_brain.rs::slide_start the middle-circle branch of the slide target
Creaking.defineSynchedData skip:java SynchedEntityData builder; the synced values are Mob fields (extra.ints, flags)
Creaking.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
Creaking.setupAnimationStates port crates/horizon-client/src/mobs/creaking.rs::animate attack, invulnerability and tear-down animations
Creaking.creakingDeathEffects port crates/horizon-client/src/mobs/creaking_heart.rs::remove_protector gap: minor: no blameSourceForDamage or die(); health is set to 0 and the twitch sound plays
Creaking.canUsePortal missing minor: a heart-bound creaking can still go through a portal; game/nether_portal.rs mob_can_use_portal has no heart check
Creaking.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt home_pos is read back as the transient home
Creaking.checkEyeBlink inline crates/horizon-client/src/mobs/creaking.rs::animate eye flicker timing on the dying creaking
Creaking.knockback missing player: a creaking that a player looks at still gets shoved by hits; vanilla ignores knockback while it cannot move (Mob::knockback has no check)
Creaking.CreakingPathNavigation.createPathFinder missing minor: no home-distance node evaluator; paths do not block nodes more than 32 blocks from the heart
Creaking.HomeNodeEvaluator.getPathType missing minor: nodes more than 32 blocks from home are not marked blocked
CreakingAi.initCoreActivity port crates/horizon-client/src/mobs/monster_brain.rs::creaking_packages core swim, look-at-target and move sink
CreakingAi.initIdleActivity port crates/horizon-client/src/mobs/monster_brain.rs::creaking_packages idle: attack active creakings, look sometimes, stroll, look-walk or do nothing
CreakingAi.initFightActivity port crates/horizon-client/src/mobs/monster_brain.rs::creaking_packages fight: walk to target, melee on a 40 tick cooldown, stop when unreachable
AbstractCubeMob.registerGoals port crates/horizon-client/src/mobs/cube.rs::register float, random direction, keep jumping, attack goal and player and golem targets
AbstractCubeMob.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Size stored minus one, and wasOnGround
AbstractCubeMob.refreshDimensions skip:other bounds are read from the size on each use, so there is no separate refresh; the position is never reset
AbstractCubeMob.onSyncedDataUpdated missing unsure: remote.rs applies no size sync to cubes; local play sets the size directly
AbstractCubeMob.setUpSplitCube port crates/horizon-client/src/game/creatures.rs::Game::mob_died gap: minor: children get half size and the same fixed offsets, but no random yaw
AbstractCubeMob.push missing player: a slime or magma cube that bumps into an iron golem does not hurt it
AbstractCubeMob.dealDamage inline crates/horizon-client/src/mobs/cube.rs::ai_step gap: player: only the player touch hits; a mob target such as an iron golem takes no damage
AbstractCubeMob.getPassengerAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: the rider sits at full height; vanilla lowers it by size/64 per block
AbstractCubeMob.finalizeSpawn port crates/horizon-client/src/mobs/cube.rs::finalize spawn size 1, 2 or 4, rolled by the slime and magma cube arm of spawning.rs
AbstractCubeMob.CubeMobAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/cube.rs::CubeAttack::can_continue tired timer runs down while the target can still be attacked
MagmaCube.addTargetingGoals port crates/horizon-client/src/mobs/cube.rs::register player within 4 blocks in height, and iron golems
MagmaCube.finalizeSpawn port crates/horizon-client/src/mobs/cube.rs::finalize same spawn size roll as the other cubes
Slime.addTargetingGoals port crates/horizon-client/src/mobs/cube.rs::register same targets as magma cubes
Slime.finalizeSpawn port crates/horizon-client/src/mobs/cube.rs::finalize same spawn size roll as the other cubes
SulfurCube.defineSynchedData skip:java SynchedEntityData builder; the synced values are Mob fields (extra.counter2, flags)
SulfurCube.addBehaviourGoals port crates/horizon-client/src/mobs/sulfur_cube.rs::register temptation goal at 2 and search-for-items at 3
SulfurCube.onSyncedDataUpdated skip:other client copy of the fuse sync; the fuse is mob state (sulfur_cube::fuse)
SulfurCube.saveToBucketTag inline crates/horizon-client/src/mobs/sulfur_cube.rs::to_nbt the bucket keeps the mob NBT, including Age and AgeLocked
SulfurCube.travelInFluid inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step buoyancy bob runs in the tick, not in the fluid travel
SulfurCube.loadFromBucketTag inline crates/horizon-client/src/mobs/sulfur_cube.rs::from_nbt reads Age and AgeLocked back
SulfurCube.requiresCustomPersistence port crates/horizon-client/src/mobs/ai.rs::requires_custom_persistence holding a block or let out of a bucket
SulfurCube.hurtServer port crates/horizon-client/src/mobs/sulfur_cube.rs::accepts_damage fire or explosion primes; a held block shrugs off blows and only knocks back
SulfurCube.matchingArchetypes port crates/horizon-client/src/mobs/sulfur_cube.rs::archetype_of one archetype per item, not a list
SulfurCube.tickFuse inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step gap: minor: fuse countdown and blast, but no leash drop or on-death effects at the blast
SulfurCube.primeWhenOnPoweredPosition missing player: an explosive cube sitting on a powered block does not prime itself; no signal check here
SulfurCube.customServerAiStep port crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step timers, buoyancy, facing, growing up and player push
SulfurCube.collectEquipmentChanges inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step goals are disabled while a block is held; archetype effects are read on demand, not applied as modifiers
SulfurCube.equipItem port crates/horizon-client/src/game/sulfur_cubes.rs::Game::interact_sulfur_cube swallows the item; the old block is ejected
SulfurCube.applyContactDamage inline crates/horizon-client/src/mobs/sulfur_cube.rs::player_push gap: minor: contact damage reaches only the player, not other entities
SulfurCube.isEquippableInSlot port crates/horizon-client/src/mobs/sulfur_cube.rs::swallowable swallowable items only
SulfurCube.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot body slot needs alive and adult
SulfurCube.canHoldItem port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_pickups empty body, adult and not on a pickup timer
SulfurCube.pickUpItem port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_pickups takes one item from the ground into the body
SulfurCube.getBaseExperienceReward port crates/horizon-client/src/mobs/drops.rs::base_experience none for babies, 1 or 2 for adults
SulfurCube.setSpawnSize port crates/horizon-client/src/mobs/sulfur_cube.rs::finalize babies size 1, adults size 2
SulfurCube.getBreedOffspring inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step gap: minor: a child is shrunk to size 1 on its next tick, not at birth
SulfurCube.applyHorizontalHitAngleScale missing player: a hit with a block does not turn the launch by the attacker's aim; knockback takes no aim
SulfurCube.applyVerticalHitAnglePowerTransfer missing player: the vertical share of a hit is not moved by the attacker's aim, so launches from above or below differ
SulfurCube.applyVerticalPositionAnglePowerRotation port crates/horizon-client/src/mobs/sulfur_cube.rs::knockback feet-to-feet rotation at 0.8 with the power ratio clamp
SulfurCube.get skip:other data component view of the body item; Horizon reads the body item directly (sulfur_cube::body)
SulfurCube.applyImplicitComponent skip:other component copy when a cube is built from an item; Horizon sets the body directly
SulfurCube.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: cube rope point is half the box height; the eye-height default is used
SulfurCube.SulfurCubeTemptGoal.stopNavigation port crates/horizon-client/src/mobs/sulfur_cube.rs::SulfurTempt::stop stops the cube's wanted movement
SulfurCube.SulfurCubeTemptGoal.navigateTowards port crates/horizon-client/src/mobs/sulfur_cube.rs::SulfurTempt::tick looks at the player and sets the cube's direction
Hoglin.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
Hoglin.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::hoglin_repellent gap: player: a hit ends the pacified state and the attacker is targeted, but a hit hoglin never retreats from piglins (no AVOID activity)
Hoglin.ageBoundaryReached port crates/horizon-client/src/mobs/finalize.rs::age_boundary_reached baby or adult attack damage; the xp of 3 or 5 is in drops.rs::xp_reward
Hoglin.checkHoglinSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules not spawned on a nether wart block
Hoglin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize 20 percent start as babies
Hoglin.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob gap: minor: a fed hoglin does not become persistent
Hoglin.finishConversion port crates/horizon-client/src/mobs/piglin.rs::ai_step zombification turns it into a zoglin with nausea
Hoglin.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: CannotBeHunted is not written
Hoglin.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: CannotBeHunted is not read
Hoglin.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: minor: the hoglin child is not made persistent
HoglinAi.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: look-at-target and move-to-target sinks are not separate; the goal set stands in for them
HoglinAi.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: player: hoglins do not walk away from adult piglins within 8 blocks; the rest of the idle is there
HoglinAi.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: player: melee cooldown is 20 ticks; vanilla is 40 for adults and 15 for babies
HoglinAi.initRetreatActivity missing player: hoglins never run from piglins; the retreat activity (avoid target, 1.3 speed) does not exist here
HoglinAi.createIdleMovementBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: no look-target walk or do-nothing pauses; a plain stroll only
HoglinAi.updateActivity missing player: no grunt when a hoglin switches activity (angry or retreat); only the ambient roll plays
HoglinAi.onHitTarget inline crates/horizon-client/src/mobs/piglin.rs::hoglin_hurt_target gap: player: no retreat when piglins outnumber hoglins; the hit only attacks
HoglinAi.retreatFromNearestTarget missing player: no retreat from the nearest piglin or hoglin target (part of the missing retreat activity)
HoglinAi.setAvoidTarget missing player: no avoid target is set, so a hoglin never backs off after a piglin hit (retreat activity missing)
HoglinAi.isPosNearNearestRepellent inline crates/horizon-client/src/mobs/piglin.rs::HoglinAvoidRepellent::can_use the 8-block repellent distance check
HoglinAi.piglinsOutnumberHoglins missing player: the count of piglins against hoglins that starts a retreat is not kept
HoglinAi.maybeRetaliate port crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: no check for hoglin attackers or the 4-block nearer-target rule; HurtByTarget alerts others
HoglinAi.setAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: target has no 200-tick expiry and the breed target is not cleared
HoglinAi.setAttackTargetIfCloserThanCurrent inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin NearestTarget keeps the closest target and skips pacified hoglins
HoglinAi.getSoundForActivity inline crates/horizon-client/src/mobs/ai.rs::play_ambient gap: player: the retreat grunt near repellents or while retreating is missing; the angry grunt while a target is set is ported
Evoker.EvokerAttackSpellGoal.createSpellEntity port crates/horizon-client/src/mobs/illager.rs::fang_floor gap: minor: the sturdy-face test is a full-collision test on the block below; the fang event comes from cast_fangs
1 Strider.checkStriderSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules strider arm: climbs lava upward, then needs air above
2 Strider.onSyncedDataUpdated skip:other client copy of the boost sync; Horizon keeps one boost state on the server side (equine.rs boost)
3 Strider.defineSynchedData skip:java SynchedEntityData builder; the synced values are Mob fields (extra.flag, extra.counter2)
4 Strider.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot saddle needs alive and adult
5 Strider.canDispenserEquipIntoSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_dispenser_equip saddle or pick-up loot
6 Strider.getEquipSound port crates/horizon-client/src/game/dispenser.rs::equip_sound strider saddle sound
7 Strider.registerGoals port crates/horizon-client/src/mobs/strider.rs::register same goal priorities and speeds
8 Strider.setSuffocating inline crates/horizon-client/src/mobs/strider.rs::pre_tick stores the flag; the slowdown is applied on read (strider::movement_speed)
9 Strider.getPassengerAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: client-only walk bob of the rider is not applied (up to 0.06 block)
10 Strider.getDismountLocationForPassenger inline crates/horizon-client/src/game/mounts.rs::Game::dismount_mount gap: player: no lava check and no dismount floor or pose test; a rider can land in lava or in a blocked spot
11 Strider.tickRidden port crates/horizon-client/src/mobs/equine.rs::ridden_step strider branch: rider yaw, half pitch, boost factor, cold slowdown
12 Strider.playStepSound port crates/horizon-client/src/mobs/ai.rs::step_sound lava or normal step sound
13 Strider.isBeingTempted inline crates/horizon-client/src/mobs/ai.rs::play_ambient the Tempt goal running check is folded into the ambient sound guard
14 Strider.canAddPassenger missing minor: a player can still board a saddled strider whose head is in lava; vanilla refuses (isEyeInFluid LAVA)
15 Strider.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: the strider 0.6 x eye height override is not applied; the default eye-height offset is used
16 Strider.StriderPathNavigation.createPathFinder port crates/horizon-client/src/mobs/nav.rs::Navigation::evaluator ground nav kind gets the walk evaluator, as WalkNodeEvaluator
17 Strider.StriderPathNavigation.isStableDestination port crates/horizon-client/src/mobs/nav.rs::Mob::stable_destination lava counts as stable for lava walkers
18 Vex.registerGoals port crates/horizon-client/src/mobs/vex.rs::register float, charge, random move, look goals, owner and player targets
19 Vex.restoreFrom missing minor: a vex restored after a dimension trip keeps no owner link; Horizon has no mob restoreFrom
20 Vex.getVexFlag inline crates/horizon-client/src/mobs/vex.rs::Charge::can_continue the charging bit is the plain extra.flag; there is no flags byte
21 Vex.setVexFlag inline crates/horizon-client/src/mobs/vex.rs::Charge::start start sets extra.flag; stop and tick clear it
22 Vex.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize Vex arm: populate (sword) then enchant
23 Vex.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate iron sword in hand with drop chance 0
24 Witch.registerGoals port crates/horizon-client/src/mobs/witch.rs::register gap: minor: raiders that hurt a witch are still targeted back (vanilla ignores them)
25 Witch.handleEntityEvent missing player: a witch shows purple magic puffs about once a minute while idle; not drawn here (the RNG draw is kept in ai_step)
26 Witch.getDamageAfterMagicAbsorb missing player: witches take full magic, indirect magic, sonic boom and thorns damage; vanilla cuts it to 15% and ignores its own hits
27 Zoglin.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: look-at-target and move-to-target sinks are not separate; the goal set stands in for them
28 Zoglin.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: idle is a stroll only; no look-target sometimes and no do-nothing pauses
29 Zoglin.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: player: melee cooldown is 20 ticks; vanilla is 40 for adults and 15 for babies, so zoglins hit faster
30 Zoglin.findNearestValidAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin target filter: not a creeper or a zoglin
31 Zoglin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize Zoglin arm: 20 percent start as babies
32 Zoglin.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
33 Zoglin.doHurtTarget port crates/horizon-client/src/mobs/piglin.rs::hoglin_hurt_target headbutt event, zoglin attack sound, hurt and throw
34 Zoglin.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: HurtByTarget sets the attacker as target with no 4-block check against a much nearer current target
35 Zoglin.setAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_zoglin gap: minor: target has no 200-tick expiry; Horizon sets the target directly
36 Zoglin.updateActivity missing player: a zoglin that starts a fight does not play its angry grunt (zoglin.angry)
37 Zoglin.customServerAiStep inline crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: the brain tick is not run; the zoglin goal set runs in the general AI loop
38 Zoglin.setBaby port crates/horizon-client/src/mobs/finalize.rs::set_baby Zoglin arm: non-ageable baby age and 0.5 attack damage
39 Zoglin.handleEntityEvent port crates/horizon-client/src/mobs/piglin.rs::client_event event 4 starts the headbutt; the attack sound comes from hoglin_hurt_target
40 Zoglin.getAmbientSound missing player: a zoglin with a target grunts its ambient sound, not the angry one (zoglin.angry)
41 Breeze.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
42 Breeze.makeBrain port crates/horizon-client/src/mobs/monster_brain.rs::init breezes get the fight default activity
43 Breeze.onSyncedDataUpdated port crates/horizon-client/src/mobs/breeze.rs::ai_step client pose change restarts the matching animation
44 Breeze.resetAnimations inline crates/horizon-client/src/mobs/breeze.rs::ai_step the stop calls of the pose-change branch
45 Breeze.emitJumpTrailParticles missing player: no block-dust trail behind a long jump (about 5 ticks of particles)
46 Breeze.emitGroundParticles missing player: no block-dust puffs at its feet while it stands, shoots, inhales or lands; Horizon only draws the random number
47 Breeze.playWhirlSound port crates/horizon-client/src/mobs/breeze.rs::tick whirl sound on a random clock, as a local sound
48 Breeze.deflection port crates/horizon-client/src/game/creatures.rs::Game::tick_projectiles breeze turns projectiles back, except wind charges
49 Breeze.getHurtBy port crates/horizon-client/src/mobs/monster_brain.rs::hurt_by_entity the living source of the last hurt
50 Breeze.registerDebugValues skip:debug debug subscription values
51 BreezeAi.initCoreActivity port crates/horizon-client/src/mobs/monster_brain.rs::breeze_packages core swim and look-at-target sink
52 BreezeAi.initIdleActivity port crates/horizon-client/src/mobs/monster_brain.rs::breeze_packages idle: attack nearest, attack hurt-by, slide to target, do nothing or stroll
53 BreezeAi.initFightActivity port crates/horizon-client/src/mobs/monster_brain.rs::breeze_packages fight: stop, shoot, long jump, shoot when stuck, slide; the entry gate is fight_requirements
54 LongJump.canStillUse inline crates/horizon-client/src/mobs/monster_brain.rs::B::tick_or_stop keep-running check: not standing and no jump cooldown
55 LongJump.start inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start inhaling memory and pose, charge sound, look at the jump target
56 LongJump.isFinishedInhaling inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_tick inhaling memory gone and pose INHALING
57 LongJump.isFinishedJumping inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_tick landed on the ground or in water
58 LongJump.outOfAggroRange inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_can_run follow-range check drops the target
59 LongJump.tooCloseForJump inline crates/horizon-client/src/mobs/monster_brain.rs::long_jump_can_run distance minus 4 at most zero
60 Shoot.checkExtraStartConditions inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start standing pose and target within range
61 Shoot.canStillUse inline crates/horizon-client/src/mobs/monster_brain.rs::B::tick_or_stop target and shoot memory still present
62 Shoot.start inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start shooting pose, 15 tick charge, inhale sound
63 Shoot.stop inline crates/horizon-client/src/mobs/monster_brain.rs::B::do_stop back to standing and 10 tick cooldown
64 Shoot.isTargetWithinRange inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start squared distance under 256
65 Slide.checkExtraStartConditions inline crates/horizon-client/src/mobs/monster_brain.rs::B::try_start on ground, not in water, standing
66 Slide.randomPointInMiddleCircle port crates/horizon-client/src/mobs/monster_brain.rs::slide_start the middle-circle branch of the slide target
67 Creaking.defineSynchedData skip:java SynchedEntityData builder; the synced values are Mob fields (extra.ints, flags)
68 Creaking.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
69 Creaking.setupAnimationStates port crates/horizon-client/src/mobs/creaking.rs::animate attack, invulnerability and tear-down animations
70 Creaking.creakingDeathEffects port crates/horizon-client/src/mobs/creaking_heart.rs::remove_protector gap: minor: no blameSourceForDamage or die(); health is set to 0 and the twitch sound plays
71 Creaking.canUsePortal missing minor: a heart-bound creaking can still go through a portal; game/nether_portal.rs mob_can_use_portal has no heart check
72 Creaking.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt home_pos is read back as the transient home
73 Creaking.checkEyeBlink inline crates/horizon-client/src/mobs/creaking.rs::animate eye flicker timing on the dying creaking
74 Creaking.knockback missing player: a creaking that a player looks at still gets shoved by hits; vanilla ignores knockback while it cannot move (Mob::knockback has no check)
75 Creaking.CreakingPathNavigation.createPathFinder missing minor: no home-distance node evaluator; paths do not block nodes more than 32 blocks from the heart
76 Creaking.HomeNodeEvaluator.getPathType missing minor: nodes more than 32 blocks from home are not marked blocked
77 CreakingAi.initCoreActivity port crates/horizon-client/src/mobs/monster_brain.rs::creaking_packages core swim, look-at-target and move sink
78 CreakingAi.initIdleActivity port crates/horizon-client/src/mobs/monster_brain.rs::creaking_packages idle: attack active creakings, look sometimes, stroll, look-walk or do nothing
79 CreakingAi.initFightActivity port crates/horizon-client/src/mobs/monster_brain.rs::creaking_packages fight: walk to target, melee on a 40 tick cooldown, stop when unreachable
80 AbstractCubeMob.registerGoals port crates/horizon-client/src/mobs/cube.rs::register float, random direction, keep jumping, attack goal and player and golem targets
81 AbstractCubeMob.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Size stored minus one, and wasOnGround
82 AbstractCubeMob.refreshDimensions skip:other bounds are read from the size on each use, so there is no separate refresh; the position is never reset
83 AbstractCubeMob.onSyncedDataUpdated missing unsure: remote.rs applies no size sync to cubes; local play sets the size directly
84 AbstractCubeMob.setUpSplitCube port crates/horizon-client/src/game/creatures.rs::Game::mob_died gap: minor: children get half size and the same fixed offsets, but no random yaw
85 AbstractCubeMob.push missing player: a slime or magma cube that bumps into an iron golem does not hurt it
86 AbstractCubeMob.dealDamage inline crates/horizon-client/src/mobs/cube.rs::ai_step gap: player: only the player touch hits; a mob target such as an iron golem takes no damage
87 AbstractCubeMob.getPassengerAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: the rider sits at full height; vanilla lowers it by size/64 per block
88 AbstractCubeMob.finalizeSpawn port crates/horizon-client/src/mobs/cube.rs::finalize spawn size 1, 2 or 4, rolled by the slime and magma cube arm of spawning.rs
89 AbstractCubeMob.CubeMobAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/cube.rs::CubeAttack::can_continue tired timer runs down while the target can still be attacked
90 MagmaCube.addTargetingGoals port crates/horizon-client/src/mobs/cube.rs::register player within 4 blocks in height, and iron golems
91 MagmaCube.finalizeSpawn port crates/horizon-client/src/mobs/cube.rs::finalize same spawn size roll as the other cubes
92 Slime.addTargetingGoals port crates/horizon-client/src/mobs/cube.rs::register same targets as magma cubes
93 Slime.finalizeSpawn port crates/horizon-client/src/mobs/cube.rs::finalize same spawn size roll as the other cubes
94 SulfurCube.defineSynchedData skip:java SynchedEntityData builder; the synced values are Mob fields (extra.counter2, flags)
95 SulfurCube.addBehaviourGoals port crates/horizon-client/src/mobs/sulfur_cube.rs::register temptation goal at 2 and search-for-items at 3
96 SulfurCube.onSyncedDataUpdated skip:other client copy of the fuse sync; the fuse is mob state (sulfur_cube::fuse)
97 SulfurCube.saveToBucketTag inline crates/horizon-client/src/mobs/sulfur_cube.rs::to_nbt the bucket keeps the mob NBT, including Age and AgeLocked
98 SulfurCube.travelInFluid inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step buoyancy bob runs in the tick, not in the fluid travel
99 SulfurCube.loadFromBucketTag inline crates/horizon-client/src/mobs/sulfur_cube.rs::from_nbt reads Age and AgeLocked back
100 SulfurCube.requiresCustomPersistence port crates/horizon-client/src/mobs/ai.rs::requires_custom_persistence holding a block or let out of a bucket
101 SulfurCube.hurtServer port crates/horizon-client/src/mobs/sulfur_cube.rs::accepts_damage fire or explosion primes; a held block shrugs off blows and only knocks back
102 SulfurCube.matchingArchetypes port crates/horizon-client/src/mobs/sulfur_cube.rs::archetype_of one archetype per item, not a list
103 SulfurCube.tickFuse inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step gap: minor: fuse countdown and blast, but no leash drop or on-death effects at the blast
104 SulfurCube.primeWhenOnPoweredPosition missing player: an explosive cube sitting on a powered block does not prime itself; no signal check here
105 SulfurCube.customServerAiStep port crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step timers, buoyancy, facing, growing up and player push
106 SulfurCube.collectEquipmentChanges inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step goals are disabled while a block is held; archetype effects are read on demand, not applied as modifiers
107 SulfurCube.equipItem port crates/horizon-client/src/game/sulfur_cubes.rs::Game::interact_sulfur_cube swallows the item; the old block is ejected
108 SulfurCube.applyContactDamage inline crates/horizon-client/src/mobs/sulfur_cube.rs::player_push gap: minor: contact damage reaches only the player, not other entities
109 SulfurCube.isEquippableInSlot port crates/horizon-client/src/mobs/sulfur_cube.rs::swallowable swallowable items only
110 SulfurCube.canUseSlot port crates/horizon-client/src/game/dispenser.rs::mob_can_use_slot body slot needs alive and adult
111 SulfurCube.canHoldItem port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_pickups empty body, adult and not on a pickup timer
112 SulfurCube.pickUpItem port crates/horizon-client/src/game/sulfur_cubes.rs::Game::sulfur_cube_pickups takes one item from the ground into the body
113 SulfurCube.getBaseExperienceReward port crates/horizon-client/src/mobs/drops.rs::base_experience none for babies, 1 or 2 for adults
114 SulfurCube.setSpawnSize port crates/horizon-client/src/mobs/sulfur_cube.rs::finalize babies size 1, adults size 2
115 SulfurCube.getBreedOffspring inline crates/horizon-client/src/mobs/sulfur_cube.rs::ai_step gap: minor: a child is shrunk to size 1 on its next tick, not at birth
116 SulfurCube.applyHorizontalHitAngleScale missing player: a hit with a block does not turn the launch by the attacker's aim; knockback takes no aim
117 SulfurCube.applyVerticalHitAnglePowerTransfer missing player: the vertical share of a hit is not moved by the attacker's aim, so launches from above or below differ
118 SulfurCube.applyVerticalPositionAnglePowerRotation port crates/horizon-client/src/mobs/sulfur_cube.rs::knockback feet-to-feet rotation at 0.8 with the power ratio clamp
119 SulfurCube.get skip:other data component view of the body item; Horizon reads the body item directly (sulfur_cube::body)
120 SulfurCube.applyImplicitComponent skip:other component copy when a cube is built from an item; Horizon sets the body directly
121 SulfurCube.getLeashOffset port crates/horizon-client/src/mobs/leash.rs::leash_offset gap: minor: cube rope point is half the box height; the eye-height default is used
122 SulfurCube.SulfurCubeTemptGoal.stopNavigation port crates/horizon-client/src/mobs/sulfur_cube.rs::SulfurTempt::stop stops the cube's wanted movement
123 SulfurCube.SulfurCubeTemptGoal.navigateTowards port crates/horizon-client/src/mobs/sulfur_cube.rs::SulfurTempt::tick looks at the player and sets the cube's direction
124 Hoglin.createAttributes skip:data attribute defaults come from the data tables (mobs.rs attr lookup)
125 Hoglin.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::hoglin_repellent gap: player: a hit ends the pacified state and the attacker is targeted, but a hit hoglin never retreats from piglins (no AVOID activity)
126 Hoglin.ageBoundaryReached port crates/horizon-client/src/mobs/finalize.rs::age_boundary_reached baby or adult attack damage; the xp of 3 or 5 is in drops.rs::xp_reward
127 Hoglin.checkHoglinSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules not spawned on a nether wart block
128 Hoglin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize 20 percent start as babies
129 Hoglin.mobInteract port crates/horizon-client/src/game/creatures.rs::Game::interact_mob gap: minor: a fed hoglin does not become persistent
130 Hoglin.finishConversion port crates/horizon-client/src/mobs/piglin.rs::ai_step zombification turns it into a zoglin with nausea
131 Hoglin.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: CannotBeHunted is not written
132 Hoglin.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: CannotBeHunted is not read
133 Hoglin.getBreedOffspring port crates/horizon-client/src/game/creatures.rs::Game::breed gap: minor: the hoglin child is not made persistent
134 HoglinAi.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: look-at-target and move-to-target sinks are not separate; the goal set stands in for them
135 HoglinAi.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: player: hoglins do not walk away from adult piglins within 8 blocks; the rest of the idle is there
136 HoglinAi.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: player: melee cooldown is 20 ticks; vanilla is 40 for adults and 15 for babies
137 HoglinAi.initRetreatActivity missing player: hoglins never run from piglins; the retreat activity (avoid target, 1.3 speed) does not exist here
138 HoglinAi.createIdleMovementBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: no look-target walk or do-nothing pauses; a plain stroll only
139 HoglinAi.updateActivity missing player: no grunt when a hoglin switches activity (angry or retreat); only the ambient roll plays
140 HoglinAi.onHitTarget inline crates/horizon-client/src/mobs/piglin.rs::hoglin_hurt_target gap: player: no retreat when piglins outnumber hoglins; the hit only attacks
141 HoglinAi.retreatFromNearestTarget missing player: no retreat from the nearest piglin or hoglin target (part of the missing retreat activity)
142 HoglinAi.setAvoidTarget missing player: no avoid target is set, so a hoglin never backs off after a piglin hit (retreat activity missing)
143 HoglinAi.isPosNearNearestRepellent inline crates/horizon-client/src/mobs/piglin.rs::HoglinAvoidRepellent::can_use the 8-block repellent distance check
144 HoglinAi.piglinsOutnumberHoglins missing player: the count of piglins against hoglins that starts a retreat is not kept
145 HoglinAi.maybeRetaliate port crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: no check for hoglin attackers or the 4-block nearer-target rule; HurtByTarget alerts others
146 HoglinAi.setAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin gap: minor: target has no 200-tick expiry and the breed target is not cleared
147 HoglinAi.setAttackTargetIfCloserThanCurrent inline crates/horizon-client/src/mobs/piglin.rs::register_hoglin NearestTarget keeps the closest target and skips pacified hoglins
148 HoglinAi.getSoundForActivity inline crates/horizon-client/src/mobs/ai.rs::play_ambient gap: player: the retreat grunt near repellents or while retreating is missing; the angry grunt while a target is set is ported
149 Evoker.EvokerAttackSpellGoal.createSpellEntity port crates/horizon-client/src/mobs/illager.rs::fang_floor gap: minor: the sturdy-face test is a full-collision test on the block below; the fang event comes from cast_fangs
+150
View File
@@ -0,0 +1,150 @@
Evoker.EvokerWololoSpellGoal.canContinueToUse port crates/horizon-client/src/mobs/illager.rs::UseSpell::can_continue wololo branch: sheep target still set and warm-up left
Evoker.EvokerWololoSpellGoal.performSpellCasting port crates/horizon-client/src/game/creatures.rs::Game::handle_mob_events MobEvent::Wololo dyes the sheep red (color 14); the event is pushed from UseSpell::tick
Illusioner.registerGoals port crates/horizon-client/src/mobs/illusioner.rs::register same goal list and priorities
Illusioner.createAttributes skip:data attribute defaults (speed 0.5, follow 18, health 32) live in data tables
Illusioner.performRangedAttack port crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack bow shot at speed 1.6 with the aim and uncertainty the skeleton uses
Illusioner.getArmPose port crates/horizon-client/src/mobs/illager.rs::arm_pose spellcasting, bow when aggressive, else crossed
Illusioner.IllusionerBlindnessSpellGoal.canUse port crates/horizon-client/src/mobs/illusioner.rs::Spell::can_use target id differs from last target, difficulty above normal
Illusioner.IllusionerBlindnessSpellGoal.start port crates/horizon-client/src/mobs/illusioner.rs::Spell::start remembers the target id for the next can_use
Illusioner.IllusionerBlindnessSpellGoal.performSpellCasting port crates/horizon-client/src/mobs/illusioner.rs::Spell::tick gap: minor: blindness reaches only a player target; vanilla also blinds villagers and iron golems
Illusioner.IllusionerMirrorSpellGoal.canUse port crates/horizon-client/src/mobs/illusioner.rs::Spell::can_use not already invisible
SpellcasterIllager.getArmPose port crates/horizon-client/src/mobs/illager.rs::arm_pose spellcasting pose while a spell is cast, else celebrating or crossed
SpellcasterIllager.isCastingSpell skip:other getter; Horizon reads extra.counter > 0 inline
SpellcasterIllager.setIsCastingSpell inline crates/horizon-client/src/mobs/illager.rs::UseSpell::start the spell id the client draws (extra.variant2) is set when the cast starts
SpellcasterIllager.getCurrentSpell skip:other getter; Horizon reads extra.variant2 inline in arm_pose and shows_item
SpellcasterIllager.SpellcasterUseSpellGoal.canContinueToUse port crates/horizon-client/src/mobs/illager.rs::UseSpell::can_continue target alive and warm-up left
Vindicator.registerGoals port crates/horizon-client/src/mobs/illager.rs::register_vindicator break door, open door, hold ground, melee, Johnny goal
Vindicator.createAttributes skip:data attribute defaults (speed 0.35, follow 12, health 24, attack 5) live in data tables
Vindicator.addAdditionalSaveData missing minor: the Johnny flag is not saved; Horizon's Johnny goal tests the custom name, so only a vindicator renamed after being named Johnny differs
Vindicator.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize raider spawn, then equipment and enchantments; the door flag it sets each tick comes from vindicator_server_ai_step
Vindicator.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate iron axe unless the mob is in a raid
Vindicator.setCustomName inline crates/horizon-client/src/mobs/illager.rs::register_vindicator gap: minor: the Johnny goal reads the current custom name each tick; vanilla latches the flag once a name is Johnny
Vindicator.VindicatorBreakDoorGoal.canContinueToUse port crates/horizon-client/src/mobs/doors.rs::BreakDoor::can_continue still in a raid, plus the base break checks
AbstractPiglin.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt writes IsImmuneToZombification and TimeInOverworld
AbstractPiglin.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt reads immunity, time in overworld and the pick-up flag
AbstractPiglin.customServerAiStep port crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: zombification runs outside the Nether by the nether flag, not the PIGLINS_ZOMBIFY attribute
AbstractPiglin.finishConversion port crates/horizon-client/src/mobs/piglin.rs::ai_step spawns the zombified piglin with nausea and removes the old one
Piglin.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: CannotHunt is not read, so hunting ignores it; baby and inventory are read
Piglin.getSlot missing minor: item commands cannot reach a piglin's inventory slots (300 and up); 300 and up only address the open container
Piglin.defineSynchedData skip:java synched-data registration; Horizon keeps baby, crossbow and dancing state in Mob fields
Piglin.createAttributes skip:data attribute defaults (health 16, speed 0.35, attack 5) live in data tables
Piglin.checkPiglinSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules not spawning on a nether wart block
Piglin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::piglin baby chance or spawn weapon, hunt wait, then equipment and enchantments
Piglin.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate golden armour at 10 percent per adult slot
Piglin.mobInteract port crates/horizon-client/src/game/piglins.rs::Game::give_piglin a gold ingot handed over starts admiring
Piglin.setBaby port crates/horizon-client/src/mobs/finalize.rs::set_baby gap: minor: sets the baby age only; the speed modifier is not set in this fn
Piglin.customServerAiStep port crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: the brain tick is the registered goal set (register_piglin), not this fn
Piglin.finishConversion missing minor: a piglin turning into a zombified piglin in the Overworld drops nothing; vanilla drops its inventory and any gold it admires
Piglin.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::celebrate gap: player: a hit by a player does not stop an admiring piglin or start its admiring-disabled wait; babies do not flee the attacker
Piglin.canUseNonMeleeWeapon port crates/horizon-client/src/game/piglins.rs::Game::piglin_wanted gap: minor: checks the preferred-weapons tag only, not the usable-crossbow tag or the kinetic weapon component
Piglin.holdInOffHand port crates/horizon-client/src/game/piglins.rs::Game::start_admiring gap: minor: does not drop an item already in the off hand and does not set persistence
Piglin.wantsToPickUp port crates/horizon-client/src/game/piglins.rs::Game::piglin_wants gap: minor: does not check the admiring-disabled wait after a hit by a player
Piglin.startRiding missing minor: baby piglins never mount a baby hoglin (see PiglinAi.babySometimesRideBabyHoglin)
Piglin.getTopPassenger missing minor: helper of baby piglin riding, which Horizon lacks
Piglin.getAmbientSound missing player: piglins always play their plain ambient grunt; the jealous, retreat, celebrate and admiring sounds of their activity never play
PiglinAi.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: no babyAvoidNemesis (babies do not flee a nemesis); avoidZombified and admiring stop are covered by goals
PiglinAi.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: no ride for baby piglins and no look at or interact with other piglins; hunting and repellent avoidance are present
PiglinAi.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: no spear approach or attack, no back-off for crossbow piglins, no erase of the attack target near zombified piglins
PiglinAi.initCelebrateActivity inline crates/horizon-client/src/mobs/piglin.rs::Celebrate::walk gap: minor: walks to the spot only; no look at gold-holding players and no random strolls
PiglinAi.initAdmireItemActivity inline crates/horizon-client/src/mobs/piglin.rs::GoToWantedItem::can_use gap: minor: no give-up after 9 blocks or 200 ticks of trying to reach the item
PiglinAi.initRetreatActivity missing player: piglins never retreat from hoglins or other avoid targets; they keep fighting or idling instead
PiglinAi.initRideHoglinActivity missing player: baby piglins never ride baby hoglins
PiglinAi.createLookBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: looks at players only; piglins and random look targets are not there
PiglinAi.createIdleLookBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: looks at players only, no idle look at piglins or random points
PiglinAi.createIdleMovementBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: strolls only; no walking up to other piglins or to a look target
PiglinAi.updateActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: the activity choice is the goal priority order; the aggressive and dancing flags are set elsewhere
PiglinAi.isBabyRidingBaby missing player: baby piglins never ride baby hoglins, so no piglin dismounts for that reason
PiglinAi.pickUpItem port crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups loved item admired, food eaten, else worn or stored
PiglinAi.holdInOffhand port crates/horizon-client/src/game/piglins.rs::Game::start_admiring gap: minor: does not drop an item already in the off hand and does not set persistence
PiglinAi.removeOneItemFromItemEntity port crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups takes one item from the stack (nuggets whole)
PiglinAi.cancelAdmiring missing minor: a piglin that converts while admiring does not drop the gold ingot it holds
PiglinAi.throwItems port crates/horizon-client/src/game/piglins.rs::Game::finish_admiring gap: minor: only the barter path throws; the target choice is nearest player within 16, else a spot nearby
PiglinAi.throwItemsTowardPos port crates/horizon-client/src/game/piglins.rs::Game::piglin_throw gap: minor: no off-hand swing animation
PiglinAi.getBarterResponseItems port crates/horizon-client/src/game/piglins.rs::Game::finish_admiring rolls minecraft:gameplay/piglin_bartering for an adult; a baby gets the ingot back
PiglinAi.wantsToStopRiding missing player: baby piglins never ride baby hoglins, so no dismount rule runs
PiglinAi.isNearestValidAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: only drops a mob target that is dead or unseen; vanilla also re-picks the nearest valid target
PiglinAi.isNearZombified inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: the 6-block avoid is an AvoidEntity goal; the attack target is not erased near a zombified piglin
PiglinAi.findNearestValidAttackTarget port crates/horizon-client/src/mobs/piglin.rs::hostile_to_player gap: minor: decides player targets only; angry-at, nemesis and universal anger are not chosen here
PiglinAi.canAdmire port crates/horizon-client/src/game/piglins.rs::Game::give_piglin adult piglin takes a gold ingot from the hand
PiglinAi.maybeRetaliate inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: minor: the hurt mob becomes the target; the 600-tick anger timer and the too-far check are not kept
PiglinAi.getSoundForActivity missing player: piglins never play their jealous, retreat, celebrate or admiring-item ambient sounds
PiglinAi.isNearAvoidTarget missing minor: only used by the retreat sound, which Horizon lacks
PiglinAi.babySometimesRideBabyHoglin missing player: baby piglins never ride baby hoglins
PiglinAi.broadcastAngerTarget inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: minor: alerts same-kind mobs nearby; no closer-target check and no hoglin rule
PiglinAi.broadcastUniversalAnger missing minor: the universal_anger game rule is stored but piglins ignore it
PiglinAi.setAngerTarget port crates/horizon-client/src/game/piglins.rs::Game::anger_piglins gap: minor: only the player path (600-tick anger); a hoglin target does not set the hunt wait
PiglinAi.setAngerTargetToNearestTargetablePlayerIfFound missing minor: only for universal anger, which Horizon does not apply
PiglinAi.setAngerTargetIfCloserThanCurrent inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: minor: alerts nearby piglins but never keeps a closer target
PiglinAi.getAvoidTarget missing player: no avoid target exists, so piglins do not back away from hoglins they are outnumbered by
PiglinAi.getNearestVisibleTargetablePlayer missing minor: only used by universal anger, which Horizon does not apply
PiglinAi.broadcastRetreat missing player: piglins do not warn others to retreat from a hoglin group
PiglinAi.retreatFromNearestTarget missing player: piglins do not retreat from a hoglin group
PiglinAi.wantsToStopFleeing missing player: no retreat state, so nothing ends one
PiglinAi.hoglinsOutnumberPiglins missing player: no retreat decision, so hoglins outnumbering piglins changes nothing
PiglinAi.setAvoidTargetAndDontHuntForAWhile missing player: piglins hit by a hoglin group do not stop attacking and back off
PiglinAi.dontKillAnyMoreHoglinsForAWhile port crates/horizon-client/src/mobs/piglin.rs::HuntHoglin::start gap: minor: sets only the hunting piglin's own wait; the wait from a hit on a hoglin is not set
PiglinAi.getRandomNearbyPos inline crates/horizon-client/src/game/piglins.rs::Game::finish_admiring gap: minor: a random spot within 4 blocks, not a land position
PiglinAi.isPlayerHoldingLovedItem missing player: piglins do not turn to look at a player holding gold, so that look never happens
PiglinAi.isNotHoldingLovedItemInOffHand inline crates/horizon-client/src/game/piglins.rs::Game::piglin_wants the off hand holds no loved item test
PiglinAi.isZombified inline crates/horizon-client/src/mobs/piglin.rs::register_piglin the zombified piglin and zoglin species list of the avoid goal
PiglinAi.findNearbyAdultPiglins inline crates/horizon-client/src/mobs/piglin.rs::HuntHoglin::start gap: minor: uses the follow range, not the sensor's nearest living entities list
AbstractSkeleton.registerGoals port crates/horizon-client/src/mobs/undead.rs::register restrict sun, flee sun, wolf avoid, stroll, look, targets
AbstractSkeleton.rideTick missing minor: a skeleton riding a spider does not turn its body with the mount
AbstractSkeleton.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::skeleton equipment, enchantments, pick-up chance, halloween pumpkin; the weapon goal is re-picked on the next tick
AbstractSkeleton.reassessWeaponGoal port crates/horizon-client/src/mobs/undead.rs::SkeletonWeapon::can_use bow goal with the hard or normal interval, else melee
AbstractSkeleton.onEquipItem inline crates/horizon-client/src/mobs/undead.rs::SkeletonWeapon::can_use gap: minor: the weapon is re-picked on the next goal check, not at the moment of equipping
AbstractSkeleton.wantsToPickUp missing minor: skeletons never pick up dropped items in Horizon (no generic mob pickup); vanilla refuses spears
Bogged.getArrow port crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack Bogged arrows carry poison for 100 ticks
Bogged.shear port crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob shear sound, sheared flag, shearing loot, game event
Bogged.spawnShearedMushrooms port crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob drops the shearing/bogged loot table at the mob's height
WitherSkeleton.registerGoals port crates/horizon-client/src/mobs/undead.rs::register piglin and piglin brute target at priority 3, then the skeleton goals
WitherSkeleton.canHoldItem missing minor: no mob item pickup in Horizon, so the disliked-weapons tag never applies
WitherSkeleton.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::skeleton attack damage 4 for wither skeletons
WitherSkeleton.getArrow missing minor: arrows from a wither skeleton are not set on fire for 100 seconds
Spider.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register spider goals: leap at target and the spider melee that gives up in bright light
Spider.isClimbing skip:other getter; Horizon reads the mob's climbing field
Spider.setClimbing inline crates/horizon-client/src/mobs/ai.rs::ai_step climbing set from the horizontal collision each tick
Spider.getVehicleAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: always the spider's fixed seat; vanilla uses a lower seat for riders narrower than the spider
Spider.SpiderEffectsGroupData.setRandomEffect port crates/horizon-client/src/mobs/finalize.rs::Ctx::spider hard-difficulty effect: speed, strength, regeneration or invisibility
AngerManagement.codec missing minor: warden anger is not saved; the anger tag is written empty, so a reloaded warden forgets its suspects
AngerManagement.createUuidAngerPairs missing minor: part of the anger save, which Horizon does not write
AngerManagement.convertFromUuids missing minor: part of the anger load, which Horizon does not read
AngerManagement.getTopSuspect port crates/horizon-client/src/mobs/warden.rs::AngerManagement::active_entity first suspect the filter accepts
AngerManagement.Sorter.compare port crates/horizon-client/src/mobs/warden.rs::AngerManagement::sort_and_update_highest angry first, then players, then the angriest
Warden.<init> port crates/horizon-client/src/mobs/warden.rs::register pathfinding maluses and can-float; the anger and vibration state start empty
Warden.getAddEntityPacket missing unsure: the spawn packet's emerging flag (data 1) has no Horizon counterpart that I found
Warden.recreateFromPacket missing unsure: no client-side emerging pose from a spawn packet that I found
Warden.createAttributes skip:data attribute defaults (health 500, speed 0.3, damage 30) live in data tables
Warden.handleEntityEvent inline crates/horizon-client/src/mobs/warden.rs::animate gap: minor: could not confirm the attack animation (event 4) is started here; tendril and sonic boom are
Warden.onSyncedDataUpdated inline crates/horizon-client/src/mobs/warden.rs::set_pose starts the emerge, dig, roar or sniff animation on pose change
Warden.updateDynamicGameEventListener port crates/horizon-client/src/mobs/warden.rs::listen vibrations reach the warden through listen; there is no registration step
Warden.addAdditionalSaveData missing minor: warden anger is not saved (the anger tag is written empty)
Warden.readAdditionalSaveData missing minor: warden anger is not read back, so a reloaded warden is calm
Warden.playListeningSound inline crates/horizon-client/src/mobs/warden.rs::increase_anger plays the listening sound for the anger level, unless roaring
WardenAi.initCoreActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities swim, look at target, look sink, move sink
WardenAi.initDiggingActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities force unmount and digging
WardenAi.initIdleActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities roar target, sniff, stroll or idle
WardenAi.initInvestigateActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities roar target and walk to the disturbance
WardenAi.initSniffingActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities roar target and sniffing
WardenAi.isTarget port crates/horizon-client/src/mobs/warden.rs::brain_target gap: minor: returns the attack target; the look-at filter is the caller's check
WardenSpawnTracker.hasNearbyWarden inline crates/horizon-client/src/game/sculk.rs::Game::try_to_warn a warden within 24 blocks on each axis stops the warning
WardenSpawnTracker.getNearbyPlayers inline crates/horizon-client/src/game/sculk.rs::Game::try_to_warn gap: minor: only the player who set off the shrieker is counted, not other players within 16 blocks
WardenSpawnTracker.copyData inline crates/horizon-client/src/sculk.rs::WardenSpawnTracker::try_warn every tracker takes the highest one's level, cooldown and tick count
Drowned.checkDrownedSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules water below, spawner or deep enough, dark enough, frequency roll
Drowned.isDeepEnoughToSpawn inline crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules below sea level minus 5
Drowned.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate 10 percent chance of a trident (10 in 16) or fishing rod
Drowned.canReplaceCurrentItem missing minor: no mob item pickup in Horizon, so the nautilus shell guard never applies
Drowned.rangedAttackUncertainty port crates/horizon-client/src/mobs/undead.rs::drowned_throw gap: minor: fixed uncertainty 6 (normal difficulty), not 14 minus 4 times the difficulty
Drowned.rideTick missing minor: a drowned riding a mount does not turn its body with the mount
Drowned.wantsToPickUp missing minor: no mob item pickup in Horizon, so the spear refusal never applies
Drowned.DrownedGoToBeachGoal.isValidTarget port crates/horizon-client/src/mobs/undead.rs::beach_target two empty blocks above and a standable block below
Drowned.DrownedGoToWaterGoal.getWaterPos port crates/horizon-client/src/mobs/undead.rs::DrownedGoToWater::can_use ten random spots 10 blocks around and up to 2 above, water only
Zombie.addBehaviourGoals port crates/horizon-client/src/mobs/undead.rs::register break door, turtle egg, melee, village, stroll, targets
Zombie.createAttributes skip:data attribute defaults (follow 35, speed 0.23, damage 3, armour 2) live in data tables
Zombie.defineSynchedData skip:java synched-data registration; Horizon keeps baby, special type and drowned state in Mob fields
Zombie.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate armour, then 1 percent (5 on hard) of an iron sword, spear or shovel
Zombie.canHoldItem missing minor: no mob item pickup in Horizon, so the baby-egg rule never applies
Zombie.wantsToPickUp missing minor: no mob item pickup in Horizon, so the glow ink sac refusal never applies
Zombie.onOffspringSpawnedFromEgg missing unsure: no egg-offspring pickup roll found for zombies in Horizon
Zombie.ZombieAttackTurtleEggGoal.playDestroyProgressSound inline crates/horizon-client/src/mobs/undead.rs::AttackTurtleEgg::tick zombie.destroy_egg sound while the egg is trampled
Zombie.ZombieAttackTurtleEggGoal.playBreakSound inline crates/horizon-client/src/mobs/undead.rs::AttackTurtleEgg::tick turtle egg break sound when the egg breaks
1 Evoker.EvokerWololoSpellGoal.canContinueToUse port crates/horizon-client/src/mobs/illager.rs::UseSpell::can_continue wololo branch: sheep target still set and warm-up left
2 Evoker.EvokerWololoSpellGoal.performSpellCasting port crates/horizon-client/src/game/creatures.rs::Game::handle_mob_events MobEvent::Wololo dyes the sheep red (color 14); the event is pushed from UseSpell::tick
3 Illusioner.registerGoals port crates/horizon-client/src/mobs/illusioner.rs::register same goal list and priorities
4 Illusioner.createAttributes skip:data attribute defaults (speed 0.5, follow 18, health 32) live in data tables
5 Illusioner.performRangedAttack port crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack bow shot at speed 1.6 with the aim and uncertainty the skeleton uses
6 Illusioner.getArmPose port crates/horizon-client/src/mobs/illager.rs::arm_pose spellcasting, bow when aggressive, else crossed
7 Illusioner.IllusionerBlindnessSpellGoal.canUse port crates/horizon-client/src/mobs/illusioner.rs::Spell::can_use target id differs from last target, difficulty above normal
8 Illusioner.IllusionerBlindnessSpellGoal.start port crates/horizon-client/src/mobs/illusioner.rs::Spell::start remembers the target id for the next can_use
9 Illusioner.IllusionerBlindnessSpellGoal.performSpellCasting port crates/horizon-client/src/mobs/illusioner.rs::Spell::tick gap: minor: blindness reaches only a player target; vanilla also blinds villagers and iron golems
10 Illusioner.IllusionerMirrorSpellGoal.canUse port crates/horizon-client/src/mobs/illusioner.rs::Spell::can_use not already invisible
11 SpellcasterIllager.getArmPose port crates/horizon-client/src/mobs/illager.rs::arm_pose spellcasting pose while a spell is cast, else celebrating or crossed
12 SpellcasterIllager.isCastingSpell skip:other getter; Horizon reads extra.counter > 0 inline
13 SpellcasterIllager.setIsCastingSpell inline crates/horizon-client/src/mobs/illager.rs::UseSpell::start the spell id the client draws (extra.variant2) is set when the cast starts
14 SpellcasterIllager.getCurrentSpell skip:other getter; Horizon reads extra.variant2 inline in arm_pose and shows_item
15 SpellcasterIllager.SpellcasterUseSpellGoal.canContinueToUse port crates/horizon-client/src/mobs/illager.rs::UseSpell::can_continue target alive and warm-up left
16 Vindicator.registerGoals port crates/horizon-client/src/mobs/illager.rs::register_vindicator break door, open door, hold ground, melee, Johnny goal
17 Vindicator.createAttributes skip:data attribute defaults (speed 0.35, follow 12, health 24, attack 5) live in data tables
18 Vindicator.addAdditionalSaveData missing minor: the Johnny flag is not saved; Horizon's Johnny goal tests the custom name, so only a vindicator renamed after being named Johnny differs
19 Vindicator.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize raider spawn, then equipment and enchantments; the door flag it sets each tick comes from vindicator_server_ai_step
20 Vindicator.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate iron axe unless the mob is in a raid
21 Vindicator.setCustomName inline crates/horizon-client/src/mobs/illager.rs::register_vindicator gap: minor: the Johnny goal reads the current custom name each tick; vanilla latches the flag once a name is Johnny
22 Vindicator.VindicatorBreakDoorGoal.canContinueToUse port crates/horizon-client/src/mobs/doors.rs::BreakDoor::can_continue still in a raid, plus the base break checks
23 AbstractPiglin.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt writes IsImmuneToZombification and TimeInOverworld
24 AbstractPiglin.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt reads immunity, time in overworld and the pick-up flag
25 AbstractPiglin.customServerAiStep port crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: zombification runs outside the Nether by the nether flag, not the PIGLINS_ZOMBIFY attribute
26 AbstractPiglin.finishConversion port crates/horizon-client/src/mobs/piglin.rs::ai_step spawns the zombified piglin with nausea and removes the old one
27 Piglin.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt gap: minor: CannotHunt is not read, so hunting ignores it; baby and inventory are read
28 Piglin.getSlot missing minor: item commands cannot reach a piglin's inventory slots (300 and up); 300 and up only address the open container
29 Piglin.defineSynchedData skip:java synched-data registration; Horizon keeps baby, crossbow and dancing state in Mob fields
30 Piglin.createAttributes skip:data attribute defaults (health 16, speed 0.35, attack 5) live in data tables
31 Piglin.checkPiglinSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules not spawning on a nether wart block
32 Piglin.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::piglin baby chance or spawn weapon, hunt wait, then equipment and enchantments
33 Piglin.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate golden armour at 10 percent per adult slot
34 Piglin.mobInteract port crates/horizon-client/src/game/piglins.rs::Game::give_piglin a gold ingot handed over starts admiring
35 Piglin.setBaby port crates/horizon-client/src/mobs/finalize.rs::set_baby gap: minor: sets the baby age only; the speed modifier is not set in this fn
36 Piglin.customServerAiStep port crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: the brain tick is the registered goal set (register_piglin), not this fn
37 Piglin.finishConversion missing minor: a piglin turning into a zombified piglin in the Overworld drops nothing; vanilla drops its inventory and any gold it admires
38 Piglin.hurtServer inline crates/horizon-client/src/mobs/piglin.rs::celebrate gap: player: a hit by a player does not stop an admiring piglin or start its admiring-disabled wait; babies do not flee the attacker
39 Piglin.canUseNonMeleeWeapon port crates/horizon-client/src/game/piglins.rs::Game::piglin_wanted gap: minor: checks the preferred-weapons tag only, not the usable-crossbow tag or the kinetic weapon component
40 Piglin.holdInOffHand port crates/horizon-client/src/game/piglins.rs::Game::start_admiring gap: minor: does not drop an item already in the off hand and does not set persistence
41 Piglin.wantsToPickUp port crates/horizon-client/src/game/piglins.rs::Game::piglin_wants gap: minor: does not check the admiring-disabled wait after a hit by a player
42 Piglin.startRiding missing minor: baby piglins never mount a baby hoglin (see PiglinAi.babySometimesRideBabyHoglin)
43 Piglin.getTopPassenger missing minor: helper of baby piglin riding, which Horizon lacks
44 Piglin.getAmbientSound missing player: piglins always play their plain ambient grunt; the jealous, retreat, celebrate and admiring sounds of their activity never play
45 PiglinAi.initCoreActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: no babyAvoidNemesis (babies do not flee a nemesis); avoidZombified and admiring stop are covered by goals
46 PiglinAi.initIdleActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: no ride for baby piglins and no look at or interact with other piglins; hunting and repellent avoidance are present
47 PiglinAi.initFightActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: no spear approach or attack, no back-off for crossbow piglins, no erase of the attack target near zombified piglins
48 PiglinAi.initCelebrateActivity inline crates/horizon-client/src/mobs/piglin.rs::Celebrate::walk gap: minor: walks to the spot only; no look at gold-holding players and no random strolls
49 PiglinAi.initAdmireItemActivity inline crates/horizon-client/src/mobs/piglin.rs::GoToWantedItem::can_use gap: minor: no give-up after 9 blocks or 200 ticks of trying to reach the item
50 PiglinAi.initRetreatActivity missing player: piglins never retreat from hoglins or other avoid targets; they keep fighting or idling instead
51 PiglinAi.initRideHoglinActivity missing player: baby piglins never ride baby hoglins
52 PiglinAi.createLookBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: looks at players only; piglins and random look targets are not there
53 PiglinAi.createIdleLookBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: looks at players only, no idle look at piglins or random points
54 PiglinAi.createIdleMovementBehaviors inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: strolls only; no walking up to other piglins or to a look target
55 PiglinAi.updateActivity inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: the activity choice is the goal priority order; the aggressive and dancing flags are set elsewhere
56 PiglinAi.isBabyRidingBaby missing player: baby piglins never ride baby hoglins, so no piglin dismounts for that reason
57 PiglinAi.pickUpItem port crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups loved item admired, food eaten, else worn or stored
58 PiglinAi.holdInOffhand port crates/horizon-client/src/game/piglins.rs::Game::start_admiring gap: minor: does not drop an item already in the off hand and does not set persistence
59 PiglinAi.removeOneItemFromItemEntity port crates/horizon-client/src/game/piglins.rs::Game::piglin_pickups takes one item from the stack (nuggets whole)
60 PiglinAi.cancelAdmiring missing minor: a piglin that converts while admiring does not drop the gold ingot it holds
61 PiglinAi.throwItems port crates/horizon-client/src/game/piglins.rs::Game::finish_admiring gap: minor: only the barter path throws; the target choice is nearest player within 16, else a spot nearby
62 PiglinAi.throwItemsTowardPos port crates/horizon-client/src/game/piglins.rs::Game::piglin_throw gap: minor: no off-hand swing animation
63 PiglinAi.getBarterResponseItems port crates/horizon-client/src/game/piglins.rs::Game::finish_admiring rolls minecraft:gameplay/piglin_bartering for an adult; a baby gets the ingot back
64 PiglinAi.wantsToStopRiding missing player: baby piglins never ride baby hoglins, so no dismount rule runs
65 PiglinAi.isNearestValidAttackTarget inline crates/horizon-client/src/mobs/piglin.rs::ai_step gap: minor: only drops a mob target that is dead or unseen; vanilla also re-picks the nearest valid target
66 PiglinAi.isNearZombified inline crates/horizon-client/src/mobs/piglin.rs::register_piglin gap: minor: the 6-block avoid is an AvoidEntity goal; the attack target is not erased near a zombified piglin
67 PiglinAi.findNearestValidAttackTarget port crates/horizon-client/src/mobs/piglin.rs::hostile_to_player gap: minor: decides player targets only; angry-at, nemesis and universal anger are not chosen here
68 PiglinAi.canAdmire port crates/horizon-client/src/game/piglins.rs::Game::give_piglin adult piglin takes a gold ingot from the hand
69 PiglinAi.maybeRetaliate inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: minor: the hurt mob becomes the target; the 600-tick anger timer and the too-far check are not kept
70 PiglinAi.getSoundForActivity missing player: piglins never play their jealous, retreat, celebrate or admiring-item ambient sounds
71 PiglinAi.isNearAvoidTarget missing minor: only used by the retreat sound, which Horizon lacks
72 PiglinAi.babySometimesRideBabyHoglin missing player: baby piglins never ride baby hoglins
73 PiglinAi.broadcastAngerTarget inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: minor: alerts same-kind mobs nearby; no closer-target check and no hoglin rule
74 PiglinAi.broadcastUniversalAnger missing minor: the universal_anger game rule is stored but piglins ignore it
75 PiglinAi.setAngerTarget port crates/horizon-client/src/game/piglins.rs::Game::anger_piglins gap: minor: only the player path (600-tick anger); a hoglin target does not set the hunt wait
76 PiglinAi.setAngerTargetToNearestTargetablePlayerIfFound missing minor: only for universal anger, which Horizon does not apply
77 PiglinAi.setAngerTargetIfCloserThanCurrent inline crates/horizon-client/src/mobs/goals.rs::HurtByTarget::start gap: minor: alerts nearby piglins but never keeps a closer target
78 PiglinAi.getAvoidTarget missing player: no avoid target exists, so piglins do not back away from hoglins they are outnumbered by
79 PiglinAi.getNearestVisibleTargetablePlayer missing minor: only used by universal anger, which Horizon does not apply
80 PiglinAi.broadcastRetreat missing player: piglins do not warn others to retreat from a hoglin group
81 PiglinAi.retreatFromNearestTarget missing player: piglins do not retreat from a hoglin group
82 PiglinAi.wantsToStopFleeing missing player: no retreat state, so nothing ends one
83 PiglinAi.hoglinsOutnumberPiglins missing player: no retreat decision, so hoglins outnumbering piglins changes nothing
84 PiglinAi.setAvoidTargetAndDontHuntForAWhile missing player: piglins hit by a hoglin group do not stop attacking and back off
85 PiglinAi.dontKillAnyMoreHoglinsForAWhile port crates/horizon-client/src/mobs/piglin.rs::HuntHoglin::start gap: minor: sets only the hunting piglin's own wait; the wait from a hit on a hoglin is not set
86 PiglinAi.getRandomNearbyPos inline crates/horizon-client/src/game/piglins.rs::Game::finish_admiring gap: minor: a random spot within 4 blocks, not a land position
87 PiglinAi.isPlayerHoldingLovedItem missing player: piglins do not turn to look at a player holding gold, so that look never happens
88 PiglinAi.isNotHoldingLovedItemInOffHand inline crates/horizon-client/src/game/piglins.rs::Game::piglin_wants the off hand holds no loved item test
89 PiglinAi.isZombified inline crates/horizon-client/src/mobs/piglin.rs::register_piglin the zombified piglin and zoglin species list of the avoid goal
90 PiglinAi.findNearbyAdultPiglins inline crates/horizon-client/src/mobs/piglin.rs::HuntHoglin::start gap: minor: uses the follow range, not the sensor's nearest living entities list
91 AbstractSkeleton.registerGoals port crates/horizon-client/src/mobs/undead.rs::register restrict sun, flee sun, wolf avoid, stroll, look, targets
92 AbstractSkeleton.rideTick missing minor: a skeleton riding a spider does not turn its body with the mount
93 AbstractSkeleton.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::skeleton equipment, enchantments, pick-up chance, halloween pumpkin; the weapon goal is re-picked on the next tick
94 AbstractSkeleton.reassessWeaponGoal port crates/horizon-client/src/mobs/undead.rs::SkeletonWeapon::can_use bow goal with the hard or normal interval, else melee
95 AbstractSkeleton.onEquipItem inline crates/horizon-client/src/mobs/undead.rs::SkeletonWeapon::can_use gap: minor: the weapon is re-picked on the next goal check, not at the moment of equipping
96 AbstractSkeleton.wantsToPickUp missing minor: skeletons never pick up dropped items in Horizon (no generic mob pickup); vanilla refuses spears
97 Bogged.getArrow port crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack Bogged arrows carry poison for 100 ticks
98 Bogged.shear port crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob shear sound, sheared flag, shearing loot, game event
99 Bogged.spawnShearedMushrooms port crates/horizon-client/src/game/creatures.rs::Game::interact_shear_mob drops the shearing/bogged loot table at the mob's height
100 WitherSkeleton.registerGoals port crates/horizon-client/src/mobs/undead.rs::register piglin and piglin brute target at priority 3, then the skeleton goals
101 WitherSkeleton.canHoldItem missing minor: no mob item pickup in Horizon, so the disliked-weapons tag never applies
102 WitherSkeleton.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::skeleton attack damage 4 for wither skeletons
103 WitherSkeleton.getArrow missing minor: arrows from a wither skeleton are not set on fire for 100 seconds
104 Spider.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register spider goals: leap at target and the spider melee that gives up in bright light
105 Spider.isClimbing skip:other getter; Horizon reads the mob's climbing field
106 Spider.setClimbing inline crates/horizon-client/src/mobs/ai.rs::ai_step climbing set from the horizontal collision each tick
107 Spider.getVehicleAttachmentPoint port crates/horizon-client/src/mobs/riders.rs::passenger_attachment gap: minor: always the spider's fixed seat; vanilla uses a lower seat for riders narrower than the spider
108 Spider.SpiderEffectsGroupData.setRandomEffect port crates/horizon-client/src/mobs/finalize.rs::Ctx::spider hard-difficulty effect: speed, strength, regeneration or invisibility
109 AngerManagement.codec missing minor: warden anger is not saved; the anger tag is written empty, so a reloaded warden forgets its suspects
110 AngerManagement.createUuidAngerPairs missing minor: part of the anger save, which Horizon does not write
111 AngerManagement.convertFromUuids missing minor: part of the anger load, which Horizon does not read
112 AngerManagement.getTopSuspect port crates/horizon-client/src/mobs/warden.rs::AngerManagement::active_entity first suspect the filter accepts
113 AngerManagement.Sorter.compare port crates/horizon-client/src/mobs/warden.rs::AngerManagement::sort_and_update_highest angry first, then players, then the angriest
114 Warden.<init> port crates/horizon-client/src/mobs/warden.rs::register pathfinding maluses and can-float; the anger and vibration state start empty
115 Warden.getAddEntityPacket missing unsure: the spawn packet's emerging flag (data 1) has no Horizon counterpart that I found
116 Warden.recreateFromPacket missing unsure: no client-side emerging pose from a spawn packet that I found
117 Warden.createAttributes skip:data attribute defaults (health 500, speed 0.3, damage 30) live in data tables
118 Warden.handleEntityEvent inline crates/horizon-client/src/mobs/warden.rs::animate gap: minor: could not confirm the attack animation (event 4) is started here; tendril and sonic boom are
119 Warden.onSyncedDataUpdated inline crates/horizon-client/src/mobs/warden.rs::set_pose starts the emerge, dig, roar or sniff animation on pose change
120 Warden.updateDynamicGameEventListener port crates/horizon-client/src/mobs/warden.rs::listen vibrations reach the warden through listen; there is no registration step
121 Warden.addAdditionalSaveData missing minor: warden anger is not saved (the anger tag is written empty)
122 Warden.readAdditionalSaveData missing minor: warden anger is not read back, so a reloaded warden is calm
123 Warden.playListeningSound inline crates/horizon-client/src/mobs/warden.rs::increase_anger plays the listening sound for the anger level, unless roaring
124 WardenAi.initCoreActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities swim, look at target, look sink, move sink
125 WardenAi.initDiggingActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities force unmount and digging
126 WardenAi.initIdleActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities roar target, sniff, stroll or idle
127 WardenAi.initInvestigateActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities roar target and walk to the disturbance
128 WardenAi.initSniffingActivity inline crates/horizon-client/src/mobs/warden_brain.rs::activities roar target and sniffing
129 WardenAi.isTarget port crates/horizon-client/src/mobs/warden.rs::brain_target gap: minor: returns the attack target; the look-at filter is the caller's check
130 WardenSpawnTracker.hasNearbyWarden inline crates/horizon-client/src/game/sculk.rs::Game::try_to_warn a warden within 24 blocks on each axis stops the warning
131 WardenSpawnTracker.getNearbyPlayers inline crates/horizon-client/src/game/sculk.rs::Game::try_to_warn gap: minor: only the player who set off the shrieker is counted, not other players within 16 blocks
132 WardenSpawnTracker.copyData inline crates/horizon-client/src/sculk.rs::WardenSpawnTracker::try_warn every tracker takes the highest one's level, cooldown and tick count
133 Drowned.checkDrownedSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules water below, spawner or deep enough, dark enough, frequency roll
134 Drowned.isDeepEnoughToSpawn inline crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules below sea level minus 5
135 Drowned.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate 10 percent chance of a trident (10 in 16) or fishing rod
136 Drowned.canReplaceCurrentItem missing minor: no mob item pickup in Horizon, so the nautilus shell guard never applies
137 Drowned.rangedAttackUncertainty port crates/horizon-client/src/mobs/undead.rs::drowned_throw gap: minor: fixed uncertainty 6 (normal difficulty), not 14 minus 4 times the difficulty
138 Drowned.rideTick missing minor: a drowned riding a mount does not turn its body with the mount
139 Drowned.wantsToPickUp missing minor: no mob item pickup in Horizon, so the spear refusal never applies
140 Drowned.DrownedGoToBeachGoal.isValidTarget port crates/horizon-client/src/mobs/undead.rs::beach_target two empty blocks above and a standable block below
141 Drowned.DrownedGoToWaterGoal.getWaterPos port crates/horizon-client/src/mobs/undead.rs::DrownedGoToWater::can_use ten random spots 10 blocks around and up to 2 above, water only
142 Zombie.addBehaviourGoals port crates/horizon-client/src/mobs/undead.rs::register break door, turtle egg, melee, village, stroll, targets
143 Zombie.createAttributes skip:data attribute defaults (follow 35, speed 0.23, damage 3, armour 2) live in data tables
144 Zombie.defineSynchedData skip:java synched-data registration; Horizon keeps baby, special type and drowned state in Mob fields
145 Zombie.populateDefaultEquipmentSlots port crates/horizon-client/src/mobs/finalize.rs::Ctx::populate armour, then 1 percent (5 on hard) of an iron sword, spear or shovel
146 Zombie.canHoldItem missing minor: no mob item pickup in Horizon, so the baby-egg rule never applies
147 Zombie.wantsToPickUp missing minor: no mob item pickup in Horizon, so the glow ink sac refusal never applies
148 Zombie.onOffspringSpawnedFromEgg missing unsure: no egg-offspring pickup roll found for zombies in Horizon
149 Zombie.ZombieAttackTurtleEggGoal.playDestroyProgressSound inline crates/horizon-client/src/mobs/undead.rs::AttackTurtleEgg::tick zombie.destroy_egg sound while the egg is trampled
150 Zombie.ZombieAttackTurtleEggGoal.playBreakSound inline crates/horizon-client/src/mobs/undead.rs::AttackTurtleEgg::tick turtle egg break sound when the egg breaks
+142
View File
@@ -0,0 +1,142 @@
ZombieVillager.defineSynchedData skip:java SynchedEntityData definitions; Horizon keeps the fields on Mob and sets them at spawn
ZombieVillager.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt zombie villager save arm; cure and gossip go through zombie_villager::write_nbt
ZombieVillager.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt load arm; cure and gossip go through zombie_villager::read_nbt
ZombieVillager.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize ZombieVillager arm: villager type, then profession, then zombie spawn
ZombieVillager.initializeZombieVillagerData port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize profession drawn in the same arm, from a seeded fresh RNG rather than the mob random
ZombieVillager.handleEntityEvent port crates/horizon-client/src/mobs/zombie_villager.rs::start_converting cure sound (event 16) is queued when the cure starts
ZombieVillager.setVillagerData inline crates/horizon-client/src/game/zombie_villagers.rs::carry_over gap: minor: the cure path copies type and profession there; no setter for the implicit component path
ZombieVillager.get skip:other DataComponents getter for the villager variant; Horizon has no entity component map
ZombieVillager.applyImplicitComponent missing minor: a zombie villager spawned from an item carrying a villager variant component keeps a random type; Horizon applies implicit components only to buckets (load_bucket_data)
ZombifiedPiglin.createAttributes skip:data attribute defaults are entity-type data read in Mob::new (mobs.rs)
ZombifiedPiglin.maybePlayFirstAngerSound port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step first-anger counter and sound run in the step
ZombifiedPiglin.maybeAlertOthers port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step alert timer and line-of-sight check run in the step
ZombifiedPiglin.alertOthers port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step gap: minor: no isAlliedTo check; vertical reach approximated
ZombifiedPiglin.playAngerSound port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step angry sound queued in the step with volume 2.0
ZombifiedPiglin.setTarget port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step anger and timers start on the first tick with a target, not inside setTarget
ZombifiedPiglin.checkZombifiedPiglinSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules ZombifiedPiglin arm: not peaceful and not on a nether wart block
ZombifiedPiglin.checkSpawnObstruction port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_obstruction the Mob default two tests: no liquid, unobstructed
CatSpawner.spawnInVillage port crates/horizon-client/src/game/cat_spawner.rs::Game::spawn_cat_in_village village cats: more than four claimed beds within 48 blocks and fewer than five cats
CatSpawner.spawnCat port crates/horizon-client/src/game/cat_spawner.rs::Game::spawn_cat black variant inside cats_spawn_as_black structures; persistence flag from the caller
InventoryCarrier.pickUpItem port crates/horizon-client/src/game/villagers.rs::Game::villager_pickups gap: minor: villager arm only; piglins, sulfur cubes, pandas and others have their own pickup fns
AbstractVillager.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize villager arm: type, then the baby group
AbstractVillager.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Offers in the villager arm; inventory via villager::write_nbt
AbstractVillager.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_villager Offers read here; inventory via villager::read_nbt
AbstractVillager.getSlot missing minor: commands cannot address a villager inventory slot (container.N); mob slot names cover weapon, armour and saddle only
AbstractVillager.addOffersFromItemListings port crates/horizon-client/src/merchant.rs::Trades::offers_from_set the allow_duplicates path: a picked trade stays in the pool
AbstractVillager.addOffersFromItemListingsWithoutDuplicates port crates/horizon-client/src/merchant.rs::Trades::offers_from_set the no-duplicates path: a picked trade leaves the pool
AbstractVillager.getRopeHoldPosition skip:ui lead rope drawing point only; the lead is drawn by leash_geometry in game.rs
AbstractVillager.stillValid missing player: the trade screen stays open after you walk away from the villager; vanilla closes it beyond 4 blocks, and no reach check exists for merchant screens
Villager.ageBoundaryReached missing player: a villager that grows up keeps the baby brain (the brain is built once with its baby flag), so it never goes to work
Villager.startTrading port crates/horizon-client/src/game/trading.rs::Game::interact_trader opens the trade screen for the player
Villager.resetSpecialPrices port crates/horizon-client/src/merchant.rs::update_special_prices recomputes special prices from scratch, which drops the old diff
Villager.needsToRestock inline crates/horizon-client/src/merchant.rs::Trader::should_restock any offer with uses left
Villager.allowedToRestock inline crates/horizon-client/src/merchant.rs::Trader::should_restock two restocks a day at most, 2400 ticks apart
Villager.catchUpDemand inline crates/horizon-client/src/merchant.rs::Trader::should_restock missed demand updates on a new day
Villager.defineSynchedData skip:java synched data definitions; Horizon keeps the fields on Mob
Villager.createDefaultVillagerData skip:data default type, profession and level; the spawn defaults of the Horizon mob fields
Villager.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt villager arm: data, xp, restocks, offers; food, gossip and decay via villager::write_nbt
Villager.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_villager data and offers here; food, gossip, decay and inventory via villager::read_nbt
Villager.getAmbientSound port crates/horizon-client/src/mobs/ai.rs::play_ambient gap: minor: the trade ambient sound is not played while trading
Villager.rewardTradeXp port crates/horizon-client/src/merchant.rs::Session::notify_trade gap: minor: no 10 second Regeneration on the villager at level-up
Villager.die port crates/horizon-client/src/game/villagers.rs::Game::villager_murdered gap: minor: releaseAllPois is not done on death
Villager.releaseAllPois missing unsure: releasePoi frees the bed, job site, potential job site and meeting point claims; Horizon has no claim store, only the block occupied property, so the effect is unclear
Villager.releasePoi missing unsure: same as releaseAllPois; the claim store is not clear in Horizon
Villager.eatUntilFull port crates/horizon-client/src/mobs/villager.rs::Ext::eat_and_digest
Villager.shouldIncreaseLevel inline crates/horizon-client/src/merchant.rs::Session::notify_trade level-up check: can level up and xp at the maximum
Villager.increaseMerchantCareer inline crates/horizon-client/src/merchant.rs::Session::notify_trade level plus the new level trade set
Villager.handleEntityEvent port crates/horizon-client/src/game/villagers.rs::Game::entity_event_particles villager event particles from the entity event table
Villager.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize villager arm: breeding resets the profession, then type and the baby group
Villager.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit villager struck by lightning becomes a witch; gap: minor: releaseAllPois is not done on conversion
Villager.wantsToPickUp port crates/horizon-client/src/game/villagers.rs::Game::villager_pickups the want test (food, pick-up tag, requested items) inside the pickup loop
Villager.countFoodPointsInInventory port crates/horizon-client/src/mobs/villager.rs::Ext::food_in_inventory
Villager.updateTrades port crates/horizon-client/src/game/trading.rs::Game::ensure_offers generates the trade set for profession and level; the level-up reroll is in merchant.rs notify_trade
Villager.maybeDecayGossip port crates/horizon-client/src/mobs/villager.rs::Ext::maybe_decay
Villager.golemSpawnConditionsMet port crates/horizon-client/src/mobs/villager.rs::Ext::wants_golem sleep memory check; the golem cooldown is an extra check here
Villager.get skip:other DataComponents getter for the villager variant; Horizon has no entity component map
Villager.applyImplicitComponent missing minor: a villager spawned from an item carrying a villager variant component keeps its biome type; Horizon applies implicit components only to buckets
VillagerData.withType skip:java immutable record copy; Horizon keeps type and profession as Mob fields
VillagerData.withProfession skip:java immutable record copy; the profession change is villager::set_profession
VillagerProfession.bootstrap skip:data registry bootstrap of professions; Horizon reads them from data tables
VillagerType.bootstrap skip:data registry bootstrap of villager types; Horizon reads them from data tables
WanderingTrader.registerGoals port crates/horizon-client/src/mobs/trader.rs::register the trader goal set; the shared register in mobs/ai.rs is not repeated here
WanderingTrader.updateTrades port crates/horizon-client/src/game/trading.rs::Game::ensure_offers the buying, uncommon and common sets of the wandering branch
WanderingTrader.addAdditionalSaveData missing minor: DespawnDelay and wander_target are not written; the trader save writes only its offers
WanderingTrader.readAdditionalSaveData missing minor: DespawnDelay and wander_target are not read back
WanderingTrader.rewardTradeXp port crates/horizon-client/src/merchant.rs::Session::notify_trade the orb for offers that reward experience; the trader gets no villager XP
WanderingTrader.WanderToPositionGoal.isTooFarAway port crates/horizon-client/src/mobs/trader.rs::too_far
WanderingTraderSpawner.getTraderData port crates/horizon-client/src/game/wandering_trader.rs::Game::load_trader_data
WanderingTraderSpawner.tryToSpawnLlamaFor port crates/horizon-client/src/game/wandering_trader.rs::Game::spawn_trader_llama
WanderingTraderSpawner.findSpawnPositionNear port crates/horizon-client/src/game/wandering_trader.rs::Game::find_trader_spawn_near
WanderingTraderSpawner.hasEnoughSpace port crates/horizon-client/src/game/wandering_trader.rs::Game::trader_has_space
Inventory.setSelectedSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::set_selected invalid slot is an error here, not a thrown exception
Inventory.hasRemainingSpaceForItem port crates/horizon-world/src/inventory_pickup.rs::remaining
Inventory.getFreeSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::free_slot
Inventory.addAndPickItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::add_and_pick
Inventory.pickSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::pick_slot
Inventory.findSlotMatchingItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::find_matching
Inventory.findSlotMatchingCraftingIngredient port crates/horizon-world/src/player_inventory.rs::PlayerInventory::find_crafting
Inventory.getSuitableHotbarSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::suitable_hotbar
Inventory.removeItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::remove slots past the main inventory address equipment
Inventory.removeItemNoUpdate port crates/horizon-world/src/player_inventory.rs::PlayerInventory::remove_no_update
Inventory.setItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::set slots past the main inventory address equipment
Inventory.save port crates/horizon-client/src/save.rs::Level::player_tag writes the non-empty slots of the Inventory list
Inventory.isEmpty port crates/horizon-world/src/player_inventory.rs::PlayerInventory::is_empty
Inventory.getItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::get slots past the main inventory address equipment
Inventory.replaceWith port crates/horizon-world/src/player_inventory.rs::PlayerInventory::replace_with
Inventory.removeFromSelected port crates/horizon-world/src/player_inventory.rs::PlayerInventory::remove_selected
Player.defineSynchedData skip:java synched data definitions; Horizon keeps the fields in game and player state
Player.turtleHelmetTick port crates/horizon-client/src/game/potions.rs::Game::turtle_helmet_tick
Player.isEquipped inline crates/horizon-client/src/game/potions.rs::Game::turtle_helmet_tick the head-slot check for the turtle helmet
Player.canPlayerFitWithinBlocksAndEntitiesWhen missing unsure: the pose fit check (no collision in the new pose box) was not found in Horizon
Player.increaseScore skip:other the score is experience.total in Horizon (death screen); there is no separate score counter
Player.getWeaponItem missing unsure: the riptide spin-attack item (autoSpinAttackItemStack) was not found; Horizon keeps spin_attack parts only
Player.destroyVanishingCursedItems port crates/horizon-client/src/game.rs::Game::drop_inventory vanishing-curse stacks are removed from the death drops
Player.hasCorrectToolForDrops port crates/horizon-client/src/game.rs::Game::tick_mining the correct-tool test for harvest drops
Player.readAdditionalSaveData port crates/horizon-client/src/save.rs::Level::read_player
Player.addAdditionalSaveData port crates/horizon-client/src/save.rs::Level::player_tag
Player.hurtHelmet inline crates/horizon-client/src/game.rs::Game::hurt_armor gap: minor: hurt_armor hits all four armour slots; the head-only hit from LivingEntity.hurt is not separated
Player.isAboveGround inline crates/horizon-world/src/edge_backoff.rs::back_off_from_edge the on-the-edge test before backing off
Player.canFallAtLeast inline crates/horizon-world/src/edge_backoff.rs::back_off_from_edge the no-collision drop test at the edge
Player.deflectProjectile port crates/horizon-client/src/game/deflect.rs::Game::attack_redirectable
Player.baseDamageScaleFactor port crates/horizon-client/src/game.rs::Game::sweep_base_damage
Player.isEffectiveAi skip:other client-side AI gate; Horizon has no effective-AI check in its loop
Player.hasContainerOpen missing unsure: the test for an open container menu (not the inventory menu) was not located
Player.startSleepInBed port crates/horizon-client/src/game.rs::Game::try_sleep
Player.isSleepingLongEnough missing unsure: the 100-tick sleep counter gate for the night skip was not found; the sleep timer only drives the fade
Player.updateSwimming port crates/horizon-client/src/motion.rs::MotionWorld::swimming
Player.getXpNeededForNextLevel port crates/horizon-client/src/entities.rs::Experience::needed
Player.hasEnoughFoodToDoExhaustiveManoeuvres missing unsure: the food-or-flying test for exhaustive moves was not found in motion.rs
Player.mayUseItemAt port crates/horizon-client/src/game.rs::Game::use_hand the may-build test before use-on in adventure mode
Player.isSwimming port crates/horizon-client/src/motion.rs::MotionWorld::swimming
Player.decorateDisplayNameComponent missing unsure: click and hover behaviour on player names in chat was not found
Player.getSlot port crates/horizon-client/src/game/commands/items.rs::Game::slots_named gap: minor: numeric slots 499 (carried item) and 500-503 (crafting grid) are not addressed
Player.extractParrotVariant missing unsure: the parrot variant read from a shoulder parrot NBT was not found in shoulders.rs
Player.convertParrotVariant skip:java Optional and OptionalInt conversion of the synched parrot variant; Horizon stores the id directly
Player.getItemSwapScale port crates/horizon-client/src/attack_strength.rs::AttackStrength::swap_scale
Player.debugInfo skip:debug
Player.printPlayerPermissions skip:debug
PlayerEquipment.set port crates/horizon-world/src/player_equipment.rs::set main hand goes to the selected slot
PlayerEquipment.get port crates/horizon-world/src/player_equipment.rs::get main hand reads the selected slot
ProfilePublicKey.Data.hasExpired port crates/horizon-protocol/src/secure_chat.rs::ProfileKey::has_expired gap: minor: the grace-period overload is not separate
ProfilePublicKey.Data.equals skip:java value equality of the key record
StackedContents.take inline crates/horizon-client/src/menu/place.rs::Picker::try_pick the count subtraction when a pick succeeds
StackedContents.getUniqueAvailableIngredientItems inline crates/horizon-client/src/menu/place.rs::Picker::new the stocked items that some ingredient accepts
StackedContents.anyIngredientMatches inline crates/horizon-client/src/menu/place.rs::Picker::new the accepts test used to filter items
StackedContents.RecipePicker.setInitialConnections port crates/horizon-client/src/menu/place.rs::Picker::new the connection matrix is built in the constructor
StackedContents.RecipePicker.findNewItemAssignmentPath port crates/horizon-client/src/menu/place.rs::Picker::find_path
StackedContents.RecipePicker.getSatisfiedIndex skip:java bitset index arithmetic; Horizon keeps satisfied as a plain bool vector
StackedContents.RecipePicker.getConnectionIndex port crates/horizon-client/src/menu/place.rs::Picker::at flat index of an item-ingredient pair
StackedContents.RecipePicker.assign inline crates/horizon-client/src/menu/place.rs::Picker::try_pick the assigned flag set along a successful path
StackedContents.RecipePicker.unassign inline crates/horizon-client/src/menu/place.rs::Picker::try_pick the assigned flag cleared when a path is undone
StackedContents.RecipePicker.getResidualIndex port crates/horizon-client/src/menu/place.rs::Picker::at flat index of the assignment, same layout as connections
StackedContents.RecipePicker.getVisitedIngredientIndex skip:java bitset index arithmetic; plain bool vectors in Horizon
StackedContents.RecipePicker.getVisitiedItemIndex skip:java bitset index arithmetic; plain bool vectors in Horizon
StackedContents.RecipePicker.clearAllVisited port crates/horizon-client/src/menu/place.rs::Picker::clear_visited
StackedItemContents.getBiggestCraftableStack port crates/horizon-client/src/menu/place.rs::Stacked::try_pick_all the largest craftable count, found by a bounded search
EvokerFangs.readAdditionalSaveData missing minor: fangs are not saved; a save in mid-bite drops them
EvokerFangs.addAdditionalSaveData missing minor: fangs are not saved; the warmup and owner are not written
EvokerFangs.getAnimationProgress port crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry the bite progress that positions the fang model
EyeOfEnder.setItem skip:ui the item sprite a flying eye shows; Horizon draws the eye itself
EyeOfEnder.shouldRenderAtSqrDistance skip:ui render distance culling only
EyeOfEnder.spawnParticles port crates/horizon-client/src/game/end.rs::Game::eye_break_particles the portal crumbs drawn in toward the eye
EyeOfEnder.readAdditionalSaveData missing minor: flying eyes are not saved; a save mid-flight loses them
1 ZombieVillager.defineSynchedData skip:java SynchedEntityData definitions; Horizon keeps the fields on Mob and sets them at spawn
2 ZombieVillager.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt zombie villager save arm; cure and gossip go through zombie_villager::write_nbt
3 ZombieVillager.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_from_nbt load arm; cure and gossip go through zombie_villager::read_nbt
4 ZombieVillager.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize ZombieVillager arm: villager type, then profession, then zombie spawn
5 ZombieVillager.initializeZombieVillagerData port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize profession drawn in the same arm, from a seeded fresh RNG rather than the mob random
6 ZombieVillager.handleEntityEvent port crates/horizon-client/src/mobs/zombie_villager.rs::start_converting cure sound (event 16) is queued when the cure starts
7 ZombieVillager.setVillagerData inline crates/horizon-client/src/game/zombie_villagers.rs::carry_over gap: minor: the cure path copies type and profession there; no setter for the implicit component path
8 ZombieVillager.get skip:other DataComponents getter for the villager variant; Horizon has no entity component map
9 ZombieVillager.applyImplicitComponent missing minor: a zombie villager spawned from an item carrying a villager variant component keeps a random type; Horizon applies implicit components only to buckets (load_bucket_data)
10 ZombifiedPiglin.createAttributes skip:data attribute defaults are entity-type data read in Mob::new (mobs.rs)
11 ZombifiedPiglin.maybePlayFirstAngerSound port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step first-anger counter and sound run in the step
12 ZombifiedPiglin.maybeAlertOthers port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step alert timer and line-of-sight check run in the step
13 ZombifiedPiglin.alertOthers port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step gap: minor: no isAlliedTo check; vertical reach approximated
14 ZombifiedPiglin.playAngerSound port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step angry sound queued in the step with volume 2.0
15 ZombifiedPiglin.setTarget port crates/horizon-client/src/mobs/undead.rs::zombified_piglin_step anger and timers start on the first tick with a target, not inside setTarget
16 ZombifiedPiglin.checkZombifiedPiglinSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules ZombifiedPiglin arm: not peaceful and not on a nether wart block
17 ZombifiedPiglin.checkSpawnObstruction port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_obstruction the Mob default two tests: no liquid, unobstructed
18 CatSpawner.spawnInVillage port crates/horizon-client/src/game/cat_spawner.rs::Game::spawn_cat_in_village village cats: more than four claimed beds within 48 blocks and fewer than five cats
19 CatSpawner.spawnCat port crates/horizon-client/src/game/cat_spawner.rs::Game::spawn_cat black variant inside cats_spawn_as_black structures; persistence flag from the caller
20 InventoryCarrier.pickUpItem port crates/horizon-client/src/game/villagers.rs::Game::villager_pickups gap: minor: villager arm only; piglins, sulfur cubes, pandas and others have their own pickup fns
21 AbstractVillager.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize villager arm: type, then the baby group
22 AbstractVillager.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt Offers in the villager arm; inventory via villager::write_nbt
23 AbstractVillager.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_villager Offers read here; inventory via villager::read_nbt
24 AbstractVillager.getSlot missing minor: commands cannot address a villager inventory slot (container.N); mob slot names cover weapon, armour and saddle only
25 AbstractVillager.addOffersFromItemListings port crates/horizon-client/src/merchant.rs::Trades::offers_from_set the allow_duplicates path: a picked trade stays in the pool
26 AbstractVillager.addOffersFromItemListingsWithoutDuplicates port crates/horizon-client/src/merchant.rs::Trades::offers_from_set the no-duplicates path: a picked trade leaves the pool
27 AbstractVillager.getRopeHoldPosition skip:ui lead rope drawing point only; the lead is drawn by leash_geometry in game.rs
28 AbstractVillager.stillValid missing player: the trade screen stays open after you walk away from the villager; vanilla closes it beyond 4 blocks, and no reach check exists for merchant screens
29 Villager.ageBoundaryReached missing player: a villager that grows up keeps the baby brain (the brain is built once with its baby flag), so it never goes to work
30 Villager.startTrading port crates/horizon-client/src/game/trading.rs::Game::interact_trader opens the trade screen for the player
31 Villager.resetSpecialPrices port crates/horizon-client/src/merchant.rs::update_special_prices recomputes special prices from scratch, which drops the old diff
32 Villager.needsToRestock inline crates/horizon-client/src/merchant.rs::Trader::should_restock any offer with uses left
33 Villager.allowedToRestock inline crates/horizon-client/src/merchant.rs::Trader::should_restock two restocks a day at most, 2400 ticks apart
34 Villager.catchUpDemand inline crates/horizon-client/src/merchant.rs::Trader::should_restock missed demand updates on a new day
35 Villager.defineSynchedData skip:java synched data definitions; Horizon keeps the fields on Mob
36 Villager.createDefaultVillagerData skip:data default type, profession and level; the spawn defaults of the Horizon mob fields
37 Villager.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt villager arm: data, xp, restocks, offers; food, gossip and decay via villager::write_nbt
38 Villager.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::read_villager data and offers here; food, gossip, decay and inventory via villager::read_nbt
39 Villager.getAmbientSound port crates/horizon-client/src/mobs/ai.rs::play_ambient gap: minor: the trade ambient sound is not played while trading
40 Villager.rewardTradeXp port crates/horizon-client/src/merchant.rs::Session::notify_trade gap: minor: no 10 second Regeneration on the villager at level-up
41 Villager.die port crates/horizon-client/src/game/villagers.rs::Game::villager_murdered gap: minor: releaseAllPois is not done on death
42 Villager.releaseAllPois missing unsure: releasePoi frees the bed, job site, potential job site and meeting point claims; Horizon has no claim store, only the block occupied property, so the effect is unclear
43 Villager.releasePoi missing unsure: same as releaseAllPois; the claim store is not clear in Horizon
44 Villager.eatUntilFull port crates/horizon-client/src/mobs/villager.rs::Ext::eat_and_digest
45 Villager.shouldIncreaseLevel inline crates/horizon-client/src/merchant.rs::Session::notify_trade level-up check: can level up and xp at the maximum
46 Villager.increaseMerchantCareer inline crates/horizon-client/src/merchant.rs::Session::notify_trade level plus the new level trade set
47 Villager.handleEntityEvent port crates/horizon-client/src/game/villagers.rs::Game::entity_event_particles villager event particles from the entity event table
48 Villager.finalizeSpawn port crates/horizon-client/src/mobs/finalize.rs::Ctx::finalize villager arm: breeding resets the profession, then type and the baby group
49 Villager.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit villager struck by lightning becomes a witch; gap: minor: releaseAllPois is not done on conversion
50 Villager.wantsToPickUp port crates/horizon-client/src/game/villagers.rs::Game::villager_pickups the want test (food, pick-up tag, requested items) inside the pickup loop
51 Villager.countFoodPointsInInventory port crates/horizon-client/src/mobs/villager.rs::Ext::food_in_inventory
52 Villager.updateTrades port crates/horizon-client/src/game/trading.rs::Game::ensure_offers generates the trade set for profession and level; the level-up reroll is in merchant.rs notify_trade
53 Villager.maybeDecayGossip port crates/horizon-client/src/mobs/villager.rs::Ext::maybe_decay
54 Villager.golemSpawnConditionsMet port crates/horizon-client/src/mobs/villager.rs::Ext::wants_golem sleep memory check; the golem cooldown is an extra check here
55 Villager.get skip:other DataComponents getter for the villager variant; Horizon has no entity component map
56 Villager.applyImplicitComponent missing minor: a villager spawned from an item carrying a villager variant component keeps its biome type; Horizon applies implicit components only to buckets
57 VillagerData.withType skip:java immutable record copy; Horizon keeps type and profession as Mob fields
58 VillagerData.withProfession skip:java immutable record copy; the profession change is villager::set_profession
59 VillagerProfession.bootstrap skip:data registry bootstrap of professions; Horizon reads them from data tables
60 VillagerType.bootstrap skip:data registry bootstrap of villager types; Horizon reads them from data tables
61 WanderingTrader.registerGoals port crates/horizon-client/src/mobs/trader.rs::register the trader goal set; the shared register in mobs/ai.rs is not repeated here
62 WanderingTrader.updateTrades port crates/horizon-client/src/game/trading.rs::Game::ensure_offers the buying, uncommon and common sets of the wandering branch
63 WanderingTrader.addAdditionalSaveData missing minor: DespawnDelay and wander_target are not written; the trader save writes only its offers
64 WanderingTrader.readAdditionalSaveData missing minor: DespawnDelay and wander_target are not read back
65 WanderingTrader.rewardTradeXp port crates/horizon-client/src/merchant.rs::Session::notify_trade the orb for offers that reward experience; the trader gets no villager XP
66 WanderingTrader.WanderToPositionGoal.isTooFarAway port crates/horizon-client/src/mobs/trader.rs::too_far
67 WanderingTraderSpawner.getTraderData port crates/horizon-client/src/game/wandering_trader.rs::Game::load_trader_data
68 WanderingTraderSpawner.tryToSpawnLlamaFor port crates/horizon-client/src/game/wandering_trader.rs::Game::spawn_trader_llama
69 WanderingTraderSpawner.findSpawnPositionNear port crates/horizon-client/src/game/wandering_trader.rs::Game::find_trader_spawn_near
70 WanderingTraderSpawner.hasEnoughSpace port crates/horizon-client/src/game/wandering_trader.rs::Game::trader_has_space
71 Inventory.setSelectedSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::set_selected invalid slot is an error here, not a thrown exception
72 Inventory.hasRemainingSpaceForItem port crates/horizon-world/src/inventory_pickup.rs::remaining
73 Inventory.getFreeSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::free_slot
74 Inventory.addAndPickItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::add_and_pick
75 Inventory.pickSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::pick_slot
76 Inventory.findSlotMatchingItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::find_matching
77 Inventory.findSlotMatchingCraftingIngredient port crates/horizon-world/src/player_inventory.rs::PlayerInventory::find_crafting
78 Inventory.getSuitableHotbarSlot port crates/horizon-world/src/player_inventory.rs::PlayerInventory::suitable_hotbar
79 Inventory.removeItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::remove slots past the main inventory address equipment
80 Inventory.removeItemNoUpdate port crates/horizon-world/src/player_inventory.rs::PlayerInventory::remove_no_update
81 Inventory.setItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::set slots past the main inventory address equipment
82 Inventory.save port crates/horizon-client/src/save.rs::Level::player_tag writes the non-empty slots of the Inventory list
83 Inventory.isEmpty port crates/horizon-world/src/player_inventory.rs::PlayerInventory::is_empty
84 Inventory.getItem port crates/horizon-world/src/player_inventory.rs::PlayerInventory::get slots past the main inventory address equipment
85 Inventory.replaceWith port crates/horizon-world/src/player_inventory.rs::PlayerInventory::replace_with
86 Inventory.removeFromSelected port crates/horizon-world/src/player_inventory.rs::PlayerInventory::remove_selected
87 Player.defineSynchedData skip:java synched data definitions; Horizon keeps the fields in game and player state
88 Player.turtleHelmetTick port crates/horizon-client/src/game/potions.rs::Game::turtle_helmet_tick
89 Player.isEquipped inline crates/horizon-client/src/game/potions.rs::Game::turtle_helmet_tick the head-slot check for the turtle helmet
90 Player.canPlayerFitWithinBlocksAndEntitiesWhen missing unsure: the pose fit check (no collision in the new pose box) was not found in Horizon
91 Player.increaseScore skip:other the score is experience.total in Horizon (death screen); there is no separate score counter
92 Player.getWeaponItem missing unsure: the riptide spin-attack item (autoSpinAttackItemStack) was not found; Horizon keeps spin_attack parts only
93 Player.destroyVanishingCursedItems port crates/horizon-client/src/game.rs::Game::drop_inventory vanishing-curse stacks are removed from the death drops
94 Player.hasCorrectToolForDrops port crates/horizon-client/src/game.rs::Game::tick_mining the correct-tool test for harvest drops
95 Player.readAdditionalSaveData port crates/horizon-client/src/save.rs::Level::read_player
96 Player.addAdditionalSaveData port crates/horizon-client/src/save.rs::Level::player_tag
97 Player.hurtHelmet inline crates/horizon-client/src/game.rs::Game::hurt_armor gap: minor: hurt_armor hits all four armour slots; the head-only hit from LivingEntity.hurt is not separated
98 Player.isAboveGround inline crates/horizon-world/src/edge_backoff.rs::back_off_from_edge the on-the-edge test before backing off
99 Player.canFallAtLeast inline crates/horizon-world/src/edge_backoff.rs::back_off_from_edge the no-collision drop test at the edge
100 Player.deflectProjectile port crates/horizon-client/src/game/deflect.rs::Game::attack_redirectable
101 Player.baseDamageScaleFactor port crates/horizon-client/src/game.rs::Game::sweep_base_damage
102 Player.isEffectiveAi skip:other client-side AI gate; Horizon has no effective-AI check in its loop
103 Player.hasContainerOpen missing unsure: the test for an open container menu (not the inventory menu) was not located
104 Player.startSleepInBed port crates/horizon-client/src/game.rs::Game::try_sleep
105 Player.isSleepingLongEnough missing unsure: the 100-tick sleep counter gate for the night skip was not found; the sleep timer only drives the fade
106 Player.updateSwimming port crates/horizon-client/src/motion.rs::MotionWorld::swimming
107 Player.getXpNeededForNextLevel port crates/horizon-client/src/entities.rs::Experience::needed
108 Player.hasEnoughFoodToDoExhaustiveManoeuvres missing unsure: the food-or-flying test for exhaustive moves was not found in motion.rs
109 Player.mayUseItemAt port crates/horizon-client/src/game.rs::Game::use_hand the may-build test before use-on in adventure mode
110 Player.isSwimming port crates/horizon-client/src/motion.rs::MotionWorld::swimming
111 Player.decorateDisplayNameComponent missing unsure: click and hover behaviour on player names in chat was not found
112 Player.getSlot port crates/horizon-client/src/game/commands/items.rs::Game::slots_named gap: minor: numeric slots 499 (carried item) and 500-503 (crafting grid) are not addressed
113 Player.extractParrotVariant missing unsure: the parrot variant read from a shoulder parrot NBT was not found in shoulders.rs
114 Player.convertParrotVariant skip:java Optional and OptionalInt conversion of the synched parrot variant; Horizon stores the id directly
115 Player.getItemSwapScale port crates/horizon-client/src/attack_strength.rs::AttackStrength::swap_scale
116 Player.debugInfo skip:debug
117 Player.printPlayerPermissions skip:debug
118 PlayerEquipment.set port crates/horizon-world/src/player_equipment.rs::set main hand goes to the selected slot
119 PlayerEquipment.get port crates/horizon-world/src/player_equipment.rs::get main hand reads the selected slot
120 ProfilePublicKey.Data.hasExpired port crates/horizon-protocol/src/secure_chat.rs::ProfileKey::has_expired gap: minor: the grace-period overload is not separate
121 ProfilePublicKey.Data.equals skip:java value equality of the key record
122 StackedContents.take inline crates/horizon-client/src/menu/place.rs::Picker::try_pick the count subtraction when a pick succeeds
123 StackedContents.getUniqueAvailableIngredientItems inline crates/horizon-client/src/menu/place.rs::Picker::new the stocked items that some ingredient accepts
124 StackedContents.anyIngredientMatches inline crates/horizon-client/src/menu/place.rs::Picker::new the accepts test used to filter items
125 StackedContents.RecipePicker.setInitialConnections port crates/horizon-client/src/menu/place.rs::Picker::new the connection matrix is built in the constructor
126 StackedContents.RecipePicker.findNewItemAssignmentPath port crates/horizon-client/src/menu/place.rs::Picker::find_path
127 StackedContents.RecipePicker.getSatisfiedIndex skip:java bitset index arithmetic; Horizon keeps satisfied as a plain bool vector
128 StackedContents.RecipePicker.getConnectionIndex port crates/horizon-client/src/menu/place.rs::Picker::at flat index of an item-ingredient pair
129 StackedContents.RecipePicker.assign inline crates/horizon-client/src/menu/place.rs::Picker::try_pick the assigned flag set along a successful path
130 StackedContents.RecipePicker.unassign inline crates/horizon-client/src/menu/place.rs::Picker::try_pick the assigned flag cleared when a path is undone
131 StackedContents.RecipePicker.getResidualIndex port crates/horizon-client/src/menu/place.rs::Picker::at flat index of the assignment, same layout as connections
132 StackedContents.RecipePicker.getVisitedIngredientIndex skip:java bitset index arithmetic; plain bool vectors in Horizon
133 StackedContents.RecipePicker.getVisitiedItemIndex skip:java bitset index arithmetic; plain bool vectors in Horizon
134 StackedContents.RecipePicker.clearAllVisited port crates/horizon-client/src/menu/place.rs::Picker::clear_visited
135 StackedItemContents.getBiggestCraftableStack port crates/horizon-client/src/menu/place.rs::Stacked::try_pick_all the largest craftable count, found by a bounded search
136 EvokerFangs.readAdditionalSaveData missing minor: fangs are not saved; a save in mid-bite drops them
137 EvokerFangs.addAdditionalSaveData missing minor: fangs are not saved; the warmup and owner are not written
138 EvokerFangs.getAnimationProgress port crates/horizon-client/src/game/fangs.rs::Game::fangs_geometry the bite progress that positions the fang model
139 EyeOfEnder.setItem skip:ui the item sprite a flying eye shows; Horizon draws the eye itself
140 EyeOfEnder.shouldRenderAtSqrDistance skip:ui render distance culling only
141 EyeOfEnder.spawnParticles port crates/horizon-client/src/game/end.rs::Game::eye_break_particles the portal crumbs drawn in toward the eye
142 EyeOfEnder.readAdditionalSaveData missing minor: flying eyes are not saved; a save mid-flight loses them
+140
View File
@@ -0,0 +1,140 @@
FireworkRocketEntity.<init> port crates/horizon-client/src/game/fireworks.rs::Game::new_rocket launch velocity triangle and lifetime 10*(1+flight)+randoms; the owner and attached target are set by the callers
FireworkRocketEntity.defineSynchedData skip:java SynchedEntityData definitions; Horizon keeps the rocket fields on the Rocket struct
FireworkRocketEntity.shouldRender port crates/horizon-client/src/game/fireworks.rs::Game::rocket_geometry attached rockets are not drawn; camera range is the caller's check
FireworkRocketEntity.onHitEntity missing player: a firework shot from a crossbow or dispenser flies through mobs and bursts only on a block or at its timer end; Horizon has no entity hit test for rockets
FireworkRocketEntity.onHitBlock inline crates/horizon-client/src/game/fireworks.rs::Game::tick_rockets a block hit ends the angled rocket early and explodes it; vanilla explodes only when it has explosions and skips the block entityInside effect
FireworkRocketEntity.dealExplosionDamage port crates/horizon-client/src/game/fireworks.rs::Game::explode_rocket damage 5+2 per explosion; attached target takes the full blast, others within 5 blocks with line of sight
FireworkRocketEntity.addAdditionalSaveData missing minor: rocket life, lifetime and item are not written to a save; Horizon does not save flying rockets
FireworkRocketEntity.readAdditionalSaveData missing minor: rocket life, lifetime and item are not read back; Horizon does not save flying rockets
FireworkRocketEntity.getExplosions port crates/horizon-client/src/game/fireworks.rs::fireworks_of explosion list from the item's fireworks component, empty without one
FireworkRocketEntity.calculateHorizontalHurtKnockbackDirection inline crates/horizon-client/src/game/fireworks.rs::Game::explode_rocket knockback direction is the blast point to the target, which the mob damage gets as its from point
FishingHook.<init> port crates/horizon-client/src/game/fishing.rs::Game::use_fishing_rod the player cast: start point, velocity with the 0.0103365 triangle, luck and lure from the rod
FishingHook.defineSynchedData skip:java synced hooked id and biting flag; Horizon keeps them on the Hook struct and sends them in Hook::track
FishingHook.canHitEntity port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing hook catches living mobs, other players (not the owner) and dropped items it touches
FishingHook.onHitEntity port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing sets the Hooked state on the first target the bobber touches
FishingHook.onHitBlock port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing the bobber stops where its movement hits a block (scene resolve)
FishingHook.setHookedEntity port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing Hooked(id) state; the id goes out as meta 8 in Hook::track
FishingHook.getOpenWaterTypeForArea inline crates/horizon-client/src/game/fishing.rs::Game::calculate_open_water the area is walked layer by layer and folded into the layer check
FishingHook.getOpenWaterTypeForBlock port crates/horizon-client/src/game/fishing.rs::Game::open_water_type air or lily pad above water, still water source inside, anything else invalid
FishingHook.handleEntityEvent inline crates/horizon-client/src/game/fishing.rs::Game::retrieve_hook event 31 pull: retrieve_hook pulls the hooked mob, item or player when the rod is reeled in
FishingHook.getPlayerOwner skip:other owner is implicit: the host's hook is self.hook and a guest's is in that guest's play state
FishingHook.getAddEntityPacket port crates/horizon-client/src/game/fishing.rs::Hook::track add-entity payload: the owner entity id is the bobber's data field
LlamaSpit.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit spit hit: 1.0 damage with the spit source to a player (mob_hits_player) or a mob
Projectile.applyImplicitComponent missing minor: a projectile given a can_break component by its item keeps no break predicate; Horizon applies implicit components only to buckets
Projectile.addAdditionalSaveData missing minor: owner, LeftOwner and HasBeenShot are not written; Horizon does not save flying projectiles
Projectile.ownedBy inline crates/horizon-client/src/projectiles.rs::Projectile::tick the owner is skipped in the target loop until the projectile has left it
Projectile.readAdditionalSaveData missing minor: owner, LeftOwner, HasBeenShot and can_break are not read back; Horizon does not save flying projectiles
Projectile.restoreFrom missing minor: the owner is not carried over a dimension change; Horizon has no projectile dimension change
Projectile.isOutsideOwnerCollisionRange inline crates/horizon-client/src/projectiles.rs::Projectile::tick gap: minor: left_owner tests the owner's box inflated 1.0 at the position only; vanilla sweeps along the motion and checks the owner's passengers too
Projectile.getMovementToShoot port crates/horizon-client/src/projectiles.rs::Projectile::shoot direction plus triangle spread 0.0172275 times uncertainty, scaled by power
Projectile.onAboveBubbleColumn port crates/horizon-client/src/arrows.rs::Ticker::bubble_column gap: minor: arrows only; thrown ender pearls get their push in creatures.rs tick_projectiles and other projectiles get none
Projectile.onInsideBubbleColumn port crates/horizon-client/src/arrows.rs::Ticker::bubble_column gap: minor: arrows only; thrown ender pearls get their push in creatures.rs tick_projectiles and other projectiles get none
Projectile.canBreakBlockInAdventureMode missing minor: the can_break predicate and adventure-mode rules for projectile block breaking are not modelled
Projectile.spawnProjectileFromRotation port crates/horizon-client/src/projectiles.rs::Projectile::shoot_from_rotation gap: minor: the aim and inherited velocity only; the add-to-world step is the caller's
Projectile.spawnProjectile inline crates/horizon-client/src/game/creatures.rs::Game::throw_item each shooter adds its own projectile (throw_item, shoot_crossbow, shoot_projectile_item, the bow in game.rs); throw_item is the player throw path
Projectile.applyOnProjectileSpawned port crates/horizon-client/src/game/enchant_effects.rs::Game::bow_projectile_ignite gap: minor: Flame ignite only; Piercing and Punch go through Projectile::set_bonus
Projectile.hitTargetOrDeflectSelf port crates/horizon-client/src/game/creatures.rs::Game::tick_projectiles gap: minor: deflection is checked for breezes only; the onHit dispatch is creatures.rs projectile_hit
Projectile.onRedirectProjectile port crates/horizon-client/src/game/deflect.rs::Game::deflect gap: minor: the player's attack turns the projectile; a projectile hitting another redirectable one is not modelled
Projectile.recreateFromPacket port crates/horizon-client/src/game/remote_projectiles.rs::Game::spawn_remote_projectile the owner id from the add-entity data is set on the remote projectile
Projectile.mayBreak missing player: a projectile hitting a decorated pot, chorus flower or pointed dripstone does not break it; no projectile break path found
Projectile.calculateHorizontalHurtKnockbackDirection inline crates/horizon-client/src/game/creatures.rs::Game::projectile_hit gap: minor: knockback goes from the shot's previous point, while vanilla uses the projectile's horizontal motion
ProjectileUtil.getHitResultOnMoveVector port crates/horizon-client/src/projectiles.rs::Projectile::tick sweep along the movement: block clip, then entity boxes; gap: minor: entity margin is a fixed 0.3, vanilla ramps it up over the first ticks
ProjectileUtil.getHitResultOnViewVector port crates/horizon-client/src/game/pick_entity.rs::pick_entity_hit gap: minor: the brush reach is the caller's; there is no separate view-vector trace
ProjectileUtil.getHitResult port crates/horizon-client/src/projectiles.rs::Projectile::tick block clip first, then the nearest entity box on the segment; same core as the move-vector sweep
ProjectileUtil.rotateTowardsMovement port crates/horizon-client/src/projectiles.rs::Projectile::update_rotation gap: minor: rotation is set at once, vanilla lerps it by rotationSpeed
ProjectileUtil.getMobArrow port crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack gap: minor: builds the skeleton-family arrow with base damage from power; illager crossbow arrows are built in mobs/illager.rs::shoot_crossbow
ShulkerBullet.addAdditionalSaveData missing minor: the final target and move direction are not saved; Horizon does not save flying projectiles
ShulkerBullet.readAdditionalSaveData missing minor: the final target and move direction are not read back; Horizon does not save flying projectiles
ShulkerBullet.canHitEntity missing minor: no-physics entities are not skipped by the bullet's target search; Projectile::tick checks owner and boxes only
ShulkerBullet.onHitBlock port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit shulker bullet block hit: hit sound and two explosion particles at the bullet
ShulkerBullet.destroy inline crates/horizon-client/src/game/creatures.rs::Game::tick_projectiles the bullet is dropped from the flight list on any hit; the game event is not sent
ShulkerBullet.hurtServer missing player: a hit on a shulker bullet does not pop it (no hurt path for projectiles), so it keeps flying until it hits something else
ThrowableProjectile.applyInertia port crates/horizon-client/src/projectiles.rs::Projectile::tick default arm: gravity, then drag 0.8 in water and 0.99 in air; gap: minor: no bubble particles in water
ThrowableProjectile.handleFirstTickBubbleColumn missing minor: a thrown item that spawns inside a bubble column is not pushed on its first tick
AbstractArrow.<init> port crates/horizon-client/src/arrows.rs::ArrowState::new arrow defaults: pickup, pickup item, shake, pierce; the owner and drawn ammo come from set_owner and set_item
AbstractArrow.defineSynchedData skip:java flags, pierce level and in-ground sync fields; Horizon keeps them on ArrowState and Projectile
AbstractArrow.lerpMotion skip:other client interpolation of a server motion packet; Horizon's remote arrows take the server position each update
AbstractArrow.onSyncedDataUpdated inline crates/horizon-client/src/arrows.rs::Ticker::on_hit_block the 7-tick shake starts when the arrow lands here; vanilla starts it when the client sees it stuck
AbstractArrow.hitTargetsOrDeflectSelf port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit gap: minor: the nearest entity on the way is taken per tick; vanilla goes on through the rest within the same tick
AbstractArrow.addBubbleParticles port crates/horizon-client/src/projectiles.rs::Projectile::arrow_trail four bubble particles along a submerged arrow
AbstractArrow.move inline crates/horizon-client/src/arrows.rs::Ticker::tick should_fall then start_falling run from the tick for an arrow in the ground
AbstractArrow.resetPiercedEntities inline crates/horizon-client/src/arrows.rs::Ticker::on_hit_block the pierced list is cleared when the arrow lands
AbstractArrow.doKnockback port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit punch pushes along the flight, scaled by 0.6 and by knockback resistance
AbstractArrow.findHitEntity port crates/horizon-client/src/arrows.rs::Ticker::entity_hit box clip, then the margin test against the segment
AbstractArrow.findHitEntities port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit gap: minor: only the nearest hit per tick is returned; a piercing arrow takes the rest on later ticks
AbstractArrow.canHitEntity port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit gap: minor: skips pierced entities here; the player canHarmPlayer rule is in creatures.rs tick_projectiles
AbstractArrow.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::arrow_from_nbt shake, in ground, in block state, pickup and the arrow fields
AbstractArrow.tryPickup port crates/horizon-client/src/arrows.rs::ArrowState::player_touch disallowed, allowed (gives the pickup item) and creative only
AbstractArrow.setFlag port crates/horizon-client/src/projectiles.rs::Projectile::set_critical gap: minor: only the critical flag; the no-physics flag is a plain field
AbstractArrow.setPickupItemStack port crates/horizon-client/src/arrows.rs::ArrowState::set_item an empty stack falls back to the default pickup item
AbstractArrow.isNoPhysics inline crates/horizon-client/src/arrows.rs::Ticker::tick no_physics is a field read by the tick
AbstractArrow.getSlot missing minor: the arrow's pickup stack is not reachable as an entity slot, so item commands on it do nothing
AbstractArrow.Pickup.byOrdinal port crates/horizon-client/src/arrows.rs::Pickup::from_byte out of range is DISALLOWED
Arrow.updateColor missing player: a tipped arrow keeps no potion colour, so its flight and hit particles are not tinted
Arrow.makeParticle missing player: a tipped arrow in flight leaves no coloured entity-effect trail
Arrow.handleEntityEvent missing player: a tipped arrow that hits does not burst into its potion colour (event 0 has no port)
ThrownTrident.defineSynchedData skip:java loyalty and foil synced fields; Horizon keeps loyalty on the trident struct
ThrownTrident.isAcceptibleReturnOwner port crates/horizon-client/src/game/trident.rs::Game::tick_tridents the loyalty return needs the owner's eye position; gap: minor: no separate alive or spectator check
ThrownTrident.findHitEntities port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit one entity hit per trident, none once it has dealt damage
ThrownTrident.hitBlockEnchantmentEffects port crates/horizon-client/src/game/trident.rs::Game::channel_rod_hit gap: minor: only Channeling's hit_block effect (lightning on a rod in a storm) is modelled
ThrownTrident.tryPickup port crates/horizon-client/src/arrows.rs::ArrowState::player_touch gap: minor: no owner check on a returned trident; any player in reach takes it when it is no-physics
ThrownTrident.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::arrow_from_nbt gap: minor: DealtDamage is not read back; the loyalty level comes from the release
ThrownTrident.getLoyaltyFromItem port crates/horizon-client/src/game/trident.rs::Game::release_trident loyalty level read from the thrown stack when the trident is released
ThrownTrident.tickDespawn inline crates/horizon-client/src/arrows.rs::Ticker::tick gap: minor: the 1200-tick life limit applies to every trident; the loyalty exemption is not checked
AbstractHurtingProjectile.shouldRenderAtSqrDistance skip:ui distance culling for the fireball model; Horizon culls with its own range check
AbstractHurtingProjectile.canHitEntity missing minor: no-physics entities are not skipped by the fireball's target search
WitherSkull.getBlockExplosionResistance missing minor: a dangerous skull's blast does not cap block resistance at 0.8; the blast call takes no dangerous flag
WitherSkull.onHit port crates/horizon-client/src/game/wither.rs::Game::wither_skull_hit skull hit damage, wither effect, then the blast at the impact point
AbstractWindCharge.makeBoundingBox port crates/horizon-client/src/projectiles.rs::ProjectileKind::size gap: minor: gives the width only; the box sits 0.15 below the position in vanilla
AbstractWindCharge.canHitEntity missing minor: no filter for end crystals or other wind charges found in the target list; unsure whether the caller excludes them
AbstractWindCharge.onHitBlock port crates/horizon-client/src/game/wind.rs::Game::wind_charge_hit a burst a quarter block out along the hit face
WindCharge.deflect port crates/horizon-client/src/game/wind.rs::reverse gap: minor: turns the charge at half speed; the noDeflectTicks delay is not modelled
WindCharge.shouldRenderAtSqrDistance skip:ui distance culling for the wind charge model; Horizon culls with its own range check
ThrownEgg.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit egg hit on a mob: zero damage, then the egg break and chick roll run on any landing
ThrownEnderpearl.deregisterFromCurrentOwner skip:other chunk-ticket bookkeeping for a player's pearls; Horizon has no chunk tickets for flying pearls
ThrownEnderpearl.registerToCurrentOwner skip:other chunk-ticket bookkeeping for a player's pearls; Horizon has no chunk tickets for flying pearls
ThrownEnderpearl.getOwner skip:other owner is kept as a Who value and resolved by the caller
ThrownEnderpearl.findOwnerIncludingDeadPlayer skip:other owner lookup by UUID across dead players; Horizon keeps the owner id directly
ThrownEnderpearl.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit a mob hit takes zero damage; the pearl still lands
ThrownEnderpearl.onHit port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit gap: minor: no 32 portal particles and no dimension change; the owner is teleported to where the pearl was, with 5 damage and a 5 percent endermite
ThrownEnderpearl.isAllowedToTeleportOwner missing minor: a pearl whose owner is dead or asleep when it lands still teleports the owner
ThrownEnderpearl.playSound port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit teleport sound at the landing point
ThrownEnderpearl.teleport port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit moves the player to the pearl's previous position and clears velocity and fall distance
ThrownEnderpearl.canTeleport missing minor: a pearl from the End to the Overworld needs the owner's seen-credits flag before it may teleport
ThrownEnderpearl.onInsideBlock missing player: a pearl that flies into an end gateway does not send its owner through it
Raid.<init> port crates/horizon-client/src/raid.rs::Raid::new centre, difficulty-based group count, cooldown and active flag
Raid.getAllRaiders port crates/horizon-client/src/game/raids.rs::Game::raid_members the raiders of this raid, from the mobs carrying its id
Raid.getValidSpawnPos port crates/horizon-client/src/raid.rs::Raid::find_spawn_pos eight tries around the centre, as findRandomSpawnPos(level, 8)
Raid.getHealthOfLivingRaiders port crates/horizon-client/src/raid.rs::living_health sum of the living raiders' health
Raid.getBannerComponentPatch port crates/horizon-client/src/mobs/raider.rs::ominous_banner the ominous banner stack: its patterns, hidden tooltip, name and rarity
Raid.getDefaultNumSpawns port crates/horizon-client/src/raid.rs::Raid::wave_count gap: minor: the base count is in the same fn as the bonus and extra rolls
Raid.getPotentialBonusSpawns port crates/horizon-client/src/raid.rs::Raid::wave_count extra roll per type and difficulty: vindicators and pillagers, witches after wave 2, ravagers on the bonus wave
Raider.hasRaid port crates/horizon-client/src/mobs/raider.rs::in_raid gap: minor: checks only the raid id the raider holds; vanilla also looks for a raid at its position
Raider.readAdditionalSaveData missing minor: Wave, CanJoinRaid and RaidId are not read back from a save, so a loaded raider loses its wave and raid link
Raider.pickUpItem inline crates/horizon-client/src/game/raids.rs::Game::sync_raiders the banner pickup branch makes the raider the wave leader; gap: minor: the item already worn in the head slot is not dropped first
Raider.ObtainRaidLeaderBannerGoal.cannotPickUpBanner port crates/horizon-client/src/mobs/raider.rs::ObtainBanner::can_use gap: minor: checks only a known, reachable banner; the raid-over, can-be-leader and head-slot rules are not repeated here
Raider.RaiderMoveThroughVillageGoal.isValidRaid inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use active raid and not over, checked first
Raider.RaiderMoveThroughVillageGoal.hasSuitablePoi inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use gap: minor: picks from the known homes within 48 blocks; no POI search or occupancy check
Raider.RaiderMoveThroughVillageGoal.hasNotVisited inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use homes already visited are filtered out of the candidates
Raider.RaiderMoveThroughVillageGoal.updateVisited inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use the visited list is trimmed first in can_use, as vanilla canUse does
Raids.getId skip:other raids are looked up by their id, so no reverse lookup from a raid to its id is needed
Raids.canJoinRaid inline crates/horizon-client/src/game/raids.rs::Game::sync_raiders alive, the join flag and no action for 2400 ticks are checked in the raider sync
Raids.getOrCreateRaid port crates/horizon-client/src/raid.rs::Raids::create_or_extend the raid at the position is reused, otherwise a new one is made
Raids.getRaidCentersInChunk skip:debug the raid centres per chunk feed the debug raid markers only
PriorityProvider.Selector.codec skip:java record codec for a variant selector's condition and priority
VariantUtils.getDefaultOrAny port crates/horizon-client/src/mobs/finalize.rs::variant_index gap: minor: name to index with unknown names falling back to index 0; no registry holder lookup
VariantUtils.writeVariant inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt the variant key is written with the rest of the mob's save data
VariantUtils.readVariant port crates/horizon-client/src/entity_nbt.rs::read_variant reads the variant key from the save
ContainerEntity.addChestVehicleSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt writes the cart's items and any loot table
ContainerEntity.readChestVehicleSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt reads the cart's items from the save
ContainerEntity.chestVehicleDestroyed port crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart a destroyed cart drops its items when entity drops are on
ContainerEntity.unpackChestVehicleLootTable missing unsure: Minecart.loot is only read and written with the save and is never set here, so a chest minecart's loot table may never roll into its slots
ContainerEntity.isChestVehicleEmpty inline crates/horizon-client/src/game/minecarts.rs::Minecart::container_signal the comparator signal reads the slots' emptiness; gap: minor: no separate empty test
ContainerEntity.removeChestVehicleItemNoUpdate skip:other slot edits happen on the chest block entity under the cart's key; store_cart_items and close_cart_container copy them back
ContainerEntity.setChestVehicleItem skip:other slot edits happen on the chest block entity under the cart's key; store_cart_items and close_cart_container copy them back
ContainerEntity.getChestVehicleSlot skip:other slot access happens on the chest block entity under the cart's key; store_cart_items and close_cart_container copy them back
DismountHelper.canDismountTo port crates/horizon-client/src/game/respawn_anchor.rs::Game::safe_dismount_location gap: minor: tests the floor and a 1.8 block box for the player, not the passenger's pose box
DismountHelper.findCeilingFrom inline crates/horizon-client/src/game/respawn_anchor.rs::Game::safe_dismount_location gap: minor: head room comes from the 1.8 box collision, not a ceiling scan
VehicleEntity.ignoreExplosion missing minor: with mobGriefing off a mob's blast still damages carts and boats; the explosion code has no mob-source rule for them
VehicleEntity.destroy port crates/horizon-client/src/game/boats.rs::Game::hurt_boat boats drop their item when entity drops are on; a minecart breaks through hurt_cart
VehicleEntity.defineSynchedData skip:java hurt time, hurt direction and damage fields; Horizon keeps them on the cart and boat structs
1 FireworkRocketEntity.<init> port crates/horizon-client/src/game/fireworks.rs::Game::new_rocket launch velocity triangle and lifetime 10*(1+flight)+randoms; the owner and attached target are set by the callers
2 FireworkRocketEntity.defineSynchedData skip:java SynchedEntityData definitions; Horizon keeps the rocket fields on the Rocket struct
3 FireworkRocketEntity.shouldRender port crates/horizon-client/src/game/fireworks.rs::Game::rocket_geometry attached rockets are not drawn; camera range is the caller's check
4 FireworkRocketEntity.onHitEntity missing player: a firework shot from a crossbow or dispenser flies through mobs and bursts only on a block or at its timer end; Horizon has no entity hit test for rockets
5 FireworkRocketEntity.onHitBlock inline crates/horizon-client/src/game/fireworks.rs::Game::tick_rockets a block hit ends the angled rocket early and explodes it; vanilla explodes only when it has explosions and skips the block entityInside effect
6 FireworkRocketEntity.dealExplosionDamage port crates/horizon-client/src/game/fireworks.rs::Game::explode_rocket damage 5+2 per explosion; attached target takes the full blast, others within 5 blocks with line of sight
7 FireworkRocketEntity.addAdditionalSaveData missing minor: rocket life, lifetime and item are not written to a save; Horizon does not save flying rockets
8 FireworkRocketEntity.readAdditionalSaveData missing minor: rocket life, lifetime and item are not read back; Horizon does not save flying rockets
9 FireworkRocketEntity.getExplosions port crates/horizon-client/src/game/fireworks.rs::fireworks_of explosion list from the item's fireworks component, empty without one
10 FireworkRocketEntity.calculateHorizontalHurtKnockbackDirection inline crates/horizon-client/src/game/fireworks.rs::Game::explode_rocket knockback direction is the blast point to the target, which the mob damage gets as its from point
11 FishingHook.<init> port crates/horizon-client/src/game/fishing.rs::Game::use_fishing_rod the player cast: start point, velocity with the 0.0103365 triangle, luck and lure from the rod
12 FishingHook.defineSynchedData skip:java synced hooked id and biting flag; Horizon keeps them on the Hook struct and sends them in Hook::track
13 FishingHook.canHitEntity port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing hook catches living mobs, other players (not the owner) and dropped items it touches
14 FishingHook.onHitEntity port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing sets the Hooked state on the first target the bobber touches
15 FishingHook.onHitBlock port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing the bobber stops where its movement hits a block (scene resolve)
16 FishingHook.setHookedEntity port crates/horizon-client/src/game/fishing.rs::Game::tick_fishing Hooked(id) state; the id goes out as meta 8 in Hook::track
17 FishingHook.getOpenWaterTypeForArea inline crates/horizon-client/src/game/fishing.rs::Game::calculate_open_water the area is walked layer by layer and folded into the layer check
18 FishingHook.getOpenWaterTypeForBlock port crates/horizon-client/src/game/fishing.rs::Game::open_water_type air or lily pad above water, still water source inside, anything else invalid
19 FishingHook.handleEntityEvent inline crates/horizon-client/src/game/fishing.rs::Game::retrieve_hook event 31 pull: retrieve_hook pulls the hooked mob, item or player when the rod is reeled in
20 FishingHook.getPlayerOwner skip:other owner is implicit: the host's hook is self.hook and a guest's is in that guest's play state
21 FishingHook.getAddEntityPacket port crates/horizon-client/src/game/fishing.rs::Hook::track add-entity payload: the owner entity id is the bobber's data field
22 LlamaSpit.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit spit hit: 1.0 damage with the spit source to a player (mob_hits_player) or a mob
23 Projectile.applyImplicitComponent missing minor: a projectile given a can_break component by its item keeps no break predicate; Horizon applies implicit components only to buckets
24 Projectile.addAdditionalSaveData missing minor: owner, LeftOwner and HasBeenShot are not written; Horizon does not save flying projectiles
25 Projectile.ownedBy inline crates/horizon-client/src/projectiles.rs::Projectile::tick the owner is skipped in the target loop until the projectile has left it
26 Projectile.readAdditionalSaveData missing minor: owner, LeftOwner, HasBeenShot and can_break are not read back; Horizon does not save flying projectiles
27 Projectile.restoreFrom missing minor: the owner is not carried over a dimension change; Horizon has no projectile dimension change
28 Projectile.isOutsideOwnerCollisionRange inline crates/horizon-client/src/projectiles.rs::Projectile::tick gap: minor: left_owner tests the owner's box inflated 1.0 at the position only; vanilla sweeps along the motion and checks the owner's passengers too
29 Projectile.getMovementToShoot port crates/horizon-client/src/projectiles.rs::Projectile::shoot direction plus triangle spread 0.0172275 times uncertainty, scaled by power
30 Projectile.onAboveBubbleColumn port crates/horizon-client/src/arrows.rs::Ticker::bubble_column gap: minor: arrows only; thrown ender pearls get their push in creatures.rs tick_projectiles and other projectiles get none
31 Projectile.onInsideBubbleColumn port crates/horizon-client/src/arrows.rs::Ticker::bubble_column gap: minor: arrows only; thrown ender pearls get their push in creatures.rs tick_projectiles and other projectiles get none
32 Projectile.canBreakBlockInAdventureMode missing minor: the can_break predicate and adventure-mode rules for projectile block breaking are not modelled
33 Projectile.spawnProjectileFromRotation port crates/horizon-client/src/projectiles.rs::Projectile::shoot_from_rotation gap: minor: the aim and inherited velocity only; the add-to-world step is the caller's
34 Projectile.spawnProjectile inline crates/horizon-client/src/game/creatures.rs::Game::throw_item each shooter adds its own projectile (throw_item, shoot_crossbow, shoot_projectile_item, the bow in game.rs); throw_item is the player throw path
35 Projectile.applyOnProjectileSpawned port crates/horizon-client/src/game/enchant_effects.rs::Game::bow_projectile_ignite gap: minor: Flame ignite only; Piercing and Punch go through Projectile::set_bonus
36 Projectile.hitTargetOrDeflectSelf port crates/horizon-client/src/game/creatures.rs::Game::tick_projectiles gap: minor: deflection is checked for breezes only; the onHit dispatch is creatures.rs projectile_hit
37 Projectile.onRedirectProjectile port crates/horizon-client/src/game/deflect.rs::Game::deflect gap: minor: the player's attack turns the projectile; a projectile hitting another redirectable one is not modelled
38 Projectile.recreateFromPacket port crates/horizon-client/src/game/remote_projectiles.rs::Game::spawn_remote_projectile the owner id from the add-entity data is set on the remote projectile
39 Projectile.mayBreak missing player: a projectile hitting a decorated pot, chorus flower or pointed dripstone does not break it; no projectile break path found
40 Projectile.calculateHorizontalHurtKnockbackDirection inline crates/horizon-client/src/game/creatures.rs::Game::projectile_hit gap: minor: knockback goes from the shot's previous point, while vanilla uses the projectile's horizontal motion
41 ProjectileUtil.getHitResultOnMoveVector port crates/horizon-client/src/projectiles.rs::Projectile::tick sweep along the movement: block clip, then entity boxes; gap: minor: entity margin is a fixed 0.3, vanilla ramps it up over the first ticks
42 ProjectileUtil.getHitResultOnViewVector port crates/horizon-client/src/game/pick_entity.rs::pick_entity_hit gap: minor: the brush reach is the caller's; there is no separate view-vector trace
43 ProjectileUtil.getHitResult port crates/horizon-client/src/projectiles.rs::Projectile::tick block clip first, then the nearest entity box on the segment; same core as the move-vector sweep
44 ProjectileUtil.rotateTowardsMovement port crates/horizon-client/src/projectiles.rs::Projectile::update_rotation gap: minor: rotation is set at once, vanilla lerps it by rotationSpeed
45 ProjectileUtil.getMobArrow port crates/horizon-client/src/mobs/undead.rs::perform_ranged_attack gap: minor: builds the skeleton-family arrow with base damage from power; illager crossbow arrows are built in mobs/illager.rs::shoot_crossbow
46 ShulkerBullet.addAdditionalSaveData missing minor: the final target and move direction are not saved; Horizon does not save flying projectiles
47 ShulkerBullet.readAdditionalSaveData missing minor: the final target and move direction are not read back; Horizon does not save flying projectiles
48 ShulkerBullet.canHitEntity missing minor: no-physics entities are not skipped by the bullet's target search; Projectile::tick checks owner and boxes only
49 ShulkerBullet.onHitBlock port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit shulker bullet block hit: hit sound and two explosion particles at the bullet
50 ShulkerBullet.destroy inline crates/horizon-client/src/game/creatures.rs::Game::tick_projectiles the bullet is dropped from the flight list on any hit; the game event is not sent
51 ShulkerBullet.hurtServer missing player: a hit on a shulker bullet does not pop it (no hurt path for projectiles), so it keeps flying until it hits something else
52 ThrowableProjectile.applyInertia port crates/horizon-client/src/projectiles.rs::Projectile::tick default arm: gravity, then drag 0.8 in water and 0.99 in air; gap: minor: no bubble particles in water
53 ThrowableProjectile.handleFirstTickBubbleColumn missing minor: a thrown item that spawns inside a bubble column is not pushed on its first tick
54 AbstractArrow.<init> port crates/horizon-client/src/arrows.rs::ArrowState::new arrow defaults: pickup, pickup item, shake, pierce; the owner and drawn ammo come from set_owner and set_item
55 AbstractArrow.defineSynchedData skip:java flags, pierce level and in-ground sync fields; Horizon keeps them on ArrowState and Projectile
56 AbstractArrow.lerpMotion skip:other client interpolation of a server motion packet; Horizon's remote arrows take the server position each update
57 AbstractArrow.onSyncedDataUpdated inline crates/horizon-client/src/arrows.rs::Ticker::on_hit_block the 7-tick shake starts when the arrow lands here; vanilla starts it when the client sees it stuck
58 AbstractArrow.hitTargetsOrDeflectSelf port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit gap: minor: the nearest entity on the way is taken per tick; vanilla goes on through the rest within the same tick
59 AbstractArrow.addBubbleParticles port crates/horizon-client/src/projectiles.rs::Projectile::arrow_trail four bubble particles along a submerged arrow
60 AbstractArrow.move inline crates/horizon-client/src/arrows.rs::Ticker::tick should_fall then start_falling run from the tick for an arrow in the ground
61 AbstractArrow.resetPiercedEntities inline crates/horizon-client/src/arrows.rs::Ticker::on_hit_block the pierced list is cleared when the arrow lands
62 AbstractArrow.doKnockback port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit punch pushes along the flight, scaled by 0.6 and by knockback resistance
63 AbstractArrow.findHitEntity port crates/horizon-client/src/arrows.rs::Ticker::entity_hit box clip, then the margin test against the segment
64 AbstractArrow.findHitEntities port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit gap: minor: only the nearest hit per tick is returned; a piercing arrow takes the rest on later ticks
65 AbstractArrow.canHitEntity port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit gap: minor: skips pierced entities here; the player canHarmPlayer rule is in creatures.rs tick_projectiles
66 AbstractArrow.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::arrow_from_nbt shake, in ground, in block state, pickup and the arrow fields
67 AbstractArrow.tryPickup port crates/horizon-client/src/arrows.rs::ArrowState::player_touch disallowed, allowed (gives the pickup item) and creative only
68 AbstractArrow.setFlag port crates/horizon-client/src/projectiles.rs::Projectile::set_critical gap: minor: only the critical flag; the no-physics flag is a plain field
69 AbstractArrow.setPickupItemStack port crates/horizon-client/src/arrows.rs::ArrowState::set_item an empty stack falls back to the default pickup item
70 AbstractArrow.isNoPhysics inline crates/horizon-client/src/arrows.rs::Ticker::tick no_physics is a field read by the tick
71 AbstractArrow.getSlot missing minor: the arrow's pickup stack is not reachable as an entity slot, so item commands on it do nothing
72 AbstractArrow.Pickup.byOrdinal port crates/horizon-client/src/arrows.rs::Pickup::from_byte out of range is DISALLOWED
73 Arrow.updateColor missing player: a tipped arrow keeps no potion colour, so its flight and hit particles are not tinted
74 Arrow.makeParticle missing player: a tipped arrow in flight leaves no coloured entity-effect trail
75 Arrow.handleEntityEvent missing player: a tipped arrow that hits does not burst into its potion colour (event 0 has no port)
76 ThrownTrident.defineSynchedData skip:java loyalty and foil synced fields; Horizon keeps loyalty on the trident struct
77 ThrownTrident.isAcceptibleReturnOwner port crates/horizon-client/src/game/trident.rs::Game::tick_tridents the loyalty return needs the owner's eye position; gap: minor: no separate alive or spectator check
78 ThrownTrident.findHitEntities port crates/horizon-client/src/arrows.rs::Ticker::step_move_and_hit one entity hit per trident, none once it has dealt damage
79 ThrownTrident.hitBlockEnchantmentEffects port crates/horizon-client/src/game/trident.rs::Game::channel_rod_hit gap: minor: only Channeling's hit_block effect (lightning on a rod in a storm) is modelled
80 ThrownTrident.tryPickup port crates/horizon-client/src/arrows.rs::ArrowState::player_touch gap: minor: no owner check on a returned trident; any player in reach takes it when it is no-physics
81 ThrownTrident.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::arrow_from_nbt gap: minor: DealtDamage is not read back; the loyalty level comes from the release
82 ThrownTrident.getLoyaltyFromItem port crates/horizon-client/src/game/trident.rs::Game::release_trident loyalty level read from the thrown stack when the trident is released
83 ThrownTrident.tickDespawn inline crates/horizon-client/src/arrows.rs::Ticker::tick gap: minor: the 1200-tick life limit applies to every trident; the loyalty exemption is not checked
84 AbstractHurtingProjectile.shouldRenderAtSqrDistance skip:ui distance culling for the fireball model; Horizon culls with its own range check
85 AbstractHurtingProjectile.canHitEntity missing minor: no-physics entities are not skipped by the fireball's target search
86 WitherSkull.getBlockExplosionResistance missing minor: a dangerous skull's blast does not cap block resistance at 0.8; the blast call takes no dangerous flag
87 WitherSkull.onHit port crates/horizon-client/src/game/wither.rs::Game::wither_skull_hit skull hit damage, wither effect, then the blast at the impact point
88 AbstractWindCharge.makeBoundingBox port crates/horizon-client/src/projectiles.rs::ProjectileKind::size gap: minor: gives the width only; the box sits 0.15 below the position in vanilla
89 AbstractWindCharge.canHitEntity missing minor: no filter for end crystals or other wind charges found in the target list; unsure whether the caller excludes them
90 AbstractWindCharge.onHitBlock port crates/horizon-client/src/game/wind.rs::Game::wind_charge_hit a burst a quarter block out along the hit face
91 WindCharge.deflect port crates/horizon-client/src/game/wind.rs::reverse gap: minor: turns the charge at half speed; the noDeflectTicks delay is not modelled
92 WindCharge.shouldRenderAtSqrDistance skip:ui distance culling for the wind charge model; Horizon culls with its own range check
93 ThrownEgg.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit egg hit on a mob: zero damage, then the egg break and chick roll run on any landing
94 ThrownEnderpearl.deregisterFromCurrentOwner skip:other chunk-ticket bookkeeping for a player's pearls; Horizon has no chunk tickets for flying pearls
95 ThrownEnderpearl.registerToCurrentOwner skip:other chunk-ticket bookkeeping for a player's pearls; Horizon has no chunk tickets for flying pearls
96 ThrownEnderpearl.getOwner skip:other owner is kept as a Who value and resolved by the caller
97 ThrownEnderpearl.findOwnerIncludingDeadPlayer skip:other owner lookup by UUID across dead players; Horizon keeps the owner id directly
98 ThrownEnderpearl.onHitEntity port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit a mob hit takes zero damage; the pearl still lands
99 ThrownEnderpearl.onHit port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit gap: minor: no 32 portal particles and no dimension change; the owner is teleported to where the pearl was, with 5 damage and a 5 percent endermite
100 ThrownEnderpearl.isAllowedToTeleportOwner missing minor: a pearl whose owner is dead or asleep when it lands still teleports the owner
101 ThrownEnderpearl.playSound port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit teleport sound at the landing point
102 ThrownEnderpearl.teleport port crates/horizon-client/src/game/creatures.rs::Game::projectile_hit moves the player to the pearl's previous position and clears velocity and fall distance
103 ThrownEnderpearl.canTeleport missing minor: a pearl from the End to the Overworld needs the owner's seen-credits flag before it may teleport
104 ThrownEnderpearl.onInsideBlock missing player: a pearl that flies into an end gateway does not send its owner through it
105 Raid.<init> port crates/horizon-client/src/raid.rs::Raid::new centre, difficulty-based group count, cooldown and active flag
106 Raid.getAllRaiders port crates/horizon-client/src/game/raids.rs::Game::raid_members the raiders of this raid, from the mobs carrying its id
107 Raid.getValidSpawnPos port crates/horizon-client/src/raid.rs::Raid::find_spawn_pos eight tries around the centre, as findRandomSpawnPos(level, 8)
108 Raid.getHealthOfLivingRaiders port crates/horizon-client/src/raid.rs::living_health sum of the living raiders' health
109 Raid.getBannerComponentPatch port crates/horizon-client/src/mobs/raider.rs::ominous_banner the ominous banner stack: its patterns, hidden tooltip, name and rarity
110 Raid.getDefaultNumSpawns port crates/horizon-client/src/raid.rs::Raid::wave_count gap: minor: the base count is in the same fn as the bonus and extra rolls
111 Raid.getPotentialBonusSpawns port crates/horizon-client/src/raid.rs::Raid::wave_count extra roll per type and difficulty: vindicators and pillagers, witches after wave 2, ravagers on the bonus wave
112 Raider.hasRaid port crates/horizon-client/src/mobs/raider.rs::in_raid gap: minor: checks only the raid id the raider holds; vanilla also looks for a raid at its position
113 Raider.readAdditionalSaveData missing minor: Wave, CanJoinRaid and RaidId are not read back from a save, so a loaded raider loses its wave and raid link
114 Raider.pickUpItem inline crates/horizon-client/src/game/raids.rs::Game::sync_raiders the banner pickup branch makes the raider the wave leader; gap: minor: the item already worn in the head slot is not dropped first
115 Raider.ObtainRaidLeaderBannerGoal.cannotPickUpBanner port crates/horizon-client/src/mobs/raider.rs::ObtainBanner::can_use gap: minor: checks only a known, reachable banner; the raid-over, can-be-leader and head-slot rules are not repeated here
116 Raider.RaiderMoveThroughVillageGoal.isValidRaid inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use active raid and not over, checked first
117 Raider.RaiderMoveThroughVillageGoal.hasSuitablePoi inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use gap: minor: picks from the known homes within 48 blocks; no POI search or occupancy check
118 Raider.RaiderMoveThroughVillageGoal.hasNotVisited inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use homes already visited are filtered out of the candidates
119 Raider.RaiderMoveThroughVillageGoal.updateVisited inline crates/horizon-client/src/mobs/raider.rs::MoveThroughVillage::can_use the visited list is trimmed first in can_use, as vanilla canUse does
120 Raids.getId skip:other raids are looked up by their id, so no reverse lookup from a raid to its id is needed
121 Raids.canJoinRaid inline crates/horizon-client/src/game/raids.rs::Game::sync_raiders alive, the join flag and no action for 2400 ticks are checked in the raider sync
122 Raids.getOrCreateRaid port crates/horizon-client/src/raid.rs::Raids::create_or_extend the raid at the position is reused, otherwise a new one is made
123 Raids.getRaidCentersInChunk skip:debug the raid centres per chunk feed the debug raid markers only
124 PriorityProvider.Selector.codec skip:java record codec for a variant selector's condition and priority
125 VariantUtils.getDefaultOrAny port crates/horizon-client/src/mobs/finalize.rs::variant_index gap: minor: name to index with unknown names falling back to index 0; no registry holder lookup
126 VariantUtils.writeVariant inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt the variant key is written with the rest of the mob's save data
127 VariantUtils.readVariant port crates/horizon-client/src/entity_nbt.rs::read_variant reads the variant key from the save
128 ContainerEntity.addChestVehicleSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt writes the cart's items and any loot table
129 ContainerEntity.readChestVehicleSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt reads the cart's items from the save
130 ContainerEntity.chestVehicleDestroyed port crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart a destroyed cart drops its items when entity drops are on
131 ContainerEntity.unpackChestVehicleLootTable missing unsure: Minecart.loot is only read and written with the save and is never set here, so a chest minecart's loot table may never roll into its slots
132 ContainerEntity.isChestVehicleEmpty inline crates/horizon-client/src/game/minecarts.rs::Minecart::container_signal the comparator signal reads the slots' emptiness; gap: minor: no separate empty test
133 ContainerEntity.removeChestVehicleItemNoUpdate skip:other slot edits happen on the chest block entity under the cart's key; store_cart_items and close_cart_container copy them back
134 ContainerEntity.setChestVehicleItem skip:other slot edits happen on the chest block entity under the cart's key; store_cart_items and close_cart_container copy them back
135 ContainerEntity.getChestVehicleSlot skip:other slot access happens on the chest block entity under the cart's key; store_cart_items and close_cart_container copy them back
136 DismountHelper.canDismountTo port crates/horizon-client/src/game/respawn_anchor.rs::Game::safe_dismount_location gap: minor: tests the floor and a 1.8 block box for the player, not the passenger's pose box
137 DismountHelper.findCeilingFrom inline crates/horizon-client/src/game/respawn_anchor.rs::Game::safe_dismount_location gap: minor: head room comes from the 1.8 box collision, not a ceiling scan
138 VehicleEntity.ignoreExplosion missing minor: with mobGriefing off a mob's blast still damages carts and boats; the explosion code has no mob-source rule for them
139 VehicleEntity.destroy port crates/horizon-client/src/game/boats.rs::Game::hurt_boat boats drop their item when entity drops are on; a minecart breaks through hurt_cart
140 VehicleEntity.defineSynchedData skip:java hurt time, hurt direction and damage fields; Horizon keeps them on the cart and boat structs
+147
View File
@@ -0,0 +1,147 @@
AbstractBoat.setInitialPos port crates/horizon-client/src/game/boats.rs::Boat::new spawn sets the position and its previous copy; velocity and yaw start at zero
AbstractBoat.defineSynchedData skip:java SynchedEntityData definitions; Horizon keeps paddle, hurt and input state on the Boat struct
AbstractBoat.getPassengerAttachmentPoint port crates/horizon-client/src/game/boats.rs::Boat::seat seat height and the two-seat offsets, +0.2 for an animal; chest boat's 0.15 is included
AbstractBoat.onAboveBubbleColumn missing player: a boat over a bubble column is not lifted or pushed down and no splash plays on it; Horizon has no bubble column for boats
AbstractBoat.animateHurt port crates/horizon-client/src/game/boats.rs::Game::hurt_boat sets the hurt wobble and time; gap: minor: uses the server damage x10, no separate client x11 wobble value
AbstractBoat.tickBubbleColumn missing player: a boat in a bubble column does not rise or sink and ejects no passengers from a down column; Horizon has no bubble time on boats
AbstractBoat.handleEntityEvent missing player: the bubble column effect event (71 or 72) never reaches a boat, same gap as the bubble column lift
AbstractBoat.handleBubbleColumnEffect missing player: a boat in an up or down bubble column keeps its speed; Horizon never changes its vertical velocity from a column
AbstractBoat.setPaddleState inline crates/horizon-client/src/game/boats.rs::Game::tick_boat paddle flags are set from the rider's input inside the controlled branch
AbstractBoat.getLeashOffset missing player: a lead can be tied to a boat in vanilla (AbstractBoat is Leashable); Horizon leads only mobs
AbstractBoat.getStatus port crates/horizon-client/src/game/boats.rs::Game::boat_status in air, in water, under water or on land
AbstractBoat.getWaterLevelAbove port crates/horizon-client/src/game/boats.rs::Game::water_level_above
AbstractBoat.getGroundFriction inline crates/horizon-client/src/game/boats.rs::Game::boat_status land friction is the average of the full blocks under the hull
AbstractBoat.checkInWater inline crates/horizon-client/src/game/boats.rs::Game::boat_status sets the water level and reports the in-water status
AbstractBoat.isUnderwater inline crates/horizon-client/src/game/boats.rs::Game::boat_status the under-water and flowing-water check runs first in boat_status
AbstractBoat.floatBoat inline crates/horizon-client/src/game/boats.rs::Game::tick_boat buoyancy, friction and the first-water-touch snap are in tick_boat
AbstractBoat.controlBoat inline crates/horizon-client/src/game/boats.rs::Game::tick_boat steering, acceleration and paddle flags in the controlled branch of tick_boat
AbstractBoat.getDismountLocationForPassenger port crates/horizon-client/src/game/boats.rs::Game::boat_dismount_target gap: minor: no dismount pose check; the floor and water tests are there
AbstractBoat.clampRotation inline crates/horizon-client/src/game/boats.rs::Game::tick_riding the rider's yaw is clamped to 105 degrees off the boat; mobs get the head clamp in boat_passengers.rs seat_boat_mobs
AbstractBoat.calculatePassengerBodyYRot inline crates/horizon-client/src/game/boat_passengers.rs::Game::seat_boat_mobs animal turned 90 or 270 degrees when the boat is full
AbstractBoat.onPassengerTurned inline crates/horizon-client/src/game/boats.rs::Game::tick_riding the rider's turn is clamped each tick
AbstractBoat.remove inline crates/horizon-client/src/game/boats.rs::Game::hurt_boat destroyed boats eject mobs and drop the boat; gap: minor: no leash drop, since boats cannot be leashed here
AbstractBoat.checkFallDamage missing minor: boats keep no fall distance; boats take no fall damage either way
AbstractBoat.getPaddleState port crates/horizon-client/src/game/boats.rs::Boat::rowing_time paddle flag, set only while a rider drives
AbstractBoat.getControllingPassenger inline crates/horizon-client/src/game/boats.rs::Game::tick_riding the riding player is the controller; mobs never steer
AbstractBoat.setInput inline crates/horizon-client/src/game/boats.rs::Game::tick_riding input flags are copied from the keys each tick
AbstractBoat.isUnderWater port crates/horizon-client/src/game/boats.rs::Boat::under_water
AbstractBoat.modifyPassengerFluidInteractionBox missing minor: a rider's water check still uses the whole body; horizon-world boat_passenger_box exists but no game code calls it
AbstractChestBoat.remove inline crates/horizon-client/src/game/boats.rs::Game::hurt_boat a destroyed chest boat spills its 27 slots
AbstractChestBoat.openCustomInventoryScreen inline crates/horizon-client/src/game/boats.rs::Game::interact_boat sneaking opens the chest; gap: minor: no piglin anger
AbstractChestBoat.createMenu inline crates/horizon-client/src/game/boats.rs::Game::interact_boat the chest container is set up there; gap: minor: no spectator or loot table check
AbstractMinecart.setInitialPos port crates/horizon-client/src/game/minecarts.rs::Minecart::new spawn sets the position and its previous copy
AbstractMinecart.createMinecart port crates/horizon-client/src/game/minecarts.rs::Game::place_minecart placing on a rail: the rail offset for slopes and the item's kind; gap: minor: no rail snap, which only the experimental behaviour does
AbstractMinecart.defineSynchedData skip:java synched display block and offset; Horizon keeps the kind and its display offset on the Minecart struct
AbstractMinecart.getPassengerAttachmentPoint missing minor: a villager or wandering trader in a cart sits at a lowered seat in vanilla; Horizon seats only the player in a cart
AbstractMinecart.getDismountLocationForPassenger port crates/horizon-client/src/game/minecarts.rs::Game::dismount_cart beside the cart, else on top; gap: minor: the side comes from the yaw, and there is no pose or ceiling check
AbstractMinecart.getBlockSpeedFactor missing minor: a cart that has left the rails takes no block speed factor (soul sand, honey); on rails the factor is 1.0 in vanilla and Horizon has no such slowdown
AbstractMinecart.animateHurt port crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart sets the hurt wobble and time; gap: minor: the damage is the server x10, with no separate client wobble value
AbstractMinecart.getCurrentBlockPosOrRailBelow port crates/horizon-client/src/game/minecarts.rs::Game::rail_block the rail one block below counts; the experimental y offset is not used
AbstractMinecart.comeOffTrack port crates/horizon-client/src/game/minecarts.rs::Game::come_off_track clamps speed, halves it on the ground, moves and drags in the air
AbstractMinecart.move port crates/horizon-client/src/game/minecarts.rs::Game::move_cart collision movement only; gap: minor: no push or pickup during the move, which push_carts and the cart tick do instead
AbstractMinecart.applyEffectsFromBlocks inline crates/horizon-client/src/game/minecarts.rs::Game::cart_lava_tick lava is applied there; gap: minor: other block effects on a cart (cobweb, berry bush, bubble column) are not applied
AbstractMinecart.getRedstoneDirection skip:other used only by the experimental NewMinecartBehavior; Horizon runs the old track behaviour
AbstractMinecart.applyNaturalSlowdown port crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown slowdown per ride state, the furnace push and water
AbstractMinecart.readAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt flipped and HasTicked read back; gap: minor: a custom display block and offset are not kept
AbstractMinecart.addAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt flipped and HasTicked written; gap: minor: a custom display block and offset are not saved
AbstractMinecart.pushOtherMinecart port crates/horizon-client/src/game/minecarts.rs::Game::push_from_cart cart against cart push with the furnace case; the old-movement facing check is used
Minecart.interact port crates/horizon-client/src/game/minecarts.rs::Game::interact_cart a plain rideable cart is boarded unless sneaking or already ridden
Minecart.activateMinecart port crates/horizon-client/src/game/minecarts.rs::Game::activate_cart a powered activator rail ejects the rider and hurts a rideable cart
Minecart.tick port crates/horizon-client/src/game/minecarts.rs::Game::tick_cart the per-tick cart update; gap: minor: client rotation smoothing for experimental movement is not modelled
Minecart.positionRider port crates/horizon-client/src/game/minecarts.rs::Game::tick_cart_riding the rider sits at the cart seat; the rider's turn with the cart is experimental-only
MinecartBehavior.setDeltaMovement skip:other behaviour forwarder; Horizon's Minecart struct holds the velocity directly
MinecartBehavior.setPos skip:other behaviour forwarder; Horizon's Minecart struct holds the position directly
MinecartHopper.activateMinecart port crates/horizon-client/src/game/minecarts.rs::Game::activate_cart an unpowered activator rail enables the hopper cart
MinecartHopper.tryConsumeItems inline crates/horizon-client/src/game/minecarts.rs::Game::tick_carts an enabled hopper cart sucks in once a tick
MinecartHopper.suckInItems port crates/horizon-client/src/game/machines.rs::Game::hopper_cart_suck container above first, then item entities at the hopper and the cart's box
MinecartTNT.explode port crates/horizon-client/src/game/minecarts.rs::Game::explode_cart power 4 plus speed, with the cart gone before the blast; gap: minor: the saved explosion power and speed factor are not applied
MinecartTNT.handleEntityEvent port crates/horizon-client/src/game/minecarts.rs::Game::prime_cart event 70 primes the fuse; Horizon primes locally with the same sound
MinecartTNT.primeFuse port crates/horizon-client/src/game/minecarts.rs::Game::prime_cart fuse 80 and the primed sound; gap: minor: no ignition source is recorded for who caused the blast
MinecartTNT.getBlockExplosionResistance missing minor: a primed TNT cart on rails gives rails zero blast resistance in vanilla; Horizon's blast uses the rail's normal resistance
MinecartTNT.shouldBlockExplode missing minor: a primed TNT cart on rails does not block the blast in vanilla; Horizon's blast ray is not changed by a cart on rails
MinecartTNT.readAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt fuse read back; gap: minor: explosion_power and explosion_speed_factor are not read
MinecartTNT.addAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt fuse written; gap: minor: explosion_power and explosion_speed_factor are not written
MinecartTNT.damageSourceIgnitesTnt port crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart the fire flag from the caller primes the cart instead of breaking it
OldMinecartBehavior.tick port crates/horizon-client/src/game/minecarts.rs::Game::tick_cart gravity, track or off-track move, activator rail, yaw from motion and the flip
OldMinecartBehavior.getMotionDirection inline crates/horizon-client/src/game/minecarts.rs::Game::dismount_cart the dismount side is the cart's facing, taken from its yaw
OldMinecartBehavior.getKnownMovement skip:other client-side clamp of the known movement for networking; Horizon simulates carts itself
FoodData.add port crates/horizon-world/src/food.rs::FoodData::eat_properties food points and saturation are added and clamped to 0..20 and to the food level
FoodData.readAdditionalSaveData port crates/horizon-world/src/food_storage.rs::FoodData::read_nbt food level, tick timer, saturation and exhaustion read back
FoodData.addAdditionalSaveData port crates/horizon-world/src/food_storage.rs::FoodData::write_nbt food level, tick timer, saturation and exhaustion written
FoodProperties.Builder.build skip:java builder for the food component; the saturation rule (nutrition times modifier times 2) is in food.rs FoodData::eat
AbstractContainerMenu.addInventoryHotbarSlots skip:ui slot layout and positions only; Horizon indexes the player's slots in Menu::new and draws them in draw_inventory_slots
AbstractContainerMenu.addInventoryExtendedSlots skip:ui slot layout and positions only; Horizon indexes the player's slots in Menu::new and draws them in draw_inventory_slots
AbstractContainerMenu.addStandardInventorySlots skip:ui slot layout and positions only; Horizon indexes the player's slots in Menu::new and draws them in draw_inventory_slots
AbstractContainerMenu.stillValid port crates/horizon-client/src/lan/menu.rs::Slots::still_valid the container's block is still there and within 4 blocks of the player
AbstractContainerMenu.getType port crates/horizon-client/src/menu.rs::Menu::kind the menu's kind as its type
AbstractContainerMenu.checkContainerSize skip:other construction sanity check; Horizon's container sizes come from fixed tables
AbstractContainerMenu.checkContainerDataCount skip:other construction sanity check; Horizon's data counts come from fixed tables
AbstractContainerMenu.isValidSlotIndex inline crates/horizon-client/src/menu.rs::Menu::click an index inside the menu or -999 for a click outside the window
AbstractContainerMenu.addSlot inline crates/horizon-client/src/menu.rs::Menu::new slots are built per kind when the menu is made
AbstractContainerMenu.addDataSlot skip:java registers a DataSlot object; progress values are set directly by Menu::set_data
AbstractContainerMenu.addDataSlots skip:java registers DataSlot objects for a ContainerData; progress values are set directly by Menu::set_data
AbstractContainerMenu.addSlotListener skip:java listener list for local screens; a viewer reads the menu state directly
AbstractContainerMenu.setSynchronizer inline crates/horizon-client/src/lan/containers.rs::Hub::open_container the synchroniser is the guest's connection; opening sends the full content at once
AbstractContainerMenu.sendAllDataToRemote port crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content all slots, the carried stack and the menu state in one packet
AbstractContainerMenu.getItems inline crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content the item list for the content packet is built there
AbstractContainerMenu.broadcastFullState port crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content a full resend of the contents; gap: minor: no separate local listener pass
AbstractContainerMenu.updateDataSlotListeners skip:java local listener dispatch for data changes; the wire side is ContainerSetData in sync_container_data
AbstractContainerMenu.triggerSlotListeners skip:java local listener dispatch for slot changes; the wire side is the slot diff in sync_containers
AbstractContainerMenu.synchronizeSlotToRemote port crates/horizon-client/src/lan/containers.rs::Hub::sync_containers sends each changed slot with a new state id
AbstractContainerMenu.synchronizeDataSlotToRemote port crates/horizon-client/src/lan/containers.rs::Hub::sync_container_data sends each changed furnace, brewing or crafter value
AbstractContainerMenu.synchronizeCarriedToRemote inline crates/horizon-client/src/lan/containers.rs::Hub::answer_click the cursor item is sent after a click when it differs; gap: minor: no sync on other carried changes
AbstractContainerMenu.setRemoteSlotUnsafe port crates/horizon-client/src/game/remote.rs::Game::set_menu_slot the server's slot update is applied; gap: minor: no hashed copy of the remote slot is kept
AbstractContainerMenu.getClickAction inline crates/horizon-client/src/menu.rs::Menu::click button 0 is the primary action, 1 the secondary
AbstractContainerMenu.tryItemClickBehaviourOverride port crates/horizon-client/src/menu/bundle.rs::Menu::bundle_click a bundle takes or puts items on a click on another stack; the NeoForge event is not modelled
AbstractContainerMenu.initializeContents port crates/horizon-client/src/game/remote.rs::Game::set_menu_slot the server's full content is applied to the open menu
AbstractContainerMenu.isValidQuickcraftType inline crates/horizon-client/src/menu.rs::Menu::click drag types 0 and 1 always, type 2 only in creative
AbstractContainerMenu.canItemQuickReplace port crates/horizon-client/src/menu.rs::Menu::quick_replace a slot takes the stack when empty or the same item with room
AbstractContainerMenu.transferState skip:other copies the remote-slot cache back to the player's inventory on close; Horizon's guest inventory is the one copy
AbstractContainerMenu.findSlot skip:other looks up a menu index for the held slot; Horizon's menus use fixed player slot indexes
AbstractContainerMenu.incrementStateId inline crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content the state id goes up with each content packet; sync_containers does the same per slot change
AbstractFurnaceMenu.fillCraftSlotsStackedContents port crates/horizon-client/src/menu/place.rs::Menu::stacked_contents the recipe book's stacked contents are counted from the menu; gap: minor: the furnace's own slots are not counted
AbstractFurnaceMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for furnace slots, with the smeltable, fuel and inventory rules
AbstractFurnaceMenu.getBurnProgress skip:ui flame fraction for the screen; game.rs draw_inventory draws it from the furnace timers
AbstractFurnaceMenu.getLitProgress skip:ui arrow fraction for the screen; game.rs draw_inventory draws it from the furnace timers
AbstractFurnaceMenu.handlePlacement port crates/horizon-client/src/menu/place.rs::Menu::place_recipe recipe book placement into the furnace input and fuel
AnvilMenu.createInputSlotDefinitions skip:ui slot positions and the accept-all rule; positions come from station_slot_position and the accept rules from slot_rules
AnvilMenu.validateName port crates/horizon-client/src/menu.rs::Menu::rename name filtered of formatting codes and capped at 50 UTF-16 units
ArmorSlot.setByPlayer port crates/horizon-client/src/menu.rs::Menu::set_by_player_from an equipment change runs onEquipItem only when the item changes
ArmorSlot.mayPickup port crates/horizon-client/src/menu.rs::Menu::may_pickup a cursed armour piece cannot be taken out in survival; creative can
BeaconMenu.decodeEffect port crates/horizon-client/src/game/lan_stations.rs::Game::lan_station_beacon effect id from the registry, 0 for none; an unknown id fails the packet
BrewingStandMenu.<init> inline crates/horizon-client/src/menu.rs::Menu::new the brewing stand's slots and data are built per kind when the menu is made
BrewingStandMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the brewing stand's potion, ingredient and fuel slots
CartographyTableMenu.setupResultSlot port crates/horizon-client/src/menu.rs::Menu::carto_changed the map copy, scale or lock result from a paper, glass pane or map
CartographyTableMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is never picked up in bulk
CartographyTableMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the cartography slots
CartographyTableMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the inputs go back when the table closes
CrafterMenu.addSlots inline crates/horizon-client/src/menu.rs::Menu::new the 3x3 grid, the result and the data are set up when the crafter menu is made
CrafterMenu.isSlotDisabled inline crates/horizon-client/src/game/machines/crafter.rs::Game::crafter_slot_clicked a disabled slot refuses a click; the disabled flags are read there
CrafterMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the crafter's grid slots
CraftingMenu.slotsChanged port crates/horizon-client/src/menu.rs::Menu::inventory_slots_changed the crafting result is recomputed when the grid changes
CraftingMenu.finishPlacingRecipe inline crates/horizon-client/src/menu/place.rs::Menu::place_recipe the result is recomputed once the placed recipe is in the grid
CraftingMenu.removed port crates/horizon-client/src/game/lan_crafting.rs::Game::lan_crafting_closed the grid goes back when the table closes; the host side of a guest's table
CraftingMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the crafting grid and result
CraftingMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is never picked up in bulk
DispenserMenu.add3x3GridSlots inline crates/horizon-client/src/menu.rs::Menu::new the 3x3 dispenser grid is set up when the menu is made
DispenserMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the dispenser grid
EnchantmentMenu.<init> inline crates/horizon-client/src/game/stations.rs::Game::open_station slots and the offers are set up when the table opens
EnchantmentMenu.getGoldCount inline crates/horizon-client/src/menu.rs::Menu::enchant_click the lapis count is checked against the enchant cost there
EnchantmentMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the inputs go back when the table closes
EnchantmentMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the enchanting slots, with lapis and the item slot
FurnaceResultSlot.remove port crates/horizon-client/src/game.rs::Game::award_furnace_recipes the furnace output's experience is awarded from the recorded recipe uses; gap: minor: no per-slot taken count
GrindstoneMenu.mergeItems port crates/horizon-client/src/stations.rs::grindstone_result two repairable items merge into one with the summed durability
GrindstoneMenu.mergeEnchantsFrom inline crates/horizon-client/src/stations.rs::grindstone_result the second item's enchantments merge in, curses only when the target lacks them
GrindstoneMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the repair inputs go back when the grindstone closes
GrindstoneMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the grindstone inputs and result
HopperMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the hopper's five slots
HorseInventoryMenu.<init> port crates/horizon-client/src/game/lan_mount_menu.rs::Game::mount_engine_menu saddle, armour and the chest columns are set for the mount
InventoryMenu.isHotbarSlot inline crates/horizon-client/src/menu.rs::Menu::quick_move the hotbar range check is inline in the shift-click arm
InventoryMenu.slotsChanged port crates/horizon-client/src/menu.rs::Menu::inventory_slots_changed the crafting result is recomputed when the grid changes
InventoryMenu.removed port crates/horizon-client/src/game/lan_crafting.rs::Game::lan_crafting_closed the window-0 craft grid goes back when the inventory closes; the host side of a guest's inventory
InventoryMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the inventory, armour, grid and offhand
InventoryMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is never picked up in bulk
ItemCombinerMenu.createInputSlots inline crates/horizon-client/src/menu.rs::Menu::new the anvil's input slots are set up when the menu is made; mayPlace is Menu::may_place
ItemCombinerMenu.createResultSlot inline crates/horizon-client/src/menu.rs::Menu::new the result slot is set up when the menu is made and takes no placed items
ItemCombinerMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the input items go back when the station closes
ItemCombinerMenu.stillValid port crates/horizon-client/src/lan/menu.rs::Slots::still_valid the station's block is still there and within 4 blocks of the player
1 AbstractBoat.setInitialPos port crates/horizon-client/src/game/boats.rs::Boat::new spawn sets the position and its previous copy; velocity and yaw start at zero
2 AbstractBoat.defineSynchedData skip:java SynchedEntityData definitions; Horizon keeps paddle, hurt and input state on the Boat struct
3 AbstractBoat.getPassengerAttachmentPoint port crates/horizon-client/src/game/boats.rs::Boat::seat seat height and the two-seat offsets, +0.2 for an animal; chest boat's 0.15 is included
4 AbstractBoat.onAboveBubbleColumn missing player: a boat over a bubble column is not lifted or pushed down and no splash plays on it; Horizon has no bubble column for boats
5 AbstractBoat.animateHurt port crates/horizon-client/src/game/boats.rs::Game::hurt_boat sets the hurt wobble and time; gap: minor: uses the server damage x10, no separate client x11 wobble value
6 AbstractBoat.tickBubbleColumn missing player: a boat in a bubble column does not rise or sink and ejects no passengers from a down column; Horizon has no bubble time on boats
7 AbstractBoat.handleEntityEvent missing player: the bubble column effect event (71 or 72) never reaches a boat, same gap as the bubble column lift
8 AbstractBoat.handleBubbleColumnEffect missing player: a boat in an up or down bubble column keeps its speed; Horizon never changes its vertical velocity from a column
9 AbstractBoat.setPaddleState inline crates/horizon-client/src/game/boats.rs::Game::tick_boat paddle flags are set from the rider's input inside the controlled branch
10 AbstractBoat.getLeashOffset missing player: a lead can be tied to a boat in vanilla (AbstractBoat is Leashable); Horizon leads only mobs
11 AbstractBoat.getStatus port crates/horizon-client/src/game/boats.rs::Game::boat_status in air, in water, under water or on land
12 AbstractBoat.getWaterLevelAbove port crates/horizon-client/src/game/boats.rs::Game::water_level_above
13 AbstractBoat.getGroundFriction inline crates/horizon-client/src/game/boats.rs::Game::boat_status land friction is the average of the full blocks under the hull
14 AbstractBoat.checkInWater inline crates/horizon-client/src/game/boats.rs::Game::boat_status sets the water level and reports the in-water status
15 AbstractBoat.isUnderwater inline crates/horizon-client/src/game/boats.rs::Game::boat_status the under-water and flowing-water check runs first in boat_status
16 AbstractBoat.floatBoat inline crates/horizon-client/src/game/boats.rs::Game::tick_boat buoyancy, friction and the first-water-touch snap are in tick_boat
17 AbstractBoat.controlBoat inline crates/horizon-client/src/game/boats.rs::Game::tick_boat steering, acceleration and paddle flags in the controlled branch of tick_boat
18 AbstractBoat.getDismountLocationForPassenger port crates/horizon-client/src/game/boats.rs::Game::boat_dismount_target gap: minor: no dismount pose check; the floor and water tests are there
19 AbstractBoat.clampRotation inline crates/horizon-client/src/game/boats.rs::Game::tick_riding the rider's yaw is clamped to 105 degrees off the boat; mobs get the head clamp in boat_passengers.rs seat_boat_mobs
20 AbstractBoat.calculatePassengerBodyYRot inline crates/horizon-client/src/game/boat_passengers.rs::Game::seat_boat_mobs animal turned 90 or 270 degrees when the boat is full
21 AbstractBoat.onPassengerTurned inline crates/horizon-client/src/game/boats.rs::Game::tick_riding the rider's turn is clamped each tick
22 AbstractBoat.remove inline crates/horizon-client/src/game/boats.rs::Game::hurt_boat destroyed boats eject mobs and drop the boat; gap: minor: no leash drop, since boats cannot be leashed here
23 AbstractBoat.checkFallDamage missing minor: boats keep no fall distance; boats take no fall damage either way
24 AbstractBoat.getPaddleState port crates/horizon-client/src/game/boats.rs::Boat::rowing_time paddle flag, set only while a rider drives
25 AbstractBoat.getControllingPassenger inline crates/horizon-client/src/game/boats.rs::Game::tick_riding the riding player is the controller; mobs never steer
26 AbstractBoat.setInput inline crates/horizon-client/src/game/boats.rs::Game::tick_riding input flags are copied from the keys each tick
27 AbstractBoat.isUnderWater port crates/horizon-client/src/game/boats.rs::Boat::under_water
28 AbstractBoat.modifyPassengerFluidInteractionBox missing minor: a rider's water check still uses the whole body; horizon-world boat_passenger_box exists but no game code calls it
29 AbstractChestBoat.remove inline crates/horizon-client/src/game/boats.rs::Game::hurt_boat a destroyed chest boat spills its 27 slots
30 AbstractChestBoat.openCustomInventoryScreen inline crates/horizon-client/src/game/boats.rs::Game::interact_boat sneaking opens the chest; gap: minor: no piglin anger
31 AbstractChestBoat.createMenu inline crates/horizon-client/src/game/boats.rs::Game::interact_boat the chest container is set up there; gap: minor: no spectator or loot table check
32 AbstractMinecart.setInitialPos port crates/horizon-client/src/game/minecarts.rs::Minecart::new spawn sets the position and its previous copy
33 AbstractMinecart.createMinecart port crates/horizon-client/src/game/minecarts.rs::Game::place_minecart placing on a rail: the rail offset for slopes and the item's kind; gap: minor: no rail snap, which only the experimental behaviour does
34 AbstractMinecart.defineSynchedData skip:java synched display block and offset; Horizon keeps the kind and its display offset on the Minecart struct
35 AbstractMinecart.getPassengerAttachmentPoint missing minor: a villager or wandering trader in a cart sits at a lowered seat in vanilla; Horizon seats only the player in a cart
36 AbstractMinecart.getDismountLocationForPassenger port crates/horizon-client/src/game/minecarts.rs::Game::dismount_cart beside the cart, else on top; gap: minor: the side comes from the yaw, and there is no pose or ceiling check
37 AbstractMinecart.getBlockSpeedFactor missing minor: a cart that has left the rails takes no block speed factor (soul sand, honey); on rails the factor is 1.0 in vanilla and Horizon has no such slowdown
38 AbstractMinecart.animateHurt port crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart sets the hurt wobble and time; gap: minor: the damage is the server x10, with no separate client wobble value
39 AbstractMinecart.getCurrentBlockPosOrRailBelow port crates/horizon-client/src/game/minecarts.rs::Game::rail_block the rail one block below counts; the experimental y offset is not used
40 AbstractMinecart.comeOffTrack port crates/horizon-client/src/game/minecarts.rs::Game::come_off_track clamps speed, halves it on the ground, moves and drags in the air
41 AbstractMinecart.move port crates/horizon-client/src/game/minecarts.rs::Game::move_cart collision movement only; gap: minor: no push or pickup during the move, which push_carts and the cart tick do instead
42 AbstractMinecart.applyEffectsFromBlocks inline crates/horizon-client/src/game/minecarts.rs::Game::cart_lava_tick lava is applied there; gap: minor: other block effects on a cart (cobweb, berry bush, bubble column) are not applied
43 AbstractMinecart.getRedstoneDirection skip:other used only by the experimental NewMinecartBehavior; Horizon runs the old track behaviour
44 AbstractMinecart.applyNaturalSlowdown port crates/horizon-client/src/game/minecarts.rs::Game::natural_slowdown slowdown per ride state, the furnace push and water
45 AbstractMinecart.readAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt flipped and HasTicked read back; gap: minor: a custom display block and offset are not kept
46 AbstractMinecart.addAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt flipped and HasTicked written; gap: minor: a custom display block and offset are not saved
47 AbstractMinecart.pushOtherMinecart port crates/horizon-client/src/game/minecarts.rs::Game::push_from_cart cart against cart push with the furnace case; the old-movement facing check is used
48 Minecart.interact port crates/horizon-client/src/game/minecarts.rs::Game::interact_cart a plain rideable cart is boarded unless sneaking or already ridden
49 Minecart.activateMinecart port crates/horizon-client/src/game/minecarts.rs::Game::activate_cart a powered activator rail ejects the rider and hurts a rideable cart
50 Minecart.tick port crates/horizon-client/src/game/minecarts.rs::Game::tick_cart the per-tick cart update; gap: minor: client rotation smoothing for experimental movement is not modelled
51 Minecart.positionRider port crates/horizon-client/src/game/minecarts.rs::Game::tick_cart_riding the rider sits at the cart seat; the rider's turn with the cart is experimental-only
52 MinecartBehavior.setDeltaMovement skip:other behaviour forwarder; Horizon's Minecart struct holds the velocity directly
53 MinecartBehavior.setPos skip:other behaviour forwarder; Horizon's Minecart struct holds the position directly
54 MinecartHopper.activateMinecart port crates/horizon-client/src/game/minecarts.rs::Game::activate_cart an unpowered activator rail enables the hopper cart
55 MinecartHopper.tryConsumeItems inline crates/horizon-client/src/game/minecarts.rs::Game::tick_carts an enabled hopper cart sucks in once a tick
56 MinecartHopper.suckInItems port crates/horizon-client/src/game/machines.rs::Game::hopper_cart_suck container above first, then item entities at the hopper and the cart's box
57 MinecartTNT.explode port crates/horizon-client/src/game/minecarts.rs::Game::explode_cart power 4 plus speed, with the cart gone before the blast; gap: minor: the saved explosion power and speed factor are not applied
58 MinecartTNT.handleEntityEvent port crates/horizon-client/src/game/minecarts.rs::Game::prime_cart event 70 primes the fuse; Horizon primes locally with the same sound
59 MinecartTNT.primeFuse port crates/horizon-client/src/game/minecarts.rs::Game::prime_cart fuse 80 and the primed sound; gap: minor: no ignition source is recorded for who caused the blast
60 MinecartTNT.getBlockExplosionResistance missing minor: a primed TNT cart on rails gives rails zero blast resistance in vanilla; Horizon's blast uses the rail's normal resistance
61 MinecartTNT.shouldBlockExplode missing minor: a primed TNT cart on rails does not block the blast in vanilla; Horizon's blast ray is not changed by a cart on rails
62 MinecartTNT.readAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::from_nbt fuse read back; gap: minor: explosion_power and explosion_speed_factor are not read
63 MinecartTNT.addAdditionalSaveData port crates/horizon-client/src/game/minecarts.rs::Minecart::to_nbt fuse written; gap: minor: explosion_power and explosion_speed_factor are not written
64 MinecartTNT.damageSourceIgnitesTnt port crates/horizon-client/src/game/minecarts.rs::Game::hurt_cart the fire flag from the caller primes the cart instead of breaking it
65 OldMinecartBehavior.tick port crates/horizon-client/src/game/minecarts.rs::Game::tick_cart gravity, track or off-track move, activator rail, yaw from motion and the flip
66 OldMinecartBehavior.getMotionDirection inline crates/horizon-client/src/game/minecarts.rs::Game::dismount_cart the dismount side is the cart's facing, taken from its yaw
67 OldMinecartBehavior.getKnownMovement skip:other client-side clamp of the known movement for networking; Horizon simulates carts itself
68 FoodData.add port crates/horizon-world/src/food.rs::FoodData::eat_properties food points and saturation are added and clamped to 0..20 and to the food level
69 FoodData.readAdditionalSaveData port crates/horizon-world/src/food_storage.rs::FoodData::read_nbt food level, tick timer, saturation and exhaustion read back
70 FoodData.addAdditionalSaveData port crates/horizon-world/src/food_storage.rs::FoodData::write_nbt food level, tick timer, saturation and exhaustion written
71 FoodProperties.Builder.build skip:java builder for the food component; the saturation rule (nutrition times modifier times 2) is in food.rs FoodData::eat
72 AbstractContainerMenu.addInventoryHotbarSlots skip:ui slot layout and positions only; Horizon indexes the player's slots in Menu::new and draws them in draw_inventory_slots
73 AbstractContainerMenu.addInventoryExtendedSlots skip:ui slot layout and positions only; Horizon indexes the player's slots in Menu::new and draws them in draw_inventory_slots
74 AbstractContainerMenu.addStandardInventorySlots skip:ui slot layout and positions only; Horizon indexes the player's slots in Menu::new and draws them in draw_inventory_slots
75 AbstractContainerMenu.stillValid port crates/horizon-client/src/lan/menu.rs::Slots::still_valid the container's block is still there and within 4 blocks of the player
76 AbstractContainerMenu.getType port crates/horizon-client/src/menu.rs::Menu::kind the menu's kind as its type
77 AbstractContainerMenu.checkContainerSize skip:other construction sanity check; Horizon's container sizes come from fixed tables
78 AbstractContainerMenu.checkContainerDataCount skip:other construction sanity check; Horizon's data counts come from fixed tables
79 AbstractContainerMenu.isValidSlotIndex inline crates/horizon-client/src/menu.rs::Menu::click an index inside the menu or -999 for a click outside the window
80 AbstractContainerMenu.addSlot inline crates/horizon-client/src/menu.rs::Menu::new slots are built per kind when the menu is made
81 AbstractContainerMenu.addDataSlot skip:java registers a DataSlot object; progress values are set directly by Menu::set_data
82 AbstractContainerMenu.addDataSlots skip:java registers DataSlot objects for a ContainerData; progress values are set directly by Menu::set_data
83 AbstractContainerMenu.addSlotListener skip:java listener list for local screens; a viewer reads the menu state directly
84 AbstractContainerMenu.setSynchronizer inline crates/horizon-client/src/lan/containers.rs::Hub::open_container the synchroniser is the guest's connection; opening sends the full content at once
85 AbstractContainerMenu.sendAllDataToRemote port crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content all slots, the carried stack and the menu state in one packet
86 AbstractContainerMenu.getItems inline crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content the item list for the content packet is built there
87 AbstractContainerMenu.broadcastFullState port crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content a full resend of the contents; gap: minor: no separate local listener pass
88 AbstractContainerMenu.updateDataSlotListeners skip:java local listener dispatch for data changes; the wire side is ContainerSetData in sync_container_data
89 AbstractContainerMenu.triggerSlotListeners skip:java local listener dispatch for slot changes; the wire side is the slot diff in sync_containers
90 AbstractContainerMenu.synchronizeSlotToRemote port crates/horizon-client/src/lan/containers.rs::Hub::sync_containers sends each changed slot with a new state id
91 AbstractContainerMenu.synchronizeDataSlotToRemote port crates/horizon-client/src/lan/containers.rs::Hub::sync_container_data sends each changed furnace, brewing or crafter value
92 AbstractContainerMenu.synchronizeCarriedToRemote inline crates/horizon-client/src/lan/containers.rs::Hub::answer_click the cursor item is sent after a click when it differs; gap: minor: no sync on other carried changes
93 AbstractContainerMenu.setRemoteSlotUnsafe port crates/horizon-client/src/game/remote.rs::Game::set_menu_slot the server's slot update is applied; gap: minor: no hashed copy of the remote slot is kept
94 AbstractContainerMenu.getClickAction inline crates/horizon-client/src/menu.rs::Menu::click button 0 is the primary action, 1 the secondary
95 AbstractContainerMenu.tryItemClickBehaviourOverride port crates/horizon-client/src/menu/bundle.rs::Menu::bundle_click a bundle takes or puts items on a click on another stack; the NeoForge event is not modelled
96 AbstractContainerMenu.initializeContents port crates/horizon-client/src/game/remote.rs::Game::set_menu_slot the server's full content is applied to the open menu
97 AbstractContainerMenu.isValidQuickcraftType inline crates/horizon-client/src/menu.rs::Menu::click drag types 0 and 1 always, type 2 only in creative
98 AbstractContainerMenu.canItemQuickReplace port crates/horizon-client/src/menu.rs::Menu::quick_replace a slot takes the stack when empty or the same item with room
99 AbstractContainerMenu.transferState skip:other copies the remote-slot cache back to the player's inventory on close; Horizon's guest inventory is the one copy
100 AbstractContainerMenu.findSlot skip:other looks up a menu index for the held slot; Horizon's menus use fixed player slot indexes
101 AbstractContainerMenu.incrementStateId inline crates/horizon-client/src/lan/containers.rs::Hub::send_menu_content the state id goes up with each content packet; sync_containers does the same per slot change
102 AbstractFurnaceMenu.fillCraftSlotsStackedContents port crates/horizon-client/src/menu/place.rs::Menu::stacked_contents the recipe book's stacked contents are counted from the menu; gap: minor: the furnace's own slots are not counted
103 AbstractFurnaceMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for furnace slots, with the smeltable, fuel and inventory rules
104 AbstractFurnaceMenu.getBurnProgress skip:ui flame fraction for the screen; game.rs draw_inventory draws it from the furnace timers
105 AbstractFurnaceMenu.getLitProgress skip:ui arrow fraction for the screen; game.rs draw_inventory draws it from the furnace timers
106 AbstractFurnaceMenu.handlePlacement port crates/horizon-client/src/menu/place.rs::Menu::place_recipe recipe book placement into the furnace input and fuel
107 AnvilMenu.createInputSlotDefinitions skip:ui slot positions and the accept-all rule; positions come from station_slot_position and the accept rules from slot_rules
108 AnvilMenu.validateName port crates/horizon-client/src/menu.rs::Menu::rename name filtered of formatting codes and capped at 50 UTF-16 units
109 ArmorSlot.setByPlayer port crates/horizon-client/src/menu.rs::Menu::set_by_player_from an equipment change runs onEquipItem only when the item changes
110 ArmorSlot.mayPickup port crates/horizon-client/src/menu.rs::Menu::may_pickup a cursed armour piece cannot be taken out in survival; creative can
111 BeaconMenu.decodeEffect port crates/horizon-client/src/game/lan_stations.rs::Game::lan_station_beacon effect id from the registry, 0 for none; an unknown id fails the packet
112 BrewingStandMenu.<init> inline crates/horizon-client/src/menu.rs::Menu::new the brewing stand's slots and data are built per kind when the menu is made
113 BrewingStandMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the brewing stand's potion, ingredient and fuel slots
114 CartographyTableMenu.setupResultSlot port crates/horizon-client/src/menu.rs::Menu::carto_changed the map copy, scale or lock result from a paper, glass pane or map
115 CartographyTableMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is never picked up in bulk
116 CartographyTableMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the cartography slots
117 CartographyTableMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the inputs go back when the table closes
118 CrafterMenu.addSlots inline crates/horizon-client/src/menu.rs::Menu::new the 3x3 grid, the result and the data are set up when the crafter menu is made
119 CrafterMenu.isSlotDisabled inline crates/horizon-client/src/game/machines/crafter.rs::Game::crafter_slot_clicked a disabled slot refuses a click; the disabled flags are read there
120 CrafterMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the crafter's grid slots
121 CraftingMenu.slotsChanged port crates/horizon-client/src/menu.rs::Menu::inventory_slots_changed the crafting result is recomputed when the grid changes
122 CraftingMenu.finishPlacingRecipe inline crates/horizon-client/src/menu/place.rs::Menu::place_recipe the result is recomputed once the placed recipe is in the grid
123 CraftingMenu.removed port crates/horizon-client/src/game/lan_crafting.rs::Game::lan_crafting_closed the grid goes back when the table closes; the host side of a guest's table
124 CraftingMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the crafting grid and result
125 CraftingMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is never picked up in bulk
126 DispenserMenu.add3x3GridSlots inline crates/horizon-client/src/menu.rs::Menu::new the 3x3 dispenser grid is set up when the menu is made
127 DispenserMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the dispenser grid
128 EnchantmentMenu.<init> inline crates/horizon-client/src/game/stations.rs::Game::open_station slots and the offers are set up when the table opens
129 EnchantmentMenu.getGoldCount inline crates/horizon-client/src/menu.rs::Menu::enchant_click the lapis count is checked against the enchant cost there
130 EnchantmentMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the inputs go back when the table closes
131 EnchantmentMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the enchanting slots, with lapis and the item slot
132 FurnaceResultSlot.remove port crates/horizon-client/src/game.rs::Game::award_furnace_recipes the furnace output's experience is awarded from the recorded recipe uses; gap: minor: no per-slot taken count
133 GrindstoneMenu.mergeItems port crates/horizon-client/src/stations.rs::grindstone_result two repairable items merge into one with the summed durability
134 GrindstoneMenu.mergeEnchantsFrom inline crates/horizon-client/src/stations.rs::grindstone_result the second item's enchantments merge in, curses only when the target lacks them
135 GrindstoneMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the repair inputs go back when the grindstone closes
136 GrindstoneMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the grindstone inputs and result
137 HopperMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the hopper's five slots
138 HorseInventoryMenu.<init> port crates/horizon-client/src/game/lan_mount_menu.rs::Game::mount_engine_menu saddle, armour and the chest columns are set for the mount
139 InventoryMenu.isHotbarSlot inline crates/horizon-client/src/menu.rs::Menu::quick_move the hotbar range check is inline in the shift-click arm
140 InventoryMenu.slotsChanged port crates/horizon-client/src/menu.rs::Menu::inventory_slots_changed the crafting result is recomputed when the grid changes
141 InventoryMenu.removed port crates/horizon-client/src/game/lan_crafting.rs::Game::lan_crafting_closed the window-0 craft grid goes back when the inventory closes; the host side of a guest's inventory
142 InventoryMenu.quickMoveStack port crates/horizon-client/src/menu.rs::Menu::quick_move shift-click for the inventory, armour, grid and offhand
143 InventoryMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is never picked up in bulk
144 ItemCombinerMenu.createInputSlots inline crates/horizon-client/src/menu.rs::Menu::new the anvil's input slots are set up when the menu is made; mayPlace is Menu::may_place
145 ItemCombinerMenu.createResultSlot inline crates/horizon-client/src/menu.rs::Menu::new the result slot is set up when the menu is made and takes no placed items
146 ItemCombinerMenu.removed inline crates/horizon-client/src/game/stations.rs::Game::close_station the input items go back when the station closes
147 ItemCombinerMenu.stillValid port crates/horizon-client/src/lan/menu.rs::Slots::still_valid the station's block is still there and within 4 blocks of the player
+149
View File
@@ -0,0 +1,149 @@
LoomMenu.<init> port crates/horizon-client/src/menu.rs::Menu::new the loom's banner, dye, pattern and result slots are laid out for Kind::Loom in the constructor
LoomMenu.clickMenuButton port crates/horizon-client/src/menu.rs::Menu::button pattern index check and selection; the select sound is played by game/loom.rs::Game::loom_button
LoomMenu.isValidPatternIndex inline crates/horizon-client/src/menu.rs::Menu::button the range check is inline in button
LoomMenu.quickMoveStack inline crates/horizon-client/src/menu.rs::Menu::quick_move the Kind::Loom arm
LoomMenu.removed port crates/horizon-client/src/game/stations.rs::Game::close_station input stacks are given back or dropped when the station closes
MenuType.register skip:data menu type registry bootstrap
MerchantContainer.isEmpty skip:java container emptiness helper; Horizon checks the stacks it needs directly
MerchantContainer.setItem inline crates/horizon-client/src/menu.rs::Menu::slot_changed the store is the generic put; the payment update is merchant_update, run from slot_changed for every merchant slot
MerchantMenu.quickMoveStack inline crates/horizon-client/src/menu.rs::Menu::quick_move the Kind::Merchant arm; a result shift-click also queues the trade sound event
MerchantMenu.playTradeSound missing player: a shift-click trade should play the villager yes sound; the menu queues Event::TradeSound and game/trading.rs drops it with an empty arm
MerchantResultSlot.remove port crates/horizon-client/src/menu.rs::Menu::remove gap: minor: the removeCount tally that feeds the crafted statistic is not kept
MerchantResultSlot.mayPickup port crates/horizon-client/src/menu.rs::Menu::may_pickup the Role::MerchantResult arm
ResultSlot.remove port crates/horizon-client/src/menu.rs::Menu::remove gap: minor: the removeCount tally for the crafted statistic is not kept
ResultSlot.safeClone skip:other onCraftedBy only matters for MAP_POST_PROCESSING, which only cartography results carry; map_crafted covers that take
ResultSlot.checkTakeAchievements port crates/horizon-client/src/game.rs::Game::award_crafted gap: minor: the recipe is awarded; the crafted statistic count from onCraftedBy is not added on this take
ResultSlot.copyAllInputItems inline crates/horizon-client/src/crafting.rs::Recipes::remainders gap: minor: vanilla copies every input when no recipe matches on the server; remainders returns none for an unmatched recipe
ResultSlot.getRemainingItems port crates/horizon-client/src/crafting.rs::Recipes::remainders container remainders and the special banner and book copies
Slot.safeTake port crates/horizon-client/src/menu.rs::Menu::safe_take
SlotRanges.create inline crates/horizon-command/src/args.rs::slot_ranges a range is a name and size pair built in slot_ranges
SlotRanges.addSlotRange inline crates/horizon-command/src/args.rs::slot_ranges the range closure adds the numbered names and the wildcard
SlotRanges.tryRead inline crates/horizon-command/src/args.rs::ArgType::parse the Slots and Slot arms read a name and check the range exists
SmithingMenu.createInputSlotDefinitions port crates/horizon-client/src/menu.rs::Menu::new the three input slots and the result slot; the input tests run in may_place (Role::SmithInput)
SmithingMenu.getRelevantItems inline crates/horizon-client/src/menu.rs::Menu::smith_result the three input stacks are read directly
SmithingMenu.createRecipeInput inline crates/horizon-client/src/menu.rs::Menu::smith_result the recipe input is passed to smithing_result
SmithingMenu.shrinkStackInSlot inline crates/horizon-client/src/menu.rs::Menu::on_take the SmithingMenu take arm removes one of each input
SmithingMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is excluded
SmithingMenu.canMoveIntoInputSlots inline crates/horizon-client/src/menu.rs::Menu::quick_move the Anvil or Smithing arm checks for an empty input the stack fits
StonecutterMenu.hasInputItem inline crates/horizon-client/src/game/stations.rs::Station::stonecutter_changed the draw flag; the list scroll resets on the same input and recipe check
StonecutterMenu.isValidRecipeIndex inline crates/horizon-client/src/menu.rs::Menu::button the stonecutter arm checks the recipe index
StonecutterMenu.setupRecipeList port crates/horizon-client/src/menu.rs::Menu::stone_changed recipes for the input are selected and the selection and result reset
StonecutterMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is excluded
StonecutterMenu.quickMoveStack inline crates/horizon-client/src/menu.rs::Menu::quick_move the Kind::Stonecutter arm
StonecutterMenu.removed port crates/horizon-client/src/game/stations.rs::Game::close_station input stacks are given back when the station closes; the result is derived and not kept
ArrowItem.asProjectile port crates/horizon-client/src/game/dispenser.rs::Game::shoot_projectile_item dispensed arrows are built in the arrow arm of the item shot
BlockItem.updateBlockEntityComponents port crates/horizon-client/src/block_entity_item.rs::place the placed block entity takes the item's components
BlockItem.canPlace port crates/horizon-world/src/level/place.rs::Sim::place the placement checks, including the survive check, run in Sim::place
BlockItem.onDestroyed missing unsure: a container item whose item entity is destroyed should spill its contents; no Horizon code does this
BoatItem.getBoat port crates/horizon-client/src/game/boats.rs::Game::place_boat boat placed at the hit point with the item's stack config
BucketItem.playEmptySound port crates/horizon-world/src/level/buckets.rs::Sim::empty_sound
BundleItem.getWeightSafe port crates/horizon-items/src/bundle.rs::Contents::weight_fraction float fraction; vanilla compares an exact Fraction
BundleItem.getBarWidth port crates/horizon-items/src/bundle.rs::Contents::bar
BundleItem.getBarColor port crates/horizon-items/src/bundle.rs::Contents::bar
BundleItem.removeOneItemFromBundle port crates/horizon-items/src/bundle.rs::Contents::remove_one
BundleItem.getTooltipImage port crates/horizon-items/src/bundle.rs::tooltip_layout gap: minor: the tooltip_display rule that hides the bundle contents is not checked here
BundleItem.onDestroyed missing unsure: a bundle whose item entity is destroyed should spill its contents; no Horizon code does this
BundleItem.playRemoveOneSound port crates/horizon-client/src/game.rs::Game::drop_bundle_content the menu queues the same sound in menu/bundle.rs
BundleItem.playInsertSound port crates/horizon-client/src/menu/bundle.rs::Menu::carried_bundle_click queues the insert or insert-fail sound
BundleItem.playDropContentsSound port crates/horizon-client/src/game.rs::Game::drop_bundle_content
CompassItem.isFoil port crates/horizon-assets/src/item_model.rs::Resolve::has_foil a compass with a lodestone_tracker component glints
CrossbowItem.tryLoadProjectiles port crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow the drawn ammo is stored on the crossbow once charged
CrossbowItem.shootProjectile port crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow
CrossbowItem.getProjectileShotVector inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the multishot spread is rotated inline from the view and up vectors
CrossbowItem.createProjectile inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow gap: player: crossbow arrows keep the normal arrow hit sound; the crossbow hit sound (item.crossbow.hit) is never set
CrossbowItem.getShotPitch inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the shot pitch per index is inline
CrossbowItem.getRandomShotPitch inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the random pitch formula is inline
CrossbowItem.getPowerForTime inline crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow the charge fraction capped at one is the tick check against the charge time
DyeColor.getMixedColor missing player: a baby sheep, wolf or cat from parents of two dye colours gets a mixed colour; Horizon has no breeding dye mix (only sheep_color for spawns)
DyeColor.findColorMixInRecipes missing player: part of the same breeding dye mix; the crafting recipe lookup for two dyes is not done for offspring
FireworkRocketItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile rocket config: offset 0.5000099, uncertainty 1, power 0.5, event 1004
FireworkRocketItem.getEntityJustOutsideOfBlockPos port crates/horizon-client/src/game/dispenser.rs::Game::dispense_position the position just outside the dispenser on the facing side
HangingEntityItem.mayPlace port crates/horizon-client/src/game/paintings.rs::Game::place_painting gap: player: the horizontal-face rule is checked for paintings only; place_item_frame has no vertical-face test
HangingEntityItem.appendHoverText missing player: hovering a painting item shows no title, author or size line in its tooltip
Item.getDestroySpeed port crates/horizon-items/src/items.rs::Items::mining_speed
Item.finishUsingItem port crates/horizon-client/src/game.rs::Game::consume_held the consumable effects are applied by apply_consume_effect
Item.getBarColor port crates/horizon-client/src/hud_overlays.rs::damage_bar width and hue from the damage fraction
Item.mineBlock port crates/horizon-client/src/game.rs::Game::mine_block_with_held
Item.isCorrectToolForDrops port crates/horizon-items/src/items.rs::Items::correct_for_drops
Item.getUseAnimation port crates/horizon-items/src/use_animation.rs::consumable_animation consumable animation; the block and spear poses are handled by the item pose code
Item.getPlayerPOVHitResult port crates/horizon-client/src/game.rs::Game::pick the view ray from the eyes; the fluid variant is Game::pick_fluid
Item.Properties.food skip:data registration builder; Horizon reads item data from tables
Item.Properties.usingConvertsTo skip:data registration builder
Item.Properties.durability skip:data registration builder
Item.Properties.craftRemainder skip:data registration builder
Item.Properties.fireResistant skip:data registration builder; resists_fire reads the data
Item.Properties.jukeboxPlayable skip:data registration builder
Item.Properties.repairable skip:data registration builder
Item.Properties.axe skip:data registration builder
Item.Properties.hoe skip:data registration builder
Item.Properties.shovel skip:data registration builder
Item.Properties.spawnEgg skip:data registration builder
Item.Properties.humanoidArmor skip:data registration builder
Item.Properties.wolfArmor skip:data registration builder
Item.Properties.horseArmor skip:data registration builder
Item.Properties.nautilusArmor skip:data registration builder
Item.Properties.requiredFeatures skip:data registration builder
Item.Properties.delayedHolderComponent skip:data registration builder
Item.Properties.loweredMobVisibility missing unsure: the mob_visibility component is not read by Horizon's mob targeting
Item.Properties.finalizeInitializer skip:data registration builder
Item.TooltipContext.of skip:java tooltip context factory; Horizon passes the level and player to the tooltip functions
ItemStack.validateStrict skip:java codec-side validation of components and stack size
ItemStack.hasNonDefault skip:other component presence query; Horizon reads stack fields directly
ItemStack.validateComponents skip:java codec-side validation
ItemStack.validateContainedItemSizes skip:java codec-side validation
ItemStack.getDamageValue skip:other field accessor; Horizon keeps damage on the stack
ItemStack.setDamageValue skip:other field write
ItemStack.isBroken inline crates/horizon-client/src/game.rs::Game::damage_held the break test (damage at or over max) is in damage_held
ItemStack.nextDamageWillBreak inline crates/horizon-client/src/game/trident.rs::Game::use_trident gap: minor: only the trident's check is ported here
ItemStack.processDurabilityChange port crates/horizon-client/src/game/enchant_effects.rs::Game::durability_loss the Unbreaking-adjusted loss
ItemStack.applyDamage port crates/horizon-client/src/game.rs::Game::damage_held gap: minor: no item durability advancement trigger fires
ItemStack.hurtAndConvertOnBreak missing unsure: a carrot or fungus on a stick that breaks should become a fishing rod; no conversion was found
ItemStack.hurtEnemy port crates/horizon-client/src/game/mace.rs::Game::weapon_wear the per-hit durability loss of a weapon
ItemStack.interactLivingEntity port crates/horizon-client/src/game.rs::Game::interact_entity equip-on-interact is in the mob paths (nautili.rs, ghasts.rs)
ItemStack.copy skip:java value copy
ItemStack.copyWithCount skip:java value copy with a count
ItemStack.transmuteCopyIgnoreEmpty port crates/horizon-items/src/item_data.rs::ItemStack::transmute keeps the components, changes the item
ItemStack.listMatches skip:java element-wise list equality for CraftingInput; Horizon compares recipe inputs directly
ItemStack.matchesIgnoringComponents port crates/horizon-items/src/item_data.rs::ItemStack::same_item_same_components gap: minor: no predicate for ignored component types
ItemStack.lenientOptionalFieldOf skip:java codec helper
ItemStack.hashItemAndComponents skip:java hash for collections
ItemStack.hashStackList skip:java hash for collections
ItemStack.onCraftedBy inline crates/horizon-client/src/game.rs::Game::click_inventory gap: minor: the crafted statistic is added only on the inventory grid craft path here
ItemStack.set skip:other component write; Horizon stores component data in typed fields
ItemStack.update skip:java functional update helper
ItemStack.applyComponentsAndValidate missing unsure: a validated component patch has no single Horizon counterpart; /item modify is a separate path
ItemStack.getStyledHoverName port crates/horizon-client/src/game/stations.rs::Game::stack_hover_name gap: minor: plain text; the rarity colour and italic style are not applied here
ItemStack.addToTooltip port crates/horizon-client/src/item_tooltip.rs::lines
ItemStack.addUnitComponentToTooltip inline crates/horizon-client/src/game/stations.rs::Game::stack_tooltip_lines unit lines such as unbreakable, gated by the tooltip display
ItemStack.canPlaceOnBlockInAdventureMode missing player: in adventure mode a block can be placed only when the held item's can_place_on list allows it; Horizon does not read that component
ItemStack.canBreakBlockInAdventureMode missing player: in adventure mode a block can be broken only when the held item's can_break list allows it; Horizon does not read that component
ItemStack.getDamageSource missing unsure: a stack's damage_type component is not read when a weapon hits; no Horizon reader found
ItemStackTemplate.fromNonEmptyStack port crates/horizon-items/src/item_data.rs::template_tag stack to template tag
ItemStackTemplate.withCount skip:java record copy with a new count
ItemStackTemplate.apply port crates/horizon-assets/src/item_model.rs::stack_from_template
ItemUtils.onContainerDestroyed missing unsure: destroyed container items do not spill their contents; see BlockItem.onDestroyed
Items.registerBlock skip:data item registry bootstrap
Items.registerItem skip:data item registry bootstrap
JukeboxSong.hasFinished port crates/horizon-items/src/items.rs::Song::finished
JukeboxSongPlayer.setSongWithoutPlaying missing unsure: no load path restores a jukebox's song start tick
JukeboxSongPlayer.play port crates/horizon-client/src/game/jukebox.rs::Game::start_song the song starts at the jukebox with its sound
JukeboxSongPlayer.shouldEmitJukeboxPlayingEvent inline crates/horizon-client/src/game/jukebox.rs::Game::tick_jukebox
JukeboxSongPlayer.spawnMusicParticles inline crates/horizon-client/src/game/jukebox.rs::Game::tick_jukebox the note particle is emitted in tick_jukebox
LeadItem.bindPlayerMobs port crates/horizon-client/src/game/leads.rs::Game::interact_knot
MaceItem.createAttributes skip:data attribute modifiers come from the item data
MaceItem.calculateImpactPosition inline crates/horizon-client/src/game/mace.rs::Game::mace_hurt_enemy the earlier impact below the player is kept
MaceItem.knockbackPredicate port crates/horizon-client/src/game/mace.rs::Game::smash_knockback the nearby entity filter for the smash
MapItem.create port crates/horizon-client/src/game/maps.rs::Game::register_exploration_maps
MapItem.createNewSavedData port crates/horizon-client/src/game/maps.rs::MapData::fresh
MapItem.getCorrectStateForFluidBlock inline crates/horizon-client/src/game/maps.rs::Game::update_map the map colour pass
MapItem.inventoryTick port crates/horizon-client/src/game/maps.rs::Game::tick_maps
MapItem.lockMap port crates/horizon-client/src/menu.rs::Menu::map_crafted the lock branch of the post processing
MapItem.useOn missing player: using a map on a banner block should toggle that banner's marker on the map; Horizon has no banner toggle
MobBucketItem.emptyContents port crates/horizon-world/src/level/buckets.rs::Sim::bucket_empty the MobWater and Nothing contents
PotionItem.getDefaultInstance skip:data default stack data
PotionItem.useOn missing player: a water bottle used on a block that turns to mud should make mud; no such conversion was found in potions.rs
PotionItem.getName port crates/horizon-client/src/game/stations.rs::Game::stack_hover_name potion name from the contents
ProjectileItem.DispenseConfig.Builder.build inline crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile per-item dispense config
ProjectileWeaponItem.getHeldProjectile port crates/horizon-client/src/game/crossbow.rs::Game::projectile_slot offhand first, then the held slot
ProjectileWeaponItem.createProjectile inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the arrow from the ammo, with the weapon's piercing
ShieldItem.getName missing player: a shield with a banner base colour is named after that colour; Horizon names every shield the same
1 LoomMenu.<init> port crates/horizon-client/src/menu.rs::Menu::new the loom's banner, dye, pattern and result slots are laid out for Kind::Loom in the constructor
2 LoomMenu.clickMenuButton port crates/horizon-client/src/menu.rs::Menu::button pattern index check and selection; the select sound is played by game/loom.rs::Game::loom_button
3 LoomMenu.isValidPatternIndex inline crates/horizon-client/src/menu.rs::Menu::button the range check is inline in button
4 LoomMenu.quickMoveStack inline crates/horizon-client/src/menu.rs::Menu::quick_move the Kind::Loom arm
5 LoomMenu.removed port crates/horizon-client/src/game/stations.rs::Game::close_station input stacks are given back or dropped when the station closes
6 MenuType.register skip:data menu type registry bootstrap
7 MerchantContainer.isEmpty skip:java container emptiness helper; Horizon checks the stacks it needs directly
8 MerchantContainer.setItem inline crates/horizon-client/src/menu.rs::Menu::slot_changed the store is the generic put; the payment update is merchant_update, run from slot_changed for every merchant slot
9 MerchantMenu.quickMoveStack inline crates/horizon-client/src/menu.rs::Menu::quick_move the Kind::Merchant arm; a result shift-click also queues the trade sound event
10 MerchantMenu.playTradeSound missing player: a shift-click trade should play the villager yes sound; the menu queues Event::TradeSound and game/trading.rs drops it with an empty arm
11 MerchantResultSlot.remove port crates/horizon-client/src/menu.rs::Menu::remove gap: minor: the removeCount tally that feeds the crafted statistic is not kept
12 MerchantResultSlot.mayPickup port crates/horizon-client/src/menu.rs::Menu::may_pickup the Role::MerchantResult arm
13 ResultSlot.remove port crates/horizon-client/src/menu.rs::Menu::remove gap: minor: the removeCount tally for the crafted statistic is not kept
14 ResultSlot.safeClone skip:other onCraftedBy only matters for MAP_POST_PROCESSING, which only cartography results carry; map_crafted covers that take
15 ResultSlot.checkTakeAchievements port crates/horizon-client/src/game.rs::Game::award_crafted gap: minor: the recipe is awarded; the crafted statistic count from onCraftedBy is not added on this take
16 ResultSlot.copyAllInputItems inline crates/horizon-client/src/crafting.rs::Recipes::remainders gap: minor: vanilla copies every input when no recipe matches on the server; remainders returns none for an unmatched recipe
17 ResultSlot.getRemainingItems port crates/horizon-client/src/crafting.rs::Recipes::remainders container remainders and the special banner and book copies
18 Slot.safeTake port crates/horizon-client/src/menu.rs::Menu::safe_take
19 SlotRanges.create inline crates/horizon-command/src/args.rs::slot_ranges a range is a name and size pair built in slot_ranges
20 SlotRanges.addSlotRange inline crates/horizon-command/src/args.rs::slot_ranges the range closure adds the numbered names and the wildcard
21 SlotRanges.tryRead inline crates/horizon-command/src/args.rs::ArgType::parse the Slots and Slot arms read a name and check the range exists
22 SmithingMenu.createInputSlotDefinitions port crates/horizon-client/src/menu.rs::Menu::new the three input slots and the result slot; the input tests run in may_place (Role::SmithInput)
23 SmithingMenu.getRelevantItems inline crates/horizon-client/src/menu.rs::Menu::smith_result the three input stacks are read directly
24 SmithingMenu.createRecipeInput inline crates/horizon-client/src/menu.rs::Menu::smith_result the recipe input is passed to smithing_result
25 SmithingMenu.shrinkStackInSlot inline crates/horizon-client/src/menu.rs::Menu::on_take the SmithingMenu take arm removes one of each input
26 SmithingMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is excluded
27 SmithingMenu.canMoveIntoInputSlots inline crates/horizon-client/src/menu.rs::Menu::quick_move the Anvil or Smithing arm checks for an empty input the stack fits
28 StonecutterMenu.hasInputItem inline crates/horizon-client/src/game/stations.rs::Station::stonecutter_changed the draw flag; the list scroll resets on the same input and recipe check
29 StonecutterMenu.isValidRecipeIndex inline crates/horizon-client/src/menu.rs::Menu::button the stonecutter arm checks the recipe index
30 StonecutterMenu.setupRecipeList port crates/horizon-client/src/menu.rs::Menu::stone_changed recipes for the input are selected and the selection and result reset
31 StonecutterMenu.canTakeItemForPickAll port crates/horizon-client/src/menu.rs::Menu::can_take_for_pick_all the result slot is excluded
32 StonecutterMenu.quickMoveStack inline crates/horizon-client/src/menu.rs::Menu::quick_move the Kind::Stonecutter arm
33 StonecutterMenu.removed port crates/horizon-client/src/game/stations.rs::Game::close_station input stacks are given back when the station closes; the result is derived and not kept
34 ArrowItem.asProjectile port crates/horizon-client/src/game/dispenser.rs::Game::shoot_projectile_item dispensed arrows are built in the arrow arm of the item shot
35 BlockItem.updateBlockEntityComponents port crates/horizon-client/src/block_entity_item.rs::place the placed block entity takes the item's components
36 BlockItem.canPlace port crates/horizon-world/src/level/place.rs::Sim::place the placement checks, including the survive check, run in Sim::place
37 BlockItem.onDestroyed missing unsure: a container item whose item entity is destroyed should spill its contents; no Horizon code does this
38 BoatItem.getBoat port crates/horizon-client/src/game/boats.rs::Game::place_boat boat placed at the hit point with the item's stack config
39 BucketItem.playEmptySound port crates/horizon-world/src/level/buckets.rs::Sim::empty_sound
40 BundleItem.getWeightSafe port crates/horizon-items/src/bundle.rs::Contents::weight_fraction float fraction; vanilla compares an exact Fraction
41 BundleItem.getBarWidth port crates/horizon-items/src/bundle.rs::Contents::bar
42 BundleItem.getBarColor port crates/horizon-items/src/bundle.rs::Contents::bar
43 BundleItem.removeOneItemFromBundle port crates/horizon-items/src/bundle.rs::Contents::remove_one
44 BundleItem.getTooltipImage port crates/horizon-items/src/bundle.rs::tooltip_layout gap: minor: the tooltip_display rule that hides the bundle contents is not checked here
45 BundleItem.onDestroyed missing unsure: a bundle whose item entity is destroyed should spill its contents; no Horizon code does this
46 BundleItem.playRemoveOneSound port crates/horizon-client/src/game.rs::Game::drop_bundle_content the menu queues the same sound in menu/bundle.rs
47 BundleItem.playInsertSound port crates/horizon-client/src/menu/bundle.rs::Menu::carried_bundle_click queues the insert or insert-fail sound
48 BundleItem.playDropContentsSound port crates/horizon-client/src/game.rs::Game::drop_bundle_content
49 CompassItem.isFoil port crates/horizon-assets/src/item_model.rs::Resolve::has_foil a compass with a lodestone_tracker component glints
50 CrossbowItem.tryLoadProjectiles port crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow the drawn ammo is stored on the crossbow once charged
51 CrossbowItem.shootProjectile port crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow
52 CrossbowItem.getProjectileShotVector inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the multishot spread is rotated inline from the view and up vectors
53 CrossbowItem.createProjectile inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow gap: player: crossbow arrows keep the normal arrow hit sound; the crossbow hit sound (item.crossbow.hit) is never set
54 CrossbowItem.getShotPitch inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the shot pitch per index is inline
55 CrossbowItem.getRandomShotPitch inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the random pitch formula is inline
56 CrossbowItem.getPowerForTime inline crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow the charge fraction capped at one is the tick check against the charge time
57 DyeColor.getMixedColor missing player: a baby sheep, wolf or cat from parents of two dye colours gets a mixed colour; Horizon has no breeding dye mix (only sheep_color for spawns)
58 DyeColor.findColorMixInRecipes missing player: part of the same breeding dye mix; the crafting recipe lookup for two dyes is not done for offspring
59 FireworkRocketItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile rocket config: offset 0.5000099, uncertainty 1, power 0.5, event 1004
60 FireworkRocketItem.getEntityJustOutsideOfBlockPos port crates/horizon-client/src/game/dispenser.rs::Game::dispense_position the position just outside the dispenser on the facing side
61 HangingEntityItem.mayPlace port crates/horizon-client/src/game/paintings.rs::Game::place_painting gap: player: the horizontal-face rule is checked for paintings only; place_item_frame has no vertical-face test
62 HangingEntityItem.appendHoverText missing player: hovering a painting item shows no title, author or size line in its tooltip
63 Item.getDestroySpeed port crates/horizon-items/src/items.rs::Items::mining_speed
64 Item.finishUsingItem port crates/horizon-client/src/game.rs::Game::consume_held the consumable effects are applied by apply_consume_effect
65 Item.getBarColor port crates/horizon-client/src/hud_overlays.rs::damage_bar width and hue from the damage fraction
66 Item.mineBlock port crates/horizon-client/src/game.rs::Game::mine_block_with_held
67 Item.isCorrectToolForDrops port crates/horizon-items/src/items.rs::Items::correct_for_drops
68 Item.getUseAnimation port crates/horizon-items/src/use_animation.rs::consumable_animation consumable animation; the block and spear poses are handled by the item pose code
69 Item.getPlayerPOVHitResult port crates/horizon-client/src/game.rs::Game::pick the view ray from the eyes; the fluid variant is Game::pick_fluid
70 Item.Properties.food skip:data registration builder; Horizon reads item data from tables
71 Item.Properties.usingConvertsTo skip:data registration builder
72 Item.Properties.durability skip:data registration builder
73 Item.Properties.craftRemainder skip:data registration builder
74 Item.Properties.fireResistant skip:data registration builder; resists_fire reads the data
75 Item.Properties.jukeboxPlayable skip:data registration builder
76 Item.Properties.repairable skip:data registration builder
77 Item.Properties.axe skip:data registration builder
78 Item.Properties.hoe skip:data registration builder
79 Item.Properties.shovel skip:data registration builder
80 Item.Properties.spawnEgg skip:data registration builder
81 Item.Properties.humanoidArmor skip:data registration builder
82 Item.Properties.wolfArmor skip:data registration builder
83 Item.Properties.horseArmor skip:data registration builder
84 Item.Properties.nautilusArmor skip:data registration builder
85 Item.Properties.requiredFeatures skip:data registration builder
86 Item.Properties.delayedHolderComponent skip:data registration builder
87 Item.Properties.loweredMobVisibility missing unsure: the mob_visibility component is not read by Horizon's mob targeting
88 Item.Properties.finalizeInitializer skip:data registration builder
89 Item.TooltipContext.of skip:java tooltip context factory; Horizon passes the level and player to the tooltip functions
90 ItemStack.validateStrict skip:java codec-side validation of components and stack size
91 ItemStack.hasNonDefault skip:other component presence query; Horizon reads stack fields directly
92 ItemStack.validateComponents skip:java codec-side validation
93 ItemStack.validateContainedItemSizes skip:java codec-side validation
94 ItemStack.getDamageValue skip:other field accessor; Horizon keeps damage on the stack
95 ItemStack.setDamageValue skip:other field write
96 ItemStack.isBroken inline crates/horizon-client/src/game.rs::Game::damage_held the break test (damage at or over max) is in damage_held
97 ItemStack.nextDamageWillBreak inline crates/horizon-client/src/game/trident.rs::Game::use_trident gap: minor: only the trident's check is ported here
98 ItemStack.processDurabilityChange port crates/horizon-client/src/game/enchant_effects.rs::Game::durability_loss the Unbreaking-adjusted loss
99 ItemStack.applyDamage port crates/horizon-client/src/game.rs::Game::damage_held gap: minor: no item durability advancement trigger fires
100 ItemStack.hurtAndConvertOnBreak missing unsure: a carrot or fungus on a stick that breaks should become a fishing rod; no conversion was found
101 ItemStack.hurtEnemy port crates/horizon-client/src/game/mace.rs::Game::weapon_wear the per-hit durability loss of a weapon
102 ItemStack.interactLivingEntity port crates/horizon-client/src/game.rs::Game::interact_entity equip-on-interact is in the mob paths (nautili.rs, ghasts.rs)
103 ItemStack.copy skip:java value copy
104 ItemStack.copyWithCount skip:java value copy with a count
105 ItemStack.transmuteCopyIgnoreEmpty port crates/horizon-items/src/item_data.rs::ItemStack::transmute keeps the components, changes the item
106 ItemStack.listMatches skip:java element-wise list equality for CraftingInput; Horizon compares recipe inputs directly
107 ItemStack.matchesIgnoringComponents port crates/horizon-items/src/item_data.rs::ItemStack::same_item_same_components gap: minor: no predicate for ignored component types
108 ItemStack.lenientOptionalFieldOf skip:java codec helper
109 ItemStack.hashItemAndComponents skip:java hash for collections
110 ItemStack.hashStackList skip:java hash for collections
111 ItemStack.onCraftedBy inline crates/horizon-client/src/game.rs::Game::click_inventory gap: minor: the crafted statistic is added only on the inventory grid craft path here
112 ItemStack.set skip:other component write; Horizon stores component data in typed fields
113 ItemStack.update skip:java functional update helper
114 ItemStack.applyComponentsAndValidate missing unsure: a validated component patch has no single Horizon counterpart; /item modify is a separate path
115 ItemStack.getStyledHoverName port crates/horizon-client/src/game/stations.rs::Game::stack_hover_name gap: minor: plain text; the rarity colour and italic style are not applied here
116 ItemStack.addToTooltip port crates/horizon-client/src/item_tooltip.rs::lines
117 ItemStack.addUnitComponentToTooltip inline crates/horizon-client/src/game/stations.rs::Game::stack_tooltip_lines unit lines such as unbreakable, gated by the tooltip display
118 ItemStack.canPlaceOnBlockInAdventureMode missing player: in adventure mode a block can be placed only when the held item's can_place_on list allows it; Horizon does not read that component
119 ItemStack.canBreakBlockInAdventureMode missing player: in adventure mode a block can be broken only when the held item's can_break list allows it; Horizon does not read that component
120 ItemStack.getDamageSource missing unsure: a stack's damage_type component is not read when a weapon hits; no Horizon reader found
121 ItemStackTemplate.fromNonEmptyStack port crates/horizon-items/src/item_data.rs::template_tag stack to template tag
122 ItemStackTemplate.withCount skip:java record copy with a new count
123 ItemStackTemplate.apply port crates/horizon-assets/src/item_model.rs::stack_from_template
124 ItemUtils.onContainerDestroyed missing unsure: destroyed container items do not spill their contents; see BlockItem.onDestroyed
125 Items.registerBlock skip:data item registry bootstrap
126 Items.registerItem skip:data item registry bootstrap
127 JukeboxSong.hasFinished port crates/horizon-items/src/items.rs::Song::finished
128 JukeboxSongPlayer.setSongWithoutPlaying missing unsure: no load path restores a jukebox's song start tick
129 JukeboxSongPlayer.play port crates/horizon-client/src/game/jukebox.rs::Game::start_song the song starts at the jukebox with its sound
130 JukeboxSongPlayer.shouldEmitJukeboxPlayingEvent inline crates/horizon-client/src/game/jukebox.rs::Game::tick_jukebox
131 JukeboxSongPlayer.spawnMusicParticles inline crates/horizon-client/src/game/jukebox.rs::Game::tick_jukebox the note particle is emitted in tick_jukebox
132 LeadItem.bindPlayerMobs port crates/horizon-client/src/game/leads.rs::Game::interact_knot
133 MaceItem.createAttributes skip:data attribute modifiers come from the item data
134 MaceItem.calculateImpactPosition inline crates/horizon-client/src/game/mace.rs::Game::mace_hurt_enemy the earlier impact below the player is kept
135 MaceItem.knockbackPredicate port crates/horizon-client/src/game/mace.rs::Game::smash_knockback the nearby entity filter for the smash
136 MapItem.create port crates/horizon-client/src/game/maps.rs::Game::register_exploration_maps
137 MapItem.createNewSavedData port crates/horizon-client/src/game/maps.rs::MapData::fresh
138 MapItem.getCorrectStateForFluidBlock inline crates/horizon-client/src/game/maps.rs::Game::update_map the map colour pass
139 MapItem.inventoryTick port crates/horizon-client/src/game/maps.rs::Game::tick_maps
140 MapItem.lockMap port crates/horizon-client/src/menu.rs::Menu::map_crafted the lock branch of the post processing
141 MapItem.useOn missing player: using a map on a banner block should toggle that banner's marker on the map; Horizon has no banner toggle
142 MobBucketItem.emptyContents port crates/horizon-world/src/level/buckets.rs::Sim::bucket_empty the MobWater and Nothing contents
143 PotionItem.getDefaultInstance skip:data default stack data
144 PotionItem.useOn missing player: a water bottle used on a block that turns to mud should make mud; no such conversion was found in potions.rs
145 PotionItem.getName port crates/horizon-client/src/game/stations.rs::Game::stack_hover_name potion name from the contents
146 ProjectileItem.DispenseConfig.Builder.build inline crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile per-item dispense config
147 ProjectileWeaponItem.getHeldProjectile port crates/horizon-client/src/game/crossbow.rs::Game::projectile_slot offhand first, then the held slot
148 ProjectileWeaponItem.createProjectile inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the arrow from the ammo, with the weapon's piercing
149 ShieldItem.getName missing player: a shield with a banner base colour is named after that colour; Horizon names every shield the same
+139
View File
@@ -0,0 +1,139 @@
SmithingTemplateItem.createArmorTrimTemplate inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: the empty template slot cycles the armour icons in vanilla (SmithingScreen); Horizon draws one fixed netherite icon, and the additions slot gets no icon
SmithingTemplateItem.createNetheriteUpgradeTemplate inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: no cycling tool and armour icons and no ingot icon for the additions slot; Horizon draws one fixed netherite icon in the template slot
SmithingTemplateItem.createNetheriteUpgradeIconList missing player: an empty template slot in the smithing table does not cycle through the 11 tool and armour icons (SmithingScreen ticks baseIcon); Horizon shows one fixed netherite icon
SpawnEggItem.spawnMob port crates/horizon-client/src/game/creatures.rs::Game::use_spawn_egg gap: minor: no ENTITY_PLACE game event (sculk sensors do not hear the egg); consumes the egg and spawns the mob on the clicked face
SpawnEggItem.getType port crates/horizon-client/src/game/creatures.rs::Game::use_spawn_egg kind taken from the item id suffix (*_spawn_egg), not an ENTITY_DATA component
TridentItem.createAttributes skip:data attack damage 8 and attack speed -2.9 are item table data (horizon-items attack_speed modifier)
TridentItem.asProjectile skip:other ProjectileItem override that no code calls: no dispenser behaviour is registered for the trident in vanilla
WindChargeItem.asProjectile port crates/horizon-client/src/game/dispenser.rs::Game::shoot_projectile_item gap: minor: aims with the level random as vanilla does, then shoots with the dispenser uncertainty (6.67); vanilla's shoot is a no-op for wind charges, so the spread is wider in Horizon
WindChargeItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile position function, uncertainty 6.6666665, power 1.0 and event 1051 match
alchemy/Potion.hasInstantEffects inline crates/horizon-client/src/game/potions.rs::Game::splash the instant check is written inline for the splash level event and sound (2007/1054 vs 2002/1053)
PotionContents.createItemStack port crates/horizon-items/src/item_data.rs::ItemStack::with_potion item stack plus the potion in its data
PotionContents.is inline crates/horizon-client/src/cauldron.rs::interact gap: minor: only the water check is here; other callers compare the potion id themselves (dispenser.rs, Enderman)
PotionContents.isPotionWithoutCustomEffects inline crates/horizon-client/src/effects.rs::PlayerEffects::potion_effects Horizon has no custom effects on a potion stack, so this is always the potion alone
PotionContents.getAllEffects port crates/horizon-client/src/effects.rs::PlayerEffects::potion_effects gap: minor: the potion's own effect list only; no custom effects
PotionContents.withPotion port crates/horizon-items/src/item_data.rs::ItemStack::with_potion sets the potion and keeps the other data
PotionContents.withEffectAdded inline crates/horizon-client/src/game/dragon.rs::Game::tick_breath gap: minor: the dragon fireball cloud's instant damage (12) is hard-coded in the tick, not an added effect; the breath cloud's 6 is the same path
PotionContents.getColorOptional port crates/horizon-client-core/src/potions.rs::potion_color amplifier-weighted mix; base colour when there are no effects
PotionContents.hasEffects inline crates/horizon-client/src/game/potions.rs::Game::splash a lingering cloud is made only when the potion has effects
PotionContents.getPotionDescription port crates/horizon-client/src/brewing.rs::tooltip effect name with potency; joined with a space, not the potion.withAmplifier translation
PotionContents.onConsume port crates/horizon-client/src/game/potions.rs::Game::tick_drinking gap: minor: duration scale is always 1.0; POTION_DURATION_SCALE is not read
AttackRange.defaultFor inline crates/horizon-client/src/game/hand.rs::attack_range_contains gap: minor: fixed reach 0 to 3 with a 0.3 margin; no entity interaction range attribute
AttackRange.getClosesetHit port crates/horizon-client/src/game/hand.rs::GameHands::hit gap: minor: uses the crosshair's entity or block, not the closest hit along the attack range
AttackRange.effectiveMaxRange inline crates/horizon-client/src/game/hand.rs::attack_range_contains creative or survival reach; the mob factor is not used
BlockItemStateProperties.with port crates/horizon-client/src/game/block_items.rs::Game::picked_stack gap: minor: writes only honey_level for beehives and bee nests (BeehiveBlock.getCloneItemStack)
BlockItemStateProperties.get port crates/horizon-client/src/item_tooltip.rs::honey_line reads honey_level only
BlockItemStateProperties.apply port crates/horizon-client/src/game/block_items.rs::Game::apply_item_block_state sets the item's block state properties on the placed block
BlockItemStateProperties.updateState inline crates/horizon-client/src/game/block_items.rs::Game::apply_item_block_state the per-property set, only for properties the block has
BlocksAttacks.onBlocked port crates/horizon-client/src/game/shield.rs::Game::after_block gap: minor: block sound plays on this client only
BlocksAttacks.hurtBlockingItem port crates/horizon-client/src/game/shield.rs::Game::after_block item damage by the damage function, shield breaks at max damage; gap: minor: no ITEM_USED stat
BlocksAttacks.disableBlockingForTicks port crates/horizon-client/src/game/shield.rs::Game::blocked_by_attacker disable seconds times disable scale, rounded to ticks, sets the item cooldown
BlocksAttacks.resolveBlockedDamage port crates/horizon-world/src/blocking_rules.rs::BlockingRules::resolve damage reductions by angle and damage type
BundleContents.computeContentWeight port crates/horizon-items/src/bundle.rs::contents_weight sum of item weights times counts; nested bundles add 1/16
BundleContents.getNumberOfItemsToShow port crates/horizon-items/src/bundle.rs::Contents::shown_count grid rule with 11 or 12 cells and the last-row gap
BundleContents.getSelectedItem port crates/horizon-items/src/bundle.rs::Contents::selected returns the selected index; the stack is items() at that index
BundleContents.copyWithContents skip:other no callers in the vanilla source
BundleContents.asMutable port crates/horizon-items/src/bundle.rs::Contents::of contents, weight and selection copied into the working state
BundleContents.equals skip:java value equality; Horizon compares the item data directly
BundleContents.Mutable.clearItems skip:other no callers in the vanilla source
BundleContents.Mutable.findStackIndexWithinRange inline crates/horizon-items/src/bundle.rs::Contents::try_insert the merge search over all stacks, only for stackable undamaged items
BundleContents.Mutable.getMaxAmountToAdd port crates/horizon-items/src/bundle.rs::Contents::room_for remaining weight over the item's weight, rounded down, at least 0
BundleContents.Mutable.tryInsert port crates/horizon-items/src/bundle.rs::Contents::try_insert inserts what fits to the front, merged with its kind
BundleContents.Mutable.tryTransfer port crates/horizon-client/src/menu/bundle.rs::Menu::carried_bundle_click the slot's stack moves in as far as it fits; the slot's own take rules apply
BundleContents.Mutable.toggleSelectedItem port crates/horizon-items/src/bundle.rs::toggle_selected selects the index, or clears the selection when it is selected already or out of range
BundleContents.Mutable.indexIsOutsideAllowedBounds inline crates/horizon-items/src/bundle.rs::toggle_selected the bounds test is the inside check
BundleContents.Mutable.getStackedWeight port crates/horizon-items/src/bundle.rs::Weight::times weight times a count
BundleContents.Mutable.setItem missing minor: a slot write into a bundle (container setItem, reached by /item replace) skips the weight limit and merge; Horizon's /item command has no bundle handling
BundleContents.Mutable.addSlotWithItem missing minor: adding a new bundle slot (container path, /item) skips the weight check; Horizon's /item command has no bundle handling
BundleContents.Mutable.getWeightWithAddedItems inline crates/horizon-items/src/bundle.rs::Contents::try_insert the weight after adding must stay at or below one, computed from room_for
BundleContents.Mutable.mergeIdenticalStacks inline crates/horizon-items/src/bundle.rs::Contents::try_insert gap: minor: merges on insert only; no flatten pass for container writes
BundleContents.Mutable.toImmutable port crates/horizon-items/src/bundle.rs::Contents::store writes the contents and selection back into the component
ChargedProjectiles.ofNonEmpty port crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow loads the drawn ammo into the crossbow (Multishot draws three); empty stacks are not filtered here
ChargedProjectiles.contains port crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the firework rocket check that sets the shot power
ChargedProjectiles.copyWithContents skip:other no callers in the vanilla source
ChargedProjectiles.asMutable skip:other no callers in the vanilla source
ChargedProjectiles.Mutable.addSlotWithItem skip:other no callers in the vanilla source
ChargedProjectiles.Mutable.toImmutable skip:other no callers in the vanilla source
Consumable.Builder.build port crates/horizon-items/src/items.rs::Items::load_with reads consume_seconds (1.6 default), the animation, sound and particles from the item JSON; effects are added separately
DyedItemColor.getOrDefault port crates/horizon-assets/src/item_model.rs::Resolve::tint the dyed_color component with the default tint (leather) when unset
FireworkExplosion.getColorName port crates/horizon-client/src/item_tooltip.rs::firework_lines dye name from the firework colour; unknown colours read as custom colour
FireworkExplosion.withFadeColors port crates/horizon-client/src/crafting.rs::Special::assemble sets the fade colours of the star-fade recipe result
ItemContainerContents.fromSlots port crates/horizon-items/src/item_data.rs::decode_components reads the container slot list from its NBT; only non-empty slots are kept as pairs
ItemContainerContents.fromItems port crates/horizon-client/src/block_entity_item.rs::collect writes the non-empty slots of the container into the item's components
ItemContainerContents.findLastNonEmptySlot skip:java trims trailing empty slots; Horizon keeps only the non-empty slot pairs
ItemContainerContents.asSlots port crates/horizon-items/src/item_data.rs::components_tag writes the non-empty slots as minecraft:container entries
ItemContainerContents.createStackFromSlot port crates/horizon-client/src/block_entity_item.rs::place reads a slot's stack into the placed container
ItemContainerContents.copyInto port crates/horizon-client/src/block_entity_item.rs::place copies the container items into the placed block entity
ItemContainerContents.itemCopies skip:other no callers in the vanilla source
ItemContainerContents.asMutable skip:other no callers in the vanilla source
ItemContainerContents.equals skip:java value equality; Horizon compares the item data directly
KineticWeapon.makeLocalHitSound port crates/horizon-client/src/game/spear.rs::Game::kinetic_hit_feedback the local hit sound, at most once per ten ticks per entity
KineticWeapon.computeDamageUseDuration missing unsure: the use duration (delay plus the damage window) is not computed in Horizon's use_spear or spear_tick; the windows are checked one by one
KineticWeapon.Condition.test port crates/horizon-client/src/spear.rs::Condition::test tick, attacker speed and relative speed against the scaled minimums
PiercingWeapon.makeHitSound port crates/horizon-client/src/game/spear.rs::Game::jab gap: minor: the hit sound plays at this player's feet only; vanilla plays it for everyone nearby
ResolvableProfile.createUnresolved port crates/horizon-client/src/skins.rs::parse_profile keeps a name or id as the unresolved key, resolved later
ResolvableProfile.createPartialProfile port crates/horizon-client/src/skins.rs::parse_profile id, else the name's offline UUID, else nil
ResolvableProfile.Dynamic.hashCode skip:java hash of the key and skin patch; Horizon compares them directly
ResolvableProfile.Static.name skip:other no callers in the vanilla source
ResolvableProfile.Static.equals skip:java value equality
ResolvableProfile.Static.hashCode skip:java hash for collections
Tool.Rule.minesAndDrops port crates/horizon-items/src/items.rs::Items::load_with rule read from the item JSON: speed and correct_for_drops set to true
TooltipDisplay.withHidden port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: minor: only the /item modify toggle_tooltips path; the loot-table toggle function is not ported, and the raid banner's hidden pattern is read in item_tooltip shows()
WrittenBookContent.craftCopy port crates/horizon-client/src/crafting.rs::Special::assemble book copy: generation plus one, pages kept
WrittenBookContent.resolveForItem missing minor: selectors in a written book's text (@p and so on) are not resolved when the book reaches a player; the raw text shows
WrittenBookContent.resolve missing minor: no selector resolution for written book pages; the raw text shows
WrittenBookContent.markResolved missing minor: resolved flag is not kept, so a book is never marked as resolved
WrittenBookContent.resolvePage missing minor: no per-page selector resolution, and no drop of pages over 32767 characters
WrittenBookContent.isPageTooLarge missing minor: no check that a resolved page stays under the 32767 character limit
WrittenBookContent.getPages port crates/horizon-client/src/game/books.rs::view_pages gap: minor: returns the stored pages; the filtered-text choice (filterEnabled) is not modelled
WrittenBookContent.withReplacedPages missing minor: loot function set_written_book_pages is not in the loot modifiers, so a loot book gets no pages
BookCloningRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches BookCloning arm: one written book within the allowed generations, plus material
BookCloningRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble copies the book with generation plus one; material count sets the copies
BookCloningRecipe.getRemainingItems port crates/horizon-client/src/crafting.rs::Recipes::remainders the first written book is kept as one copy (BookCloning arm); the crafting remainder item is kept too
CraftingInput.getItem port crates/horizon-client/src/crafting.rs::Input::get reads the grid cell by x and y instead of a slot index
CraftingInput.equals skip:java value equality
CraftingInput.hashCode skip:java hash for collections
Ingredient.testOptionalIngredient port crates/horizon-client/src/crafting.rs::Ingredient::test the caller treats a missing ingredient as an empty slot
Ingredient.equals skip:java value equality
Ingredient.of port crates/horizon-client/src/crafting.rs::Ingredient::of ingredient from item ids
Ingredient.displayForSingleItem skip:other no callers in the vanilla source
Ingredient.getSingleItem missing unsure: returns the one item of a single-item ingredient; no Horizon function found in this pass
PlacementInfo.create port crates/horizon-client/src/crafting.rs::Placement::of placement for one ingredient, none when it is empty
PotionIngredient.test port crates/horizon-client/src/brewing.rs::PotionIngredient::test item id and the potion filter
PotionIngredient.of port crates/horizon-client/src/brewing.rs::PotionIngredient::parse built from the recipe JSON, with the potion filter
PotionIngredient.isPotionInput port crates/horizon-client/src/brewing.rs::Brewing::load bottle input set (Brewing.inputs) built at load
Recipe.BookInfo.mapCodec skip:java codec
RecipeManager.finalizeRecipeLoading port crates/horizon-client/src/crafting.rs::Recipes::load loads the recipes and their placements at load
RecipeManager.filterDisabled missing minor: recipes whose ingredients sit behind a disabled feature flag are not hidden; Horizon's recipe loading has no feature flag check
RecipeManager.isIngredientEnabled missing minor: no feature flag check for ingredients in recipe loading
RecipeManager.byKeyTyped port crates/horizon-client/src/crafting.rs::Recipes::recipe_matches gap: minor: lookup by id; no recipe type check
RecipeManager.listDisplaysForRecipe port crates/horizon-client/src/recipe_book.rs::Book::entry the entry holds the recipe's displays
RecipeManager.IngredientCollector.accept skip:other collects ingredients for the synced property sets; Horizon's client reads its own recipe and brewing tables
RepairItemRecipe.canCombine port crates/horizon-client/src/crafting.rs::Special::repair_pair two items of the same kind that can combine
RepairItemRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble repair arm: combined durability and the bonus
ShapedRecipePattern.of port crates/horizon-client/src/crafting.rs::Recipes::load pattern read from the recipe JSON at load
ShapedRecipePattern.unpack port crates/horizon-client/src/crafting.rs::Recipes::load pattern cells read at load, empty where the key is blank
ShapedRecipePattern.firstNonEmpty port crates/horizon-client/src/crafting.rs::shrink trims empty rows and columns at both ends
ShapedRecipePattern.lastNonEmpty port crates/horizon-client/src/crafting.rs::shrink trims empty rows and columns at both ends
ShapedRecipePattern.matches port crates/horizon-client/src/crafting.rs::Recipes::assemble_if_matches shaped arm: exact size, cell tests, mirrored match
SmithingTransformRecipe.display missing unsure: the recipe book slot displays for a smithing transform are not built in Horizon's recipe book; the smithing table uses StationRecipes::smithing_result
SmithingTrimRecipe.display missing unsure: the recipe book slot displays for a smithing trim are not built in Horizon's recipe book; the smithing table uses StationRecipes::smithing_result
TransmuteRecipe.computeResultSize port crates/horizon-client/src/crafting.rs::Special::assemble result count plus the material count when it is added
TransmuteRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches Transmute arm: one input and the material list
TransmuteRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble Transmute arm: result with the input's components
TransmuteRecipe.resultDisplay port crates/horizon-client/src/recipe_book.rs::RecipeIndex::result the recipe's result id
TransmuteRecipe.createPlacementInfo port crates/horizon-client/src/crafting.rs::Recipes::placement the placement of the input and the materials
RecipeDisplay.isEnabled missing minor: no feature flag check, so a display for a disabled feature still shows
SlotDisplay.applyDemoTransformation port crates/horizon-client/src/stations.rs::StationRecipes::trim_demo gap: minor: only the trim demo draws (up to 256 tries); the dyed demo is not modelled
SlotDisplay.AnyFuel.resolve missing unsure: no any-fuel display list found in Horizon's recipe book
SlotDisplay.Composite.resolve missing unsure: no composite display list found in Horizon's recipe book
SlotDisplay.DyedSlotDemo.resolve missing unsure: no dyed demo display found in Horizon's recipe book
SlotDisplay.ItemSlotDisplay.resolve port crates/horizon-client/src/recipe_book.rs::Book::items_of the item of a single-item slot
SlotDisplay.ItemStackSlotDisplay.resolve port crates/horizon-client/src/recipe_book.rs::Book::items_of gap: minor: keeps item ids only; the stack's components are not carried into the display
SlotDisplay.OnlyWithComponent.resolve missing unsure: no display that filters by an item component found in Horizon's recipe book
SlotDisplay.SmithingTrimDemoSlotDisplay.resolve port crates/horizon-client/src/stations.rs::StationRecipes::trim_demo a random base trimmed by a random material
SlotDisplay.WithAnyPotion.resolve missing unsure: no any-potion display list found in Horizon's recipe book
SlotDisplay.WithRemainder.resolve missing unsure: no remainder display found in Horizon's recipe book; remainders exist in Recipes::remainders for play
SlotDisplay.WithRemainder.isEnabled missing minor: no feature flag check for the remainder display
BlockPlaceContext.at port crates/horizon-world/src/level/place.rs::Sim::placement_at the placement position and face from the clicked block
UseOnContext.isSecondaryUseActive port crates/horizon-client/src/game.rs::Game::use_hand the shift key sets the context's sneaking flag
1 SmithingTemplateItem.createArmorTrimTemplate inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: the empty template slot cycles the armour icons in vanilla (SmithingScreen); Horizon draws one fixed netherite icon, and the additions slot gets no icon
2 SmithingTemplateItem.createNetheriteUpgradeTemplate inline crates/horizon-client/src/game/stations.rs::Game::draw_station gap: player: no cycling tool and armour icons and no ingot icon for the additions slot; Horizon draws one fixed netherite icon in the template slot
3 SmithingTemplateItem.createNetheriteUpgradeIconList missing player: an empty template slot in the smithing table does not cycle through the 11 tool and armour icons (SmithingScreen ticks baseIcon); Horizon shows one fixed netherite icon
4 SpawnEggItem.spawnMob port crates/horizon-client/src/game/creatures.rs::Game::use_spawn_egg gap: minor: no ENTITY_PLACE game event (sculk sensors do not hear the egg); consumes the egg and spawns the mob on the clicked face
5 SpawnEggItem.getType port crates/horizon-client/src/game/creatures.rs::Game::use_spawn_egg kind taken from the item id suffix (*_spawn_egg), not an ENTITY_DATA component
6 TridentItem.createAttributes skip:data attack damage 8 and attack speed -2.9 are item table data (horizon-items attack_speed modifier)
7 TridentItem.asProjectile skip:other ProjectileItem override that no code calls: no dispenser behaviour is registered for the trident in vanilla
8 WindChargeItem.asProjectile port crates/horizon-client/src/game/dispenser.rs::Game::shoot_projectile_item gap: minor: aims with the level random as vanilla does, then shoots with the dispenser uncertainty (6.67); vanilla's shoot is a no-op for wind charges, so the spread is wider in Horizon
9 WindChargeItem.createDispenseConfig port crates/horizon-client/src/game/dispenser.rs::Game::dispense_projectile position function, uncertainty 6.6666665, power 1.0 and event 1051 match
10 alchemy/Potion.hasInstantEffects inline crates/horizon-client/src/game/potions.rs::Game::splash the instant check is written inline for the splash level event and sound (2007/1054 vs 2002/1053)
11 PotionContents.createItemStack port crates/horizon-items/src/item_data.rs::ItemStack::with_potion item stack plus the potion in its data
12 PotionContents.is inline crates/horizon-client/src/cauldron.rs::interact gap: minor: only the water check is here; other callers compare the potion id themselves (dispenser.rs, Enderman)
13 PotionContents.isPotionWithoutCustomEffects inline crates/horizon-client/src/effects.rs::PlayerEffects::potion_effects Horizon has no custom effects on a potion stack, so this is always the potion alone
14 PotionContents.getAllEffects port crates/horizon-client/src/effects.rs::PlayerEffects::potion_effects gap: minor: the potion's own effect list only; no custom effects
15 PotionContents.withPotion port crates/horizon-items/src/item_data.rs::ItemStack::with_potion sets the potion and keeps the other data
16 PotionContents.withEffectAdded inline crates/horizon-client/src/game/dragon.rs::Game::tick_breath gap: minor: the dragon fireball cloud's instant damage (12) is hard-coded in the tick, not an added effect; the breath cloud's 6 is the same path
17 PotionContents.getColorOptional port crates/horizon-client-core/src/potions.rs::potion_color amplifier-weighted mix; base colour when there are no effects
18 PotionContents.hasEffects inline crates/horizon-client/src/game/potions.rs::Game::splash a lingering cloud is made only when the potion has effects
19 PotionContents.getPotionDescription port crates/horizon-client/src/brewing.rs::tooltip effect name with potency; joined with a space, not the potion.withAmplifier translation
20 PotionContents.onConsume port crates/horizon-client/src/game/potions.rs::Game::tick_drinking gap: minor: duration scale is always 1.0; POTION_DURATION_SCALE is not read
21 AttackRange.defaultFor inline crates/horizon-client/src/game/hand.rs::attack_range_contains gap: minor: fixed reach 0 to 3 with a 0.3 margin; no entity interaction range attribute
22 AttackRange.getClosesetHit port crates/horizon-client/src/game/hand.rs::GameHands::hit gap: minor: uses the crosshair's entity or block, not the closest hit along the attack range
23 AttackRange.effectiveMaxRange inline crates/horizon-client/src/game/hand.rs::attack_range_contains creative or survival reach; the mob factor is not used
24 BlockItemStateProperties.with port crates/horizon-client/src/game/block_items.rs::Game::picked_stack gap: minor: writes only honey_level for beehives and bee nests (BeehiveBlock.getCloneItemStack)
25 BlockItemStateProperties.get port crates/horizon-client/src/item_tooltip.rs::honey_line reads honey_level only
26 BlockItemStateProperties.apply port crates/horizon-client/src/game/block_items.rs::Game::apply_item_block_state sets the item's block state properties on the placed block
27 BlockItemStateProperties.updateState inline crates/horizon-client/src/game/block_items.rs::Game::apply_item_block_state the per-property set, only for properties the block has
28 BlocksAttacks.onBlocked port crates/horizon-client/src/game/shield.rs::Game::after_block gap: minor: block sound plays on this client only
29 BlocksAttacks.hurtBlockingItem port crates/horizon-client/src/game/shield.rs::Game::after_block item damage by the damage function, shield breaks at max damage; gap: minor: no ITEM_USED stat
30 BlocksAttacks.disableBlockingForTicks port crates/horizon-client/src/game/shield.rs::Game::blocked_by_attacker disable seconds times disable scale, rounded to ticks, sets the item cooldown
31 BlocksAttacks.resolveBlockedDamage port crates/horizon-world/src/blocking_rules.rs::BlockingRules::resolve damage reductions by angle and damage type
32 BundleContents.computeContentWeight port crates/horizon-items/src/bundle.rs::contents_weight sum of item weights times counts; nested bundles add 1/16
33 BundleContents.getNumberOfItemsToShow port crates/horizon-items/src/bundle.rs::Contents::shown_count grid rule with 11 or 12 cells and the last-row gap
34 BundleContents.getSelectedItem port crates/horizon-items/src/bundle.rs::Contents::selected returns the selected index; the stack is items() at that index
35 BundleContents.copyWithContents skip:other no callers in the vanilla source
36 BundleContents.asMutable port crates/horizon-items/src/bundle.rs::Contents::of contents, weight and selection copied into the working state
37 BundleContents.equals skip:java value equality; Horizon compares the item data directly
38 BundleContents.Mutable.clearItems skip:other no callers in the vanilla source
39 BundleContents.Mutable.findStackIndexWithinRange inline crates/horizon-items/src/bundle.rs::Contents::try_insert the merge search over all stacks, only for stackable undamaged items
40 BundleContents.Mutable.getMaxAmountToAdd port crates/horizon-items/src/bundle.rs::Contents::room_for remaining weight over the item's weight, rounded down, at least 0
41 BundleContents.Mutable.tryInsert port crates/horizon-items/src/bundle.rs::Contents::try_insert inserts what fits to the front, merged with its kind
42 BundleContents.Mutable.tryTransfer port crates/horizon-client/src/menu/bundle.rs::Menu::carried_bundle_click the slot's stack moves in as far as it fits; the slot's own take rules apply
43 BundleContents.Mutable.toggleSelectedItem port crates/horizon-items/src/bundle.rs::toggle_selected selects the index, or clears the selection when it is selected already or out of range
44 BundleContents.Mutable.indexIsOutsideAllowedBounds inline crates/horizon-items/src/bundle.rs::toggle_selected the bounds test is the inside check
45 BundleContents.Mutable.getStackedWeight port crates/horizon-items/src/bundle.rs::Weight::times weight times a count
46 BundleContents.Mutable.setItem missing minor: a slot write into a bundle (container setItem, reached by /item replace) skips the weight limit and merge; Horizon's /item command has no bundle handling
47 BundleContents.Mutable.addSlotWithItem missing minor: adding a new bundle slot (container path, /item) skips the weight check; Horizon's /item command has no bundle handling
48 BundleContents.Mutable.getWeightWithAddedItems inline crates/horizon-items/src/bundle.rs::Contents::try_insert the weight after adding must stay at or below one, computed from room_for
49 BundleContents.Mutable.mergeIdenticalStacks inline crates/horizon-items/src/bundle.rs::Contents::try_insert gap: minor: merges on insert only; no flatten pass for container writes
50 BundleContents.Mutable.toImmutable port crates/horizon-items/src/bundle.rs::Contents::store writes the contents and selection back into the component
51 ChargedProjectiles.ofNonEmpty port crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow loads the drawn ammo into the crossbow (Multishot draws three); empty stacks are not filtered here
52 ChargedProjectiles.contains port crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow the firework rocket check that sets the shot power
53 ChargedProjectiles.copyWithContents skip:other no callers in the vanilla source
54 ChargedProjectiles.asMutable skip:other no callers in the vanilla source
55 ChargedProjectiles.Mutable.addSlotWithItem skip:other no callers in the vanilla source
56 ChargedProjectiles.Mutable.toImmutable skip:other no callers in the vanilla source
57 Consumable.Builder.build port crates/horizon-items/src/items.rs::Items::load_with reads consume_seconds (1.6 default), the animation, sound and particles from the item JSON; effects are added separately
58 DyedItemColor.getOrDefault port crates/horizon-assets/src/item_model.rs::Resolve::tint the dyed_color component with the default tint (leather) when unset
59 FireworkExplosion.getColorName port crates/horizon-client/src/item_tooltip.rs::firework_lines dye name from the firework colour; unknown colours read as custom colour
60 FireworkExplosion.withFadeColors port crates/horizon-client/src/crafting.rs::Special::assemble sets the fade colours of the star-fade recipe result
61 ItemContainerContents.fromSlots port crates/horizon-items/src/item_data.rs::decode_components reads the container slot list from its NBT; only non-empty slots are kept as pairs
62 ItemContainerContents.fromItems port crates/horizon-client/src/block_entity_item.rs::collect writes the non-empty slots of the container into the item's components
63 ItemContainerContents.findLastNonEmptySlot skip:java trims trailing empty slots; Horizon keeps only the non-empty slot pairs
64 ItemContainerContents.asSlots port crates/horizon-items/src/item_data.rs::components_tag writes the non-empty slots as minecraft:container entries
65 ItemContainerContents.createStackFromSlot port crates/horizon-client/src/block_entity_item.rs::place reads a slot's stack into the placed container
66 ItemContainerContents.copyInto port crates/horizon-client/src/block_entity_item.rs::place copies the container items into the placed block entity
67 ItemContainerContents.itemCopies skip:other no callers in the vanilla source
68 ItemContainerContents.asMutable skip:other no callers in the vanilla source
69 ItemContainerContents.equals skip:java value equality; Horizon compares the item data directly
70 KineticWeapon.makeLocalHitSound port crates/horizon-client/src/game/spear.rs::Game::kinetic_hit_feedback the local hit sound, at most once per ten ticks per entity
71 KineticWeapon.computeDamageUseDuration missing unsure: the use duration (delay plus the damage window) is not computed in Horizon's use_spear or spear_tick; the windows are checked one by one
72 KineticWeapon.Condition.test port crates/horizon-client/src/spear.rs::Condition::test tick, attacker speed and relative speed against the scaled minimums
73 PiercingWeapon.makeHitSound port crates/horizon-client/src/game/spear.rs::Game::jab gap: minor: the hit sound plays at this player's feet only; vanilla plays it for everyone nearby
74 ResolvableProfile.createUnresolved port crates/horizon-client/src/skins.rs::parse_profile keeps a name or id as the unresolved key, resolved later
75 ResolvableProfile.createPartialProfile port crates/horizon-client/src/skins.rs::parse_profile id, else the name's offline UUID, else nil
76 ResolvableProfile.Dynamic.hashCode skip:java hash of the key and skin patch; Horizon compares them directly
77 ResolvableProfile.Static.name skip:other no callers in the vanilla source
78 ResolvableProfile.Static.equals skip:java value equality
79 ResolvableProfile.Static.hashCode skip:java hash for collections
80 Tool.Rule.minesAndDrops port crates/horizon-items/src/items.rs::Items::load_with rule read from the item JSON: speed and correct_for_drops set to true
81 TooltipDisplay.withHidden port crates/horizon-client/src/game/commands/items.rs::Game::apply_item_modifier gap: minor: only the /item modify toggle_tooltips path; the loot-table toggle function is not ported, and the raid banner's hidden pattern is read in item_tooltip shows()
82 WrittenBookContent.craftCopy port crates/horizon-client/src/crafting.rs::Special::assemble book copy: generation plus one, pages kept
83 WrittenBookContent.resolveForItem missing minor: selectors in a written book's text (@p and so on) are not resolved when the book reaches a player; the raw text shows
84 WrittenBookContent.resolve missing minor: no selector resolution for written book pages; the raw text shows
85 WrittenBookContent.markResolved missing minor: resolved flag is not kept, so a book is never marked as resolved
86 WrittenBookContent.resolvePage missing minor: no per-page selector resolution, and no drop of pages over 32767 characters
87 WrittenBookContent.isPageTooLarge missing minor: no check that a resolved page stays under the 32767 character limit
88 WrittenBookContent.getPages port crates/horizon-client/src/game/books.rs::view_pages gap: minor: returns the stored pages; the filtered-text choice (filterEnabled) is not modelled
89 WrittenBookContent.withReplacedPages missing minor: loot function set_written_book_pages is not in the loot modifiers, so a loot book gets no pages
90 BookCloningRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches BookCloning arm: one written book within the allowed generations, plus material
91 BookCloningRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble copies the book with generation plus one; material count sets the copies
92 BookCloningRecipe.getRemainingItems port crates/horizon-client/src/crafting.rs::Recipes::remainders the first written book is kept as one copy (BookCloning arm); the crafting remainder item is kept too
93 CraftingInput.getItem port crates/horizon-client/src/crafting.rs::Input::get reads the grid cell by x and y instead of a slot index
94 CraftingInput.equals skip:java value equality
95 CraftingInput.hashCode skip:java hash for collections
96 Ingredient.testOptionalIngredient port crates/horizon-client/src/crafting.rs::Ingredient::test the caller treats a missing ingredient as an empty slot
97 Ingredient.equals skip:java value equality
98 Ingredient.of port crates/horizon-client/src/crafting.rs::Ingredient::of ingredient from item ids
99 Ingredient.displayForSingleItem skip:other no callers in the vanilla source
100 Ingredient.getSingleItem missing unsure: returns the one item of a single-item ingredient; no Horizon function found in this pass
101 PlacementInfo.create port crates/horizon-client/src/crafting.rs::Placement::of placement for one ingredient, none when it is empty
102 PotionIngredient.test port crates/horizon-client/src/brewing.rs::PotionIngredient::test item id and the potion filter
103 PotionIngredient.of port crates/horizon-client/src/brewing.rs::PotionIngredient::parse built from the recipe JSON, with the potion filter
104 PotionIngredient.isPotionInput port crates/horizon-client/src/brewing.rs::Brewing::load bottle input set (Brewing.inputs) built at load
105 Recipe.BookInfo.mapCodec skip:java codec
106 RecipeManager.finalizeRecipeLoading port crates/horizon-client/src/crafting.rs::Recipes::load loads the recipes and their placements at load
107 RecipeManager.filterDisabled missing minor: recipes whose ingredients sit behind a disabled feature flag are not hidden; Horizon's recipe loading has no feature flag check
108 RecipeManager.isIngredientEnabled missing minor: no feature flag check for ingredients in recipe loading
109 RecipeManager.byKeyTyped port crates/horizon-client/src/crafting.rs::Recipes::recipe_matches gap: minor: lookup by id; no recipe type check
110 RecipeManager.listDisplaysForRecipe port crates/horizon-client/src/recipe_book.rs::Book::entry the entry holds the recipe's displays
111 RecipeManager.IngredientCollector.accept skip:other collects ingredients for the synced property sets; Horizon's client reads its own recipe and brewing tables
112 RepairItemRecipe.canCombine port crates/horizon-client/src/crafting.rs::Special::repair_pair two items of the same kind that can combine
113 RepairItemRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble repair arm: combined durability and the bonus
114 ShapedRecipePattern.of port crates/horizon-client/src/crafting.rs::Recipes::load pattern read from the recipe JSON at load
115 ShapedRecipePattern.unpack port crates/horizon-client/src/crafting.rs::Recipes::load pattern cells read at load, empty where the key is blank
116 ShapedRecipePattern.firstNonEmpty port crates/horizon-client/src/crafting.rs::shrink trims empty rows and columns at both ends
117 ShapedRecipePattern.lastNonEmpty port crates/horizon-client/src/crafting.rs::shrink trims empty rows and columns at both ends
118 ShapedRecipePattern.matches port crates/horizon-client/src/crafting.rs::Recipes::assemble_if_matches shaped arm: exact size, cell tests, mirrored match
119 SmithingTransformRecipe.display missing unsure: the recipe book slot displays for a smithing transform are not built in Horizon's recipe book; the smithing table uses StationRecipes::smithing_result
120 SmithingTrimRecipe.display missing unsure: the recipe book slot displays for a smithing trim are not built in Horizon's recipe book; the smithing table uses StationRecipes::smithing_result
121 TransmuteRecipe.computeResultSize port crates/horizon-client/src/crafting.rs::Special::assemble result count plus the material count when it is added
122 TransmuteRecipe.matches port crates/horizon-client/src/crafting.rs::Special::matches Transmute arm: one input and the material list
123 TransmuteRecipe.assemble port crates/horizon-client/src/crafting.rs::Special::assemble Transmute arm: result with the input's components
124 TransmuteRecipe.resultDisplay port crates/horizon-client/src/recipe_book.rs::RecipeIndex::result the recipe's result id
125 TransmuteRecipe.createPlacementInfo port crates/horizon-client/src/crafting.rs::Recipes::placement the placement of the input and the materials
126 RecipeDisplay.isEnabled missing minor: no feature flag check, so a display for a disabled feature still shows
127 SlotDisplay.applyDemoTransformation port crates/horizon-client/src/stations.rs::StationRecipes::trim_demo gap: minor: only the trim demo draws (up to 256 tries); the dyed demo is not modelled
128 SlotDisplay.AnyFuel.resolve missing unsure: no any-fuel display list found in Horizon's recipe book
129 SlotDisplay.Composite.resolve missing unsure: no composite display list found in Horizon's recipe book
130 SlotDisplay.DyedSlotDemo.resolve missing unsure: no dyed demo display found in Horizon's recipe book
131 SlotDisplay.ItemSlotDisplay.resolve port crates/horizon-client/src/recipe_book.rs::Book::items_of the item of a single-item slot
132 SlotDisplay.ItemStackSlotDisplay.resolve port crates/horizon-client/src/recipe_book.rs::Book::items_of gap: minor: keeps item ids only; the stack's components are not carried into the display
133 SlotDisplay.OnlyWithComponent.resolve missing unsure: no display that filters by an item component found in Horizon's recipe book
134 SlotDisplay.SmithingTrimDemoSlotDisplay.resolve port crates/horizon-client/src/stations.rs::StationRecipes::trim_demo a random base trimmed by a random material
135 SlotDisplay.WithAnyPotion.resolve missing unsure: no any-potion display list found in Horizon's recipe book
136 SlotDisplay.WithRemainder.resolve missing unsure: no remainder display found in Horizon's recipe book; remainders exist in Recipes::remainders for play
137 SlotDisplay.WithRemainder.isEnabled missing minor: no feature flag check for the remainder display
138 BlockPlaceContext.at port crates/horizon-world/src/level/place.rs::Sim::placement_at the placement position and face from the clicked block
139 UseOnContext.isSecondaryUseActive port crates/horizon-client/src/game.rs::Game::use_hand the shift key sets the context's sneaking flag
+140
View File
@@ -0,0 +1,140 @@
Enchantment.getSlotItems inline crates/horizon-world/src/loot.rs::LootData::enchantment_level slot filter and item lookup folded into the best-level loop
Enchantment.matchingSlot inline crates/horizon-world/src/loot.rs::LootData::enchantment_level slot_in_group test; location and attribute code test slots inline
Enchantment.isImmuneToDamage port crates/horizon-client/src/game/enchant_effects.rs::Game::wears_burn_from_stepping_immunity gap: minor: ignores the effect's requirements and damage source; frost_walker is the only damage_immunity enchantment
Enchantment.modifyDamageProtection port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with armor protection is summed per damage type in apply_effect_status (potions.rs)
Enchantment.doPostPiercingAttack port crates/horizon-client/src/game/enchant_effects.rs::Game::post_piercing_attack gap: minor: the effect's own requirements are not read; Lunge's checks are hard-coded
Enchantment.tick port crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed's tick effects; it is the only tick effect in the data
Enchantment.onProjectileSpawned port crates/horizon-client/src/game/enchant_effects.rs::Game::bow_projectile_ignite Flame's ignite; the only projectile_spawned effect in the data
Enchantment.onHitBlock port crates/horizon-client/src/game/trident.rs::Game::channel_rod_hit Channeling's lightning rod hit; the only hit_block effect in the data
Enchantment.modifyItemFilteredCount port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with one enchantment's effects for one component, item context
Enchantment.modifyEntityFilteredValue port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with one enchantment's effects for one component, entity context
Enchantment.modifyDamageFilteredValue port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with one enchantment's effects for one component, damage context
Enchantment.locationContext skip:java LootParams builder; Horizon passes plain values to location_requirements
Enchantment.entityContext skip:java LootParams builder; Horizon passes an EffectContext struct
Enchantment.blockHitContext skip:java LootParams builder; Horizon passes an EffectContext struct
Enchantment.applyEffects inline crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with condition check and apply loop folded into modify_value_with
Enchantment.stopLocationBasedEffects inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed; the boots-changed branch removes its modifiers
Enchantment.FloatAction.asGeneric skip:java lambda adapter for float effects
Enchantment.Builder skip:data datagen builder; Horizon reads enchantment JSON
LevelBasedValue.Exponent.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:exponent: base to the power
LevelBasedValue.Fraction.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:fraction; zero denominator gives 0
LevelBasedValue.Linear.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:linear
LevelBasedValue.Lookup.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:lookup with fallback
ChangeItemDamage.apply port crates/horizon-client/src/game.rs::Game::damage_held gap: minor: the held item only; Soul Speed's boots use wear_boots and Thorns its own path
EnchantmentAttributeEffect.getModifier port crates/horizon-items/src/enchant.rs::Enchantments::attributes slot suffix on the id is added in apply_enchantment_attributes
EnchantmentAttributeEffect.onChangedBlock inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed modifiers switch on there (Soul Speed only)
EnchantmentAttributeEffect.onDeactivated inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed modifiers switch off there (Soul Speed only)
EnchantmentAttributeEffect.makeAttributeMap skip:java multimap builder for one modifier
EnchantmentHelper.updateEnchantments port crates/horizon-items/src/item_data.rs::ItemStack::enchant gap: minor: sets one enchantment; no bulk consumer form
EnchantmentHelper.processAmmoUse port crates/horizon-client/src/game/enchant_effects.rs::Game::bow_enchantments Infinity as a flag; the ammo count change is decided by the caller
EnchantmentHelper.processBlockExperience inline crates/horizon-client/src/game.rs::Game::break_block_as_player Silk Touch zeroes the XP at the call site; spawners keep it
EnchantmentHelper.processMobExperience skip:other no enchantment in the data uses mob_experience, so the amount never changes
EnchantmentHelper.createBook missing player: the creative menu has no enchanted book for each enchantment (CreativeModeTabs); creative.rs lists none
EnchantmentHelper.runIterationOnItem port crates/horizon-items/src/item_data.rs::ItemStack::enchantments the (enchantment, level) iteration; callers loop over it
EnchantmentHelper.runIterationOnEquipment inline crates/horizon-client/src/game/enchant_effects.rs::Game::apply_enchantment_attributes gap: minor: worn armor only; hand slots are not read
EnchantmentHelper.isImmuneToDamage port crates/horizon-client/src/game/enchant_effects.rs::Game::wears_burn_from_stepping_immunity gap: minor: worn armor only; no requirements or damage source check
EnchantmentHelper.modifyKnockback port crates/horizon-client/src/game/enchant_effects.rs::Game::extra_knockback gap: minor: the player's held weapon; mob weapons are read in mobs/gear.rs
EnchantmentHelper.doPostAttackEffects port crates/horizon-client/src/game/enchant_effects.rs::Game::post_attack gap: minor: wind burst, thorns and Channeling's victim effect are separate fns
EnchantmentHelper.doPostAttackEffectsWithItemSourceOnBreak port crates/horizon-client/src/game/enchant_effects.rs::Game::post_attack gap: minor: melee hits with the held item only; projectile and attacker-less hits are not here
EnchantmentHelper.stopLocationBasedEffects inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed; the boots-changed branch stops it
EnchantmentHelper.tickEffects inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed's tick effect; it is the only one in the data
EnchantmentHelper.processProjectileCount port crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow gap: minor: Multishot's three shots are hard-coded, not read from projectile_count
EnchantmentHelper.processProjectileSpread port crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow gap: minor: 10 degrees hard-coded, not read from projectile_spread (same value)
EnchantmentHelper.getPiercingCount inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow projectile_piercing read for the arrow's pierce level there
EnchantmentHelper.onHitBlock port crates/horizon-client/src/game/trident.rs::Game::channel_rod_hit Channeling's lightning rod hit; the only hit_block effect in the data
EnchantmentHelper.modifyDurabilityToRepairFromXp port crates/horizon-client/src/game/enchant_effects.rs::Game::mending Mending's repair with XP
EnchantmentHelper.getFishingLuckBonus port crates/horizon-client/src/game/fishing.rs::Game::use_fishing_rod Luck of the Sea read when the rod is cast
EnchantmentHelper.getFishingTimeReduction port crates/horizon-client/src/game/fishing.rs::Game::use_fishing_rod Lure ticks read at cast; used by catching_fish
EnchantmentHelper.getTridentReturnToOwnerAcceleration port crates/horizon-client/src/game/trident.rs::ThrownTrident::loyalty_pull Loyalty level pull and acceleration
EnchantmentHelper.modifyCrossbowChargingTime port crates/horizon-client/src/game/crossbow.rs::Game::charge_ticks Quick Charge: 1.25 s minus 0.25 s per level
EnchantmentHelper.getTridentSpinAttackStrength inline crates/horizon-client/src/game/trident.rs::Game::release_trident Riptide's strength 1.5 + 0.75 per level above the first, folded into the release
EnchantmentHelper.hasTag port crates/horizon-items/src/enchant.rs::Enchantments::in_tag per enchantment id; callers loop over the stack
EnchantmentHelper.has port crates/horizon-items/src/enchant.rs::Enchantments::has_component any enchantment on the stack with the component
EnchantmentHelper.pickHighestLevel port crates/horizon-client/src/game/crossbow.rs::Game::charging_sounds gap: minor: Quick Charge sounds only; the trident sound is hard-coded in release_trident (riptide_N)
EnchantmentHelper.getHighestLevel inline crates/horizon-client/src/game/crossbow.rs::Game::charging_sounds reads the quick_charge level directly
EnchantmentHelper.filterCompatibleEnchantments inline crates/horizon-items/src/enchant.rs::Enchantments::select exclusivity filter folded into the selection loop
EnchantmentHelper.isEnchantmentCompatible port crates/horizon-items/src/enchant.rs::Enchantments::compatible pair check; the /enchant command loops over the existing ones
EnchantmentHelper.enchantItemFromProvider port crates/horizon-client/src/game/mob_gear.rs::Game::enchant_spawn_equipment gap: minor: mob spawn gear only; pillager, vindicator, skeleton trap and enderman providers are not read here
Equippable.llamaSwag skip:data datagen factory for the carpet equippable data
Equippable.saddle skip:data datagen factory for the saddle equippable data
Equippable.harness skip:data datagen factory for the harness equippable data
Equippable.equipOnTarget port crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast gap: minor: the harness on a happy ghast only; saddles are put on in mounts.rs and nautili.rs
Equippable.canBeEquippedBy port crates/horizon-client/src/game/mount_menu.rs::shows_saddle gap: minor: the saddle slot's entity check only; the armour swap has no entity test
Equippable.Builder skip:data datagen builder for equippable data
ItemCost.withComponents skip:data datagen helper; no runtime caller in 26.3
ItemCost.test port crates/horizon-client/src/merchant.rs::ItemCost::test item match, then the stack data when the cost has data
MerchantOffer.<init> skip:java constructor; Horizon builds the offer in merchant.rs
MerchantOffer.writeToStream skip:java wire encoding (stream codec)
MerchantOffer.createFromStream skip:java wire decoding (stream codec)
MerchantOffers.copy skip:java list copy
VillagerTrade.builder skip:data datagen factory for trade data
VillagerTrade.Builder skip:data datagen builder for trade data
BaseCommandBlock.createSource inline crates/horizon-client/src/game/command_blocks.rs::Game::command_block_success the track_output gate that decides whether the source exists
BaseCommandBlock.CloseableCommandBlockSource.acceptsSuccess port crates/horizon-client/src/game/command_blocks.rs::Game::command_block_success track_output and send_command_feedback; a removed block gets no output
BaseCommandBlock.CloseableCommandBlockSource.shouldInformAdmins port crates/horizon-client/src/game/command_blocks.rs::Game::command_block_success command_block_output rule, with feedback on
BaseSpawner.setEntityData port crates/horizon-client/src/mobs/spawner.rs::Spawner::set_entity_id
BaseSpawner.getOrCreateDisplayEntity port crates/horizon-client/src/game/spawner.rs::Game::update_spawner_display display mob made per spawner from its next spawn data
BaseSpawner.onEventTriggered port crates/horizon-client/src/mobs/spawner.rs::Spawner::client_event block event 1 resets the client's delay
BaseSpawner.getOrCreateNextSpawnData port crates/horizon-client/src/mobs/spawner.rs::Spawner::next_or_create next spawn data picked once and kept
Level.isInWorldBounds port crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds height and horizontal range
Level.isInValidBounds port crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds chunk-level bounds folded into the same range
Level.isInWorldBoundsHorizontal inline crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds the -30000000..30000000 test
Level.isInValidBoundsHorizontal inline crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds chunk validity folded into the block range
Level.getChunk missing unsure: no getter for a full chunk object found; block reads go through World::block
Level.getFluidState port crates/horizon-client/src/game.rs::Column::state gap: minor: the isInValidBounds check is not repeated here
Level.isDarkOutside port crates/horizon-client/src/game.rs::GameLevel::sky_darken gap: minor: the sky darkness value; the fixed-time dimension check is not here
Level.playSound port crates/horizon-world/src/level/update.rs::Sim::sound
Level.playSeededSound missing unsure: no seeded sound path found; Sim::sound takes no seed
Level.addBlockEntityTicker port crates/horizon-client/src/game.rs::GameLevel::load_block_entity the ticker comes with the block entity load
Level.guardEntityTick skip:debug crash-report wrapper around an entity tick
Level.getBlockEntity skip:other bare block_entities map lookup at each caller; no port of its own
Level.setBlockEntity port crates/horizon-client/src/game.rs::GameLevel::load_block_entity
Level.loadedAndEntityCanStandOnFace missing unsure: no face-sturdy test for placed hanging entities found
Level.getWorldBorderAdjustedRespawnData missing unsure: respawn clamp to the world border not found
Level.hasEntities missing unsure: no entity-in-box test found for this use
Level.getClockTimeTicks port crates/horizon-client/src/game.rs::GameLevel::day_time day time; no separate clock time
Level.getThunderLevel port crates/horizon-client/src/world.rs::World::levels thunder scaled by rain
Level.setThunderLevel port crates/horizon-client/src/game/remote.rs::Game::handle_packet weather game event sets the thunder level
Level.setRainLevel port crates/horizon-client/src/game/remote.rs::Game::handle_packet weather game event sets the rain level
Level.fillReportDetails skip:debug crash-report details
BlockGetter.getBlockEntity skip:other bare block_entities map lookup at each caller
BlockGetter.isBlockInLine skip:other no caller in 26.3 code
BlockGetter.clipWithInteractionOverride missing unsure: no interaction-shape override found for the pick ray; clip_ray not checked in depth
BlockGetter.traverseBlocks port crates/horizon-core/src/geometry/traversal.rs::traverse_blocks
BlockGetter.forEachBlockIntersectedBetween port crates/horizon-core/src/geometry/sweep.rs::sweep_intersected_blocks
BlockGetter.addCollisionsAlongTravel inline crates/horizon-client/src/collisions.rs::SceneCollisions::resolve_with_context gap: minor: the shape list along the path is built inside the resolver
BlockGetter.getFurthestCorner port crates/horizon-core/src/geometry/sweep.rs::furthest_corner
ChunkPos.maxFromRegion missing unsure: region scan bound in IOWorker; not checked against save.rs
ChunkPos.isValid inline crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds horizontal chunk range folded into the block range
ChunkPos.hash skip:java hash code for ColumnPos keys
ChunkPos.getRegionX port crates/horizon-core/src/position.rs::ChunkPos::region
ChunkPos.getRegionZ port crates/horizon-core/src/position.rs::ChunkPos::region
ChunkPos.getBlockAt skip:other no caller in 26.3 code
ChunkPos.contains port crates/horizon-core/src/position.rs::BlockPos::chunk a block is in a chunk when its chunk() is that chunk
ChunkPos.getChessboardDistance inline crates/horizon-client/src/ticket_levels.rs::compute Chebyshev distance folded into the ticket level loop
ChunkPos.distanceSquared missing unsure: caller not identified in 26.3 sources; no port located
CollisionGetter.isUnobstructed port crates/horizon-client/src/game.rs::GameLevel::is_unobstructed the state-based overload
CollisionGetter.noBorderCollision port crates/horizon-client/src/collisions.rs::EntityCollisions::movement_border border shape when inside close to the border
CollisionGetter.getPreMoveCollisions inline crates/horizon-client/src/collisions.rs::SceneCollisions::resolve_with_context gap: minor: entity and block shapes are not returned as a list; the resolver takes them together
CollisionGetter.getBlockAndLiquidCollisions port crates/horizon-client/src/collisions.rs::no_collision_or_liquid gap: minor: a yes or no test, not the shape list
CollisionGetter.getBlockCollisionsFromContext port crates/horizon-client/src/collisions.rs::SceneCollisions::collision_block gap: minor: per-block shape; the box walk is not here
CollisionGetter.clipIncludingBorder missing unsure: no world-border clamp of a ray found in clip_ray
CollisionGetter.collidesWithSuffocatingBlock port crates/horizon-client/src/collisions.rs::SceneCollisions::is_suffocating
EntityGetter.getEntitiesOfClass skip:other class filter repeated at each caller over the entity lists; no shared lookup
EntityGetter.getPlayerByUUID skip:other uuid find repeated at each caller (e.g. allays.rs)
Explosion.getIndirectSourceEntity inline crates/horizon-client/src/game/explosion.rs::Game::explosion_hurt_entities the projectile owner rule is folded into the hurt loop
GameType.byName port crates/horizon-command/src/args.rs::GameMode::from_name name lookup; the default is the caller's
GameType.isValidId missing minor: no id check; set_mode_id falls back to survival for unknown ids
LevelAccessor.createTick port crates/horizon-world/src/level/update.rs::Sim::schedule_tick the scheduled tick; no tick object is returned
LevelHeightAccessor.isOutsideBuildHeight port crates/horizon-world/src/level/query.rs::Sim::is_inside_build_height negated
LevelReader.getHeight port crates/horizon-client/src/world.rs::World::world_surface gap: minor: WORLD_SURFACE only; other heightmap types not read here
LevelReader.getBlockStatesIfLoaded port crates/horizon-client/src/world.rs::World::loaded gap: minor: the loaded check only; the states are read with World::block
LevelReader.getNoiseBiome skip:other no caller in 26.3 code
LevelReader.getHeightmapPos port crates/horizon-client/src/world.rs::World::world_surface gap: minor: the height only; the BlockPos is built by the caller
LevelReader.getChunk missing unsure: same as Level.getChunk
LevelReader.findBlocksInBoxByManhattanDistance missing unsure: no block search by Manhattan distance found in Horizon
LevelWriter.destroyBlock port crates/horizon-world/src/level/update.rs::Sim::destroy_block
LocalMobCapCalculator.getPlayersNear port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::players_near
LocalMobCapCalculator.addMob port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::add_local
LocalMobCapCalculator.MobCounts.add port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::add_local per-player count
LocalMobCapCalculator.MobCounts.canSpawn port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::can_spawn_local
1 Enchantment.getSlotItems inline crates/horizon-world/src/loot.rs::LootData::enchantment_level slot filter and item lookup folded into the best-level loop
2 Enchantment.matchingSlot inline crates/horizon-world/src/loot.rs::LootData::enchantment_level slot_in_group test; location and attribute code test slots inline
3 Enchantment.isImmuneToDamage port crates/horizon-client/src/game/enchant_effects.rs::Game::wears_burn_from_stepping_immunity gap: minor: ignores the effect's requirements and damage source; frost_walker is the only damage_immunity enchantment
4 Enchantment.modifyDamageProtection port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with armor protection is summed per damage type in apply_effect_status (potions.rs)
5 Enchantment.doPostPiercingAttack port crates/horizon-client/src/game/enchant_effects.rs::Game::post_piercing_attack gap: minor: the effect's own requirements are not read; Lunge's checks are hard-coded
6 Enchantment.tick port crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed's tick effects; it is the only tick effect in the data
7 Enchantment.onProjectileSpawned port crates/horizon-client/src/game/enchant_effects.rs::Game::bow_projectile_ignite Flame's ignite; the only projectile_spawned effect in the data
8 Enchantment.onHitBlock port crates/horizon-client/src/game/trident.rs::Game::channel_rod_hit Channeling's lightning rod hit; the only hit_block effect in the data
9 Enchantment.modifyItemFilteredCount port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with one enchantment's effects for one component, item context
10 Enchantment.modifyEntityFilteredValue port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with one enchantment's effects for one component, entity context
11 Enchantment.modifyDamageFilteredValue port crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with one enchantment's effects for one component, damage context
12 Enchantment.locationContext skip:java LootParams builder; Horizon passes plain values to location_requirements
13 Enchantment.entityContext skip:java LootParams builder; Horizon passes an EffectContext struct
14 Enchantment.blockHitContext skip:java LootParams builder; Horizon passes an EffectContext struct
15 Enchantment.applyEffects inline crates/horizon-items/src/enchant.rs::Enchantments::modify_value_with condition check and apply loop folded into modify_value_with
16 Enchantment.stopLocationBasedEffects inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed; the boots-changed branch removes its modifiers
17 Enchantment.FloatAction.asGeneric skip:java lambda adapter for float effects
18 Enchantment.Builder skip:data datagen builder; Horizon reads enchantment JSON
19 LevelBasedValue.Exponent.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:exponent: base to the power
20 LevelBasedValue.Fraction.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:fraction; zero denominator gives 0
21 LevelBasedValue.Linear.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:linear
22 LevelBasedValue.Lookup.calculate port crates/horizon-items/src/enchant.rs::level_value minecraft:lookup with fallback
23 ChangeItemDamage.apply port crates/horizon-client/src/game.rs::Game::damage_held gap: minor: the held item only; Soul Speed's boots use wear_boots and Thorns its own path
24 EnchantmentAttributeEffect.getModifier port crates/horizon-items/src/enchant.rs::Enchantments::attributes slot suffix on the id is added in apply_enchantment_attributes
25 EnchantmentAttributeEffect.onChangedBlock inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed modifiers switch on there (Soul Speed only)
26 EnchantmentAttributeEffect.onDeactivated inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed modifiers switch off there (Soul Speed only)
27 EnchantmentAttributeEffect.makeAttributeMap skip:java multimap builder for one modifier
28 EnchantmentHelper.updateEnchantments port crates/horizon-items/src/item_data.rs::ItemStack::enchant gap: minor: sets one enchantment; no bulk consumer form
29 EnchantmentHelper.processAmmoUse port crates/horizon-client/src/game/enchant_effects.rs::Game::bow_enchantments Infinity as a flag; the ammo count change is decided by the caller
30 EnchantmentHelper.processBlockExperience inline crates/horizon-client/src/game.rs::Game::break_block_as_player Silk Touch zeroes the XP at the call site; spawners keep it
31 EnchantmentHelper.processMobExperience skip:other no enchantment in the data uses mob_experience, so the amount never changes
32 EnchantmentHelper.createBook missing player: the creative menu has no enchanted book for each enchantment (CreativeModeTabs); creative.rs lists none
33 EnchantmentHelper.runIterationOnItem port crates/horizon-items/src/item_data.rs::ItemStack::enchantments the (enchantment, level) iteration; callers loop over it
34 EnchantmentHelper.runIterationOnEquipment inline crates/horizon-client/src/game/enchant_effects.rs::Game::apply_enchantment_attributes gap: minor: worn armor only; hand slots are not read
35 EnchantmentHelper.isImmuneToDamage port crates/horizon-client/src/game/enchant_effects.rs::Game::wears_burn_from_stepping_immunity gap: minor: worn armor only; no requirements or damage source check
36 EnchantmentHelper.modifyKnockback port crates/horizon-client/src/game/enchant_effects.rs::Game::extra_knockback gap: minor: the player's held weapon; mob weapons are read in mobs/gear.rs
37 EnchantmentHelper.doPostAttackEffects port crates/horizon-client/src/game/enchant_effects.rs::Game::post_attack gap: minor: wind burst, thorns and Channeling's victim effect are separate fns
38 EnchantmentHelper.doPostAttackEffectsWithItemSourceOnBreak port crates/horizon-client/src/game/enchant_effects.rs::Game::post_attack gap: minor: melee hits with the held item only; projectile and attacker-less hits are not here
39 EnchantmentHelper.stopLocationBasedEffects inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed; the boots-changed branch stops it
40 EnchantmentHelper.tickEffects inline crates/horizon-client/src/game/enchant_effects.rs::Game::tick_soul_speed gap: minor: only Soul Speed's tick effect; it is the only one in the data
41 EnchantmentHelper.processProjectileCount port crates/horizon-client/src/game/crossbow.rs::Game::tick_crossbow gap: minor: Multishot's three shots are hard-coded, not read from projectile_count
42 EnchantmentHelper.processProjectileSpread port crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow gap: minor: 10 degrees hard-coded, not read from projectile_spread (same value)
43 EnchantmentHelper.getPiercingCount inline crates/horizon-client/src/game/crossbow.rs::Game::shoot_crossbow projectile_piercing read for the arrow's pierce level there
44 EnchantmentHelper.onHitBlock port crates/horizon-client/src/game/trident.rs::Game::channel_rod_hit Channeling's lightning rod hit; the only hit_block effect in the data
45 EnchantmentHelper.modifyDurabilityToRepairFromXp port crates/horizon-client/src/game/enchant_effects.rs::Game::mending Mending's repair with XP
46 EnchantmentHelper.getFishingLuckBonus port crates/horizon-client/src/game/fishing.rs::Game::use_fishing_rod Luck of the Sea read when the rod is cast
47 EnchantmentHelper.getFishingTimeReduction port crates/horizon-client/src/game/fishing.rs::Game::use_fishing_rod Lure ticks read at cast; used by catching_fish
48 EnchantmentHelper.getTridentReturnToOwnerAcceleration port crates/horizon-client/src/game/trident.rs::ThrownTrident::loyalty_pull Loyalty level pull and acceleration
49 EnchantmentHelper.modifyCrossbowChargingTime port crates/horizon-client/src/game/crossbow.rs::Game::charge_ticks Quick Charge: 1.25 s minus 0.25 s per level
50 EnchantmentHelper.getTridentSpinAttackStrength inline crates/horizon-client/src/game/trident.rs::Game::release_trident Riptide's strength 1.5 + 0.75 per level above the first, folded into the release
51 EnchantmentHelper.hasTag port crates/horizon-items/src/enchant.rs::Enchantments::in_tag per enchantment id; callers loop over the stack
52 EnchantmentHelper.has port crates/horizon-items/src/enchant.rs::Enchantments::has_component any enchantment on the stack with the component
53 EnchantmentHelper.pickHighestLevel port crates/horizon-client/src/game/crossbow.rs::Game::charging_sounds gap: minor: Quick Charge sounds only; the trident sound is hard-coded in release_trident (riptide_N)
54 EnchantmentHelper.getHighestLevel inline crates/horizon-client/src/game/crossbow.rs::Game::charging_sounds reads the quick_charge level directly
55 EnchantmentHelper.filterCompatibleEnchantments inline crates/horizon-items/src/enchant.rs::Enchantments::select exclusivity filter folded into the selection loop
56 EnchantmentHelper.isEnchantmentCompatible port crates/horizon-items/src/enchant.rs::Enchantments::compatible pair check; the /enchant command loops over the existing ones
57 EnchantmentHelper.enchantItemFromProvider port crates/horizon-client/src/game/mob_gear.rs::Game::enchant_spawn_equipment gap: minor: mob spawn gear only; pillager, vindicator, skeleton trap and enderman providers are not read here
58 Equippable.llamaSwag skip:data datagen factory for the carpet equippable data
59 Equippable.saddle skip:data datagen factory for the saddle equippable data
60 Equippable.harness skip:data datagen factory for the harness equippable data
61 Equippable.equipOnTarget port crates/horizon-client/src/game/ghasts.rs::Game::interact_happy_ghast gap: minor: the harness on a happy ghast only; saddles are put on in mounts.rs and nautili.rs
62 Equippable.canBeEquippedBy port crates/horizon-client/src/game/mount_menu.rs::shows_saddle gap: minor: the saddle slot's entity check only; the armour swap has no entity test
63 Equippable.Builder skip:data datagen builder for equippable data
64 ItemCost.withComponents skip:data datagen helper; no runtime caller in 26.3
65 ItemCost.test port crates/horizon-client/src/merchant.rs::ItemCost::test item match, then the stack data when the cost has data
66 MerchantOffer.<init> skip:java constructor; Horizon builds the offer in merchant.rs
67 MerchantOffer.writeToStream skip:java wire encoding (stream codec)
68 MerchantOffer.createFromStream skip:java wire decoding (stream codec)
69 MerchantOffers.copy skip:java list copy
70 VillagerTrade.builder skip:data datagen factory for trade data
71 VillagerTrade.Builder skip:data datagen builder for trade data
72 BaseCommandBlock.createSource inline crates/horizon-client/src/game/command_blocks.rs::Game::command_block_success the track_output gate that decides whether the source exists
73 BaseCommandBlock.CloseableCommandBlockSource.acceptsSuccess port crates/horizon-client/src/game/command_blocks.rs::Game::command_block_success track_output and send_command_feedback; a removed block gets no output
74 BaseCommandBlock.CloseableCommandBlockSource.shouldInformAdmins port crates/horizon-client/src/game/command_blocks.rs::Game::command_block_success command_block_output rule, with feedback on
75 BaseSpawner.setEntityData port crates/horizon-client/src/mobs/spawner.rs::Spawner::set_entity_id
76 BaseSpawner.getOrCreateDisplayEntity port crates/horizon-client/src/game/spawner.rs::Game::update_spawner_display display mob made per spawner from its next spawn data
77 BaseSpawner.onEventTriggered port crates/horizon-client/src/mobs/spawner.rs::Spawner::client_event block event 1 resets the client's delay
78 BaseSpawner.getOrCreateNextSpawnData port crates/horizon-client/src/mobs/spawner.rs::Spawner::next_or_create next spawn data picked once and kept
79 Level.isInWorldBounds port crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds height and horizontal range
80 Level.isInValidBounds port crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds chunk-level bounds folded into the same range
81 Level.isInWorldBoundsHorizontal inline crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds the -30000000..30000000 test
82 Level.isInValidBoundsHorizontal inline crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds chunk validity folded into the block range
83 Level.getChunk missing unsure: no getter for a full chunk object found; block reads go through World::block
84 Level.getFluidState port crates/horizon-client/src/game.rs::Column::state gap: minor: the isInValidBounds check is not repeated here
85 Level.isDarkOutside port crates/horizon-client/src/game.rs::GameLevel::sky_darken gap: minor: the sky darkness value; the fixed-time dimension check is not here
86 Level.playSound port crates/horizon-world/src/level/update.rs::Sim::sound
87 Level.playSeededSound missing unsure: no seeded sound path found; Sim::sound takes no seed
88 Level.addBlockEntityTicker port crates/horizon-client/src/game.rs::GameLevel::load_block_entity the ticker comes with the block entity load
89 Level.guardEntityTick skip:debug crash-report wrapper around an entity tick
90 Level.getBlockEntity skip:other bare block_entities map lookup at each caller; no port of its own
91 Level.setBlockEntity port crates/horizon-client/src/game.rs::GameLevel::load_block_entity
92 Level.loadedAndEntityCanStandOnFace missing unsure: no face-sturdy test for placed hanging entities found
93 Level.getWorldBorderAdjustedRespawnData missing unsure: respawn clamp to the world border not found
94 Level.hasEntities missing unsure: no entity-in-box test found for this use
95 Level.getClockTimeTicks port crates/horizon-client/src/game.rs::GameLevel::day_time day time; no separate clock time
96 Level.getThunderLevel port crates/horizon-client/src/world.rs::World::levels thunder scaled by rain
97 Level.setThunderLevel port crates/horizon-client/src/game/remote.rs::Game::handle_packet weather game event sets the thunder level
98 Level.setRainLevel port crates/horizon-client/src/game/remote.rs::Game::handle_packet weather game event sets the rain level
99 Level.fillReportDetails skip:debug crash-report details
100 BlockGetter.getBlockEntity skip:other bare block_entities map lookup at each caller
101 BlockGetter.isBlockInLine skip:other no caller in 26.3 code
102 BlockGetter.clipWithInteractionOverride missing unsure: no interaction-shape override found for the pick ray; clip_ray not checked in depth
103 BlockGetter.traverseBlocks port crates/horizon-core/src/geometry/traversal.rs::traverse_blocks
104 BlockGetter.forEachBlockIntersectedBetween port crates/horizon-core/src/geometry/sweep.rs::sweep_intersected_blocks
105 BlockGetter.addCollisionsAlongTravel inline crates/horizon-client/src/collisions.rs::SceneCollisions::resolve_with_context gap: minor: the shape list along the path is built inside the resolver
106 BlockGetter.getFurthestCorner port crates/horizon-core/src/geometry/sweep.rs::furthest_corner
107 ChunkPos.maxFromRegion missing unsure: region scan bound in IOWorker; not checked against save.rs
108 ChunkPos.isValid inline crates/horizon-world/src/level/update.rs::Sim::is_in_valid_bounds horizontal chunk range folded into the block range
109 ChunkPos.hash skip:java hash code for ColumnPos keys
110 ChunkPos.getRegionX port crates/horizon-core/src/position.rs::ChunkPos::region
111 ChunkPos.getRegionZ port crates/horizon-core/src/position.rs::ChunkPos::region
112 ChunkPos.getBlockAt skip:other no caller in 26.3 code
113 ChunkPos.contains port crates/horizon-core/src/position.rs::BlockPos::chunk a block is in a chunk when its chunk() is that chunk
114 ChunkPos.getChessboardDistance inline crates/horizon-client/src/ticket_levels.rs::compute Chebyshev distance folded into the ticket level loop
115 ChunkPos.distanceSquared missing unsure: caller not identified in 26.3 sources; no port located
116 CollisionGetter.isUnobstructed port crates/horizon-client/src/game.rs::GameLevel::is_unobstructed the state-based overload
117 CollisionGetter.noBorderCollision port crates/horizon-client/src/collisions.rs::EntityCollisions::movement_border border shape when inside close to the border
118 CollisionGetter.getPreMoveCollisions inline crates/horizon-client/src/collisions.rs::SceneCollisions::resolve_with_context gap: minor: entity and block shapes are not returned as a list; the resolver takes them together
119 CollisionGetter.getBlockAndLiquidCollisions port crates/horizon-client/src/collisions.rs::no_collision_or_liquid gap: minor: a yes or no test, not the shape list
120 CollisionGetter.getBlockCollisionsFromContext port crates/horizon-client/src/collisions.rs::SceneCollisions::collision_block gap: minor: per-block shape; the box walk is not here
121 CollisionGetter.clipIncludingBorder missing unsure: no world-border clamp of a ray found in clip_ray
122 CollisionGetter.collidesWithSuffocatingBlock port crates/horizon-client/src/collisions.rs::SceneCollisions::is_suffocating
123 EntityGetter.getEntitiesOfClass skip:other class filter repeated at each caller over the entity lists; no shared lookup
124 EntityGetter.getPlayerByUUID skip:other uuid find repeated at each caller (e.g. allays.rs)
125 Explosion.getIndirectSourceEntity inline crates/horizon-client/src/game/explosion.rs::Game::explosion_hurt_entities the projectile owner rule is folded into the hurt loop
126 GameType.byName port crates/horizon-command/src/args.rs::GameMode::from_name name lookup; the default is the caller's
127 GameType.isValidId missing minor: no id check; set_mode_id falls back to survival for unknown ids
128 LevelAccessor.createTick port crates/horizon-world/src/level/update.rs::Sim::schedule_tick the scheduled tick; no tick object is returned
129 LevelHeightAccessor.isOutsideBuildHeight port crates/horizon-world/src/level/query.rs::Sim::is_inside_build_height negated
130 LevelReader.getHeight port crates/horizon-client/src/world.rs::World::world_surface gap: minor: WORLD_SURFACE only; other heightmap types not read here
131 LevelReader.getBlockStatesIfLoaded port crates/horizon-client/src/world.rs::World::loaded gap: minor: the loaded check only; the states are read with World::block
132 LevelReader.getNoiseBiome skip:other no caller in 26.3 code
133 LevelReader.getHeightmapPos port crates/horizon-client/src/world.rs::World::world_surface gap: minor: the height only; the BlockPos is built by the caller
134 LevelReader.getChunk missing unsure: same as Level.getChunk
135 LevelReader.findBlocksInBoxByManhattanDistance missing unsure: no block search by Manhattan distance found in Horizon
136 LevelWriter.destroyBlock port crates/horizon-world/src/level/update.rs::Sim::destroy_block
137 LocalMobCapCalculator.getPlayersNear port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::players_near
138 LocalMobCapCalculator.addMob port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::add_local
139 LocalMobCapCalculator.MobCounts.add port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::add_local per-player count
140 LocalMobCapCalculator.MobCounts.canSpawn port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::can_spawn_local
+142
View File
@@ -0,0 +1,142 @@
NaturalSpawner.getFilteredSpawningCategories port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::filtered_categories categories in spawn order, filtered by enemies, persistent and the global cap
NaturalSpawner.isRightDistanceToPlayerAndSpawnPoint port crates/horizon-client/src/mobs/spawn_selection.rs::right_distance 24 block player distance, respawn point distance and chunk checks
NaturalSpawner.getMobForSpawn inline crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_position gap: minor: no warning log when a type cannot be created; the type is skipped there
NaturalSpawner.isValidPositionForMob inline crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_position the far-away removal check; gap: minor: NeoForge spawn position event hook is not modelled
NaturalSpawner.getRandomSpawnMobAt inline crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_position the water ambient reduce roll, then the weighted pick from mobs_at
NaturalSpawner.isInNetherFortressBounds inline crates/horizon-client/src/mobs/spawn_selection.rs::mobs_at the monster fortress check on nether bricks comes first in mobs_at
NaturalSpawner.getRandomPosWithin port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_chunk random column in the chunk, height up to one above the world surface
NaturalSpawner.SpawnState.canSpawnForCategoryGlobal port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::can_spawn_global per chunk cap from the spawnable chunk count
NaturalSpawner.SpawnState.canSpawnForCategoryLocal port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::can_spawn_local local cap per player near the chunk; the debug flag is not kept
NoiseColumn.getBlock port crates/horizon-world/src/worldgen/structure/start.rs::NoiseColumn::get air outside the column height
NoiseColumn.setBlock skip:other no callers in vanilla; Horizon builds the column once and never writes it
PotentialCalculator.PointCharge.getPotentialChange inline crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::energy_change one charge's term charge over distance, infinity at zero distance, summed in energy_change
ServerExplosion.interactWithBlocks inline crates/horizon-client/src/game/explosion.rs::Game::server_explode_as shuffles the targets, runs each block's explosion hit, then pops the merged drops
ServerExplosion.createFire inline crates/horizon-client/src/game/explosion.rs::Game::server_explode_as one in three chance on air above a solid block, with the block's fire state
ServerExplosion.canTriggerBlocks inline crates/horizon-client/src/game/wind.rs::Game::wind_burst breeze charges need mob griefing before the trigger pass; the trigger-only check is implicit because only wind bursts reach it
ServerExplosion.StackCollector.tryMerge port crates/horizon-client/src/game/explosion.rs::add_or_append_stack merges up to 16 of the same item and damage
SignalGetter.getBestOwnOrNeighbourSignal missing player: an explosive sulfur cube on or next to redstone power does not light its fuse every tick; Horizon's sulfur cube only primes on fire or explosion damage and best_neighbor_signal has no own-signal part
SpawnData.CustomSpawnRules.checkLightBoundaries skip:java codec validation of the light limit range; Horizon decodes the limits in spawner.rs
StructureManager.forWorldGenRegion skip:other wraps the level as a worldgen region view; Horizon passes the level into worldgen fns, no manager object
StructureManager.startsForStructure inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where gap: minor: returns starts whose box holds the position, not every start the section references
StructureManager.fillStartsForStructure inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where the reference loop and the valid start check
StructureManager.getStructureAt port crates/horizon-client/src/game/structures.rs::Game::structures_reaching returns every start whose box holds the position; the caller takes the one it needs
StructureManager.getStructureWithPieceAt port crates/horizon-client/src/game/structures.rs::Game::structures_at gap: minor: returns names of structures with a piece at the position; no predicate filter here
StructureManager.matching inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where the predicate becomes the wanted closure
StructureManager.structureHasPieceAt inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where the piece box test behind the piece flag
StructureManager.getAllStructuresAt inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where gap: minor: the chunk's full reference map is not returned; only starts whose box holds the position
Biome.getTemperature port crates/horizon-world/src/worldgen/biome_temperature.rs::BiomeTemperature::temperature height adjusted temperature with the 1024 entry cache
Biome.warmEnoughToRain port crates/horizon-world/src/worldgen/biome_temperature.rs::BiomeTemperature::warm_enough_to_rain temperature at least 0.15
Biome.shouldMeltFrozenOceanIcebergSlightly port crates/horizon-world/src/worldgen/biome_temperature.rs::BiomeTemperature::should_melt_frozen_ocean_iceberg_slightly temperature above 0.1
Biome.getGrassColor port crates/horizon-client/src/biome.rs::Biomes::grass the grass modifier on the base colour
Biome.getBaseGrassColor inline crates/horizon-client/src/biome.rs::Biomes::load the grass_color override, else the colormap sample, resolved at load
Biome.getGrassColorFromTexture port crates/horizon-client/src/biome.rs::sample grass colormap by clamped temperature and downfall
Biome.getFoliageColorFromTexture port crates/horizon-client/src/biome.rs::sample foliage colormap by clamped temperature and downfall
Biome.getDryFoliageColorFromTexture port crates/horizon-client/src/biome.rs::sample dry foliage colormap by clamped temperature and downfall
Biome.BiomeBuilder.putAttributes skip:java builder for the biome bootstrap; Horizon reads biome data
Biome.BiomeBuilder.build skip:java builder for the biome bootstrap; Horizon reads biome data
Biome.BiomeBuilder.toString skip:debug debug text only
BiomeGenerationSettings.Builder.addFeature skip:java builder for the biome bootstrap; feature lists come from data
BiomeGenerationSettings.PlainBuilder.addFeature skip:java builder for the biome bootstrap
BiomeGenerationSettings.PlainBuilder.addFeatureStepsUpTo skip:java builder for the biome bootstrap
BiomeGenerationSettings.PlainBuilder.build skip:java builder for the biome bootstrap
BiomeManager.getFiddledDistance inline crates/horizon-core/src/biome.rs::BiomeZoom::quart_at_block the eight corner distances with fiddled offsets; the nearest one is picked there
BiomeManager.getFiddle port crates/horizon-core/src/biome.rs::fiddle uniform offset of plus or minus 0.45
BiomeResolver.getBiomesWithin inline crates/horizon-world/src/worldgen/structure/start.rs::try_generate the monument's surrounding check walks the same quart box of radius 29 around the sea level
Climate.parameters skip:data builds parameter points from float literals in the biome bootstrap; Horizon reads quantized points from data
Climate.Parameter.span port crates/horizon-world/src/worldgen/climate/index.rs::Parameter::span union of two parameter ranges
Climate.Parameter.toString skip:debug debug text only
Climate.Parameter.distance port crates/horizon-world/src/worldgen/climate/index.rs::Parameter::distance distance from a value to the range
Climate.ParameterList.codec skip:java codec
Climate.ParameterList.findValueBruteForce port crates/horizon-world/src/worldgen/climate/index.rs::ClimateIndex::brute_force lowest fitness, ties keep the first entry
Climate.ParameterList.findValueIndex port crates/horizon-world/src/worldgen/climate/index.rs::ClimateSearch::find tree search with the previous leaf as the candidate
Climate.ParameterPoint.fitness port crates/horizon-world/src/worldgen/climate/index.rs::ParameterPoint::fitness sum of squared distances over the seven axes
Climate.RTree.create port crates/horizon-world/src/worldgen/climate/index.rs::ClimateIndex::with_branching builds the tree with the branching factor
Climate.RTree.build port crates/horizon-world/src/worldgen/climate/index.rs::build recursive split into buckets by the cheapest axis
Climate.RTree.sort inline crates/horizon-world/src/worldgen/climate/index.rs::build the axis order sort runs inside build
Climate.RTree.comparator port crates/horizon-world/src/worldgen/climate/index.rs::compare_space compares centres on one axis, optionally by absolute value
Climate.RTree.bucketize inline crates/horizon-world/src/worldgen/climate/index.rs::build buckets sliced to the bucket size inside build
Climate.RTree.cost inline crates/horizon-world/src/worldgen/climate/index.rs::build the summed span of each axis picks the best split inside build
Climate.RTree.buildParameterSpace port crates/horizon-world/src/worldgen/climate/index.rs::space union of the children's ranges per axis
Climate.RTree.search port crates/horizon-world/src/worldgen/climate/index.rs::ClimateSearch::find search from the root with the previous result kept
Climate.RTree.Node.distance port crates/horizon-world/src/worldgen/climate/index.rs::distance squared distance from the target to the node's box
Climate.RTree.SubTree.search port crates/horizon-world/src/worldgen/climate/index.rs::ClimateIndex::search recursive search over the children
Climate.Sampler.sample port crates/horizon-world/src/worldgen/climate.rs::ClimateSampler::sample samples the six climate fields at a quart
FixedBiomeSource.findBiomeHorizontal missing unsure: flat worlds use one fixed biome, and this override picks a random point in the box; Horizon's ring search is the generic one and draws random values in a different order
FixedBiomeSource.findClosestBiome3d port crates/horizon-world/src/worldgen/generator.rs::Pipeline::find_closest_biome generic 3D search; for one biome its first sample is the origin
MobSpawnSettings.SpawnerData.toString skip:debug debug text only
MultiNoiseBiomeSource.stable skip:other preset check used only by world creation dimension validation
MultiNoiseBiomeSource.createResolver port crates/horizon-world/src/worldgen/biome.rs::MultiNoiseBiomeSource::resolver resolver over the sampler
MultiNoiseBiomeSource.createResolverForChunk port crates/horizon-world/src/worldgen/biome.rs::BiomeResolver::prepare_volume samples the climate volume for the chunk; sample_prepared then resolves each quart
MultiNoiseBiomeSource.addDebugInfo skip:debug debug screen line with the climate values
AbstractBedBlock.getSleepHeight inline crates/horizon-client/src/game.rs::Game::tick_sleep the sleep height is the fixed bed top 0.5625 above the head cell; the shape is not read
AbstractBedBlock.onStopSleeping missing player: waking up on a straw bed in the Overworld should break it (straw_bed_rule destroy_on_leave); Horizon's wake_up never breaks the bed
AbstractBedBlock.kickVillagerOutOfBed missing player: right-clicking a bed a villager sleeps in neither wakes the villager nor shows the occupied message; Horizon's bed use never reads the occupied state
AbstractBedBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class the other half removed takes this half with it, and occupied comes from the other half
AbstractBedBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy creative breaking of the foot removes the head
AbstractBedBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class the cell in front must be replaceable; gap: minor: no world border check on that cell
AbstractBedBlock.getConnectedDirection port crates/horizon-world/src/level/shapes.rs::Sim::bed_neighbour_direction the way to the other half: facing from the foot, opposite from the head
AbstractBedBlock.getBlockType skip:other chooses the block entity half for the combiner; Horizon keeps one bed block state with no combined block entity
AbstractBedBlock.findBunkBedStandUpPosition inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up bunk bed branch: around the bed, a block lower, above, then the unsafe fallbacks
AbstractBedBlock.findStandUpPositionAtOffset inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up the offset loop; each cell goes through safe_dismount_location
AbstractBedBlock.createBlockStateDefinition skip:data state definition comes from the block data tables
AbstractBedBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by places the head in the cell the bed faces
AbstractBedBlock.getSeed skip:other model seed of a random block variant; beds have one model, nothing reads it
AbstractBedBlock.bedSurroundStandUpOffsets inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up the ten cells around the bed, built inside bed_stand_up
AbstractBedBlock.bedAboveStandUpOffsets inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up the two cells on the bed, built inside bed_stand_up
AbstractCandleBlock.onProjectileHit port crates/horizon-client/src/arrows.rs::Ticker::block_reaction a fire arrow lights an unlit, dry candle or candle cake
AbstractCandleBlock.extinguish inline crates/horizon-world/src/level/fluids.rs::Sim::place_liquid gap: minor: water flow turns a lit candle off with its sound; the smoke particles and game event are not here (the candle cake click is CandleCakeBlock's)
AbstractCandleBlock.setLit inline crates/horizon-client/src/arrows.rs::Ticker::block_reaction the lit=true write for a fire arrow; the lit=false write is in place_liquid
AbstractCandleBlock.onExplosionHit port crates/horizon-client/src/game/wind.rs::Game::wind_trigger_block a wind burst puts out a lit candle; only trigger blasts do this, as in vanilla
AbstractCauldronBlock.useItemOn port crates/horizon-client/src/game.rs::Game::use_on_cauldron held item interaction with a cauldron
AbstractSkullBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class powered from the neighbour signal at placement
AbstractSkullBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::skull_neighbor_changed powered state follows the neighbour signal
AnvilBlock.useWithoutItem inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item anvil screen opened from the use result, in the station list
AnvilBlock.getMenuProvider inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item the menu itself is built by the client station code; gap: minor: only the open is here
AnvilBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate facing rotated through the state transform table
BambooStalkBlock.createBlockStateDefinition skip:data state definition comes from the block data tables
BambooStalkBlock.getShape skip:data the stalk box comes from the block data tables by leaves size
BambooStalkBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class no placement in fluid, age and stage from the bamboo below
BambooStalkBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block breaks the stalk when it cannot survive on the scheduled tick
BambooStalkBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class schedules the survive check and cycles age when the bamboo above grows
BambooStalkBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid height and stage limits for growth
BambooStalkBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal grows the stalk up to the limit
BambooStalkBlock.getHeightAboveUpToMax port crates/horizon-world/src/level/tick.rs::Sim::bamboo_height_above counts bamboo above up to the max
BambooStalkBlock.getHeightBelowUpToMax port crates/horizon-world/src/level/tick.rs::Sim::bamboo_height_below counts bamboo below up to the max
BannerBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class standing banner placement
BannerBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class a standing banner breaks when its support goes
BannerBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rotation through the state transform table
BannerBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror mirror through the state transform table
BaseCoralPlantTypeBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class waterlogged when the clicked cell is full water
BaseCoralPlantTypeBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class goes to air when it cannot survive below
BaseCoralPlantTypeBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class needs a sturdy top face below
BaseCoralPlantTypeBlock.getFluidState skip:other waterlogged water comes from the block state in the generic fluid code
BaseFireBlock.inPortalDimension inline crates/horizon-world/src/level/portal.rs::Sim::fire_can_be_placed_at the Overworld or Nether check is inside fire_can_be_placed_at
BaseFireBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy fire broken by a player emits level event 1009
BaseFireBlock.isPortal inline crates/horizon-world/src/level/portal.rs::Sim::fire_can_be_placed_at the portal frame check and axis pick are inside fire_can_be_placed_at
BasePressurePlateBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class goes to air when it cannot survive below
BasePressurePlateBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class rigid block or centre support below
BasePressurePlateBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block re-checks the pressed signal on the scheduled tick
BasePressurePlateBlock.entityInside port crates/horizon-world/src/level/hooks.rs::Sim::entity_inside an entity pressing an unpowered plate runs the pressed check
BasePressurePlateBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal a powered plate removed updates its neighbours
BasePressurePlateBlock.getEntityCount inline crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_strength counts entities in the detection area
BaseRailBlock.isRail port crates/horizon-world/src/level/rails.rs::Sim::is_rail rail test on a block state
BaseRailBlock.getShape skip:data the rail box comes from the block data tables; rail_shape only reads the shape property
BaseRailBlock.onPlace port crates/horizon-world/src/level/rails.rs::Sim::rail_place the placed rail takes its shape and connections
BaseRailBlock.neighborChanged port crates/horizon-world/src/level/rails.rs::Sim::rail_neighbor_changed neighbour update of a rail
BaseRailBlock.shouldBeRemoved inline crates/horizon-world/src/level/rails.rs::Sim::rail_neighbor_changed the rigid support check below and beside ascending rails is in the neighbour update
BaseRailBlock.updateDir port crates/horizon-world/src/level/rails.rs::Sim::rail_update_dir shape update for the rail's direction
BaseRailBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal rail arm updates neighbours after removal
BaseRailBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class BaseRail arm of placement
BaseRailBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rotation through the state transform table
BaseRailBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror mirror through the state transform table
BaseRailBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class BaseRail arm of the shape update
BaseRailBlock.getFluidState skip:other waterlogged water comes from the block state in the generic fluid code
BeaconBlock.useWithoutItem inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item beacon screen opened from the use result, in the station list
BeehiveBlock.hiveContainsBees inline crates/horizon-client/src/game/beehives.rs::Game::use_beehive the bees-in-hive check before angering bees in the honey harvest path
BeehiveBlock.releaseBeesAndResetHoneyLevel port crates/horizon-client/src/game/beehives.rs::Game::empty_hive gap: minor: the honey reset is not in empty_hive; set_honey_level does it
BeehiveBlock.resetHoneyLevel port crates/horizon-client/src/game/beehives.rs::GameHive::set_honey_level honey level written back to the hive
BeehiveBlock.spawnParticle inline crates/horizon-client/src/animate_tick.rs::beehive_drip the drip point from the hive shape; the honey drip particle is added there
BeehiveBlock.spawnFluidParticle inline crates/horizon-client/src/animate_tick.rs::beehive_drip the dripping honey particle position
BeehiveBlock.createBlockStateDefinition skip:data state definition comes from the block data tables
BeehiveBlock.playerWillDestroy missing player: in survival, breaking a hive with bees or honey should give the hive item back with its bees and honey level; Horizon's break path only angers the bees
BeehiveBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rotation through the state transform table
1 NaturalSpawner.getFilteredSpawningCategories port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::filtered_categories categories in spawn order, filtered by enemies, persistent and the global cap
2 NaturalSpawner.isRightDistanceToPlayerAndSpawnPoint port crates/horizon-client/src/mobs/spawn_selection.rs::right_distance 24 block player distance, respawn point distance and chunk checks
3 NaturalSpawner.getMobForSpawn inline crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_position gap: minor: no warning log when a type cannot be created; the type is skipped there
4 NaturalSpawner.isValidPositionForMob inline crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_position the far-away removal check; gap: minor: NeoForge spawn position event hook is not modelled
5 NaturalSpawner.getRandomSpawnMobAt inline crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_position the water ambient reduce roll, then the weighted pick from mobs_at
6 NaturalSpawner.isInNetherFortressBounds inline crates/horizon-client/src/mobs/spawn_selection.rs::mobs_at the monster fortress check on nether bricks comes first in mobs_at
7 NaturalSpawner.getRandomPosWithin port crates/horizon-client/src/mobs/spawn_selection.rs::spawn_category_for_chunk random column in the chunk, height up to one above the world surface
8 NaturalSpawner.SpawnState.canSpawnForCategoryGlobal port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::can_spawn_global per chunk cap from the spawnable chunk count
9 NaturalSpawner.SpawnState.canSpawnForCategoryLocal port crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::can_spawn_local local cap per player near the chunk; the debug flag is not kept
10 NoiseColumn.getBlock port crates/horizon-world/src/worldgen/structure/start.rs::NoiseColumn::get air outside the column height
11 NoiseColumn.setBlock skip:other no callers in vanilla; Horizon builds the column once and never writes it
12 PotentialCalculator.PointCharge.getPotentialChange inline crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::energy_change one charge's term charge over distance, infinity at zero distance, summed in energy_change
13 ServerExplosion.interactWithBlocks inline crates/horizon-client/src/game/explosion.rs::Game::server_explode_as shuffles the targets, runs each block's explosion hit, then pops the merged drops
14 ServerExplosion.createFire inline crates/horizon-client/src/game/explosion.rs::Game::server_explode_as one in three chance on air above a solid block, with the block's fire state
15 ServerExplosion.canTriggerBlocks inline crates/horizon-client/src/game/wind.rs::Game::wind_burst breeze charges need mob griefing before the trigger pass; the trigger-only check is implicit because only wind bursts reach it
16 ServerExplosion.StackCollector.tryMerge port crates/horizon-client/src/game/explosion.rs::add_or_append_stack merges up to 16 of the same item and damage
17 SignalGetter.getBestOwnOrNeighbourSignal missing player: an explosive sulfur cube on or next to redstone power does not light its fuse every tick; Horizon's sulfur cube only primes on fire or explosion damage and best_neighbor_signal has no own-signal part
18 SpawnData.CustomSpawnRules.checkLightBoundaries skip:java codec validation of the light limit range; Horizon decodes the limits in spawner.rs
19 StructureManager.forWorldGenRegion skip:other wraps the level as a worldgen region view; Horizon passes the level into worldgen fns, no manager object
20 StructureManager.startsForStructure inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where gap: minor: returns starts whose box holds the position, not every start the section references
21 StructureManager.fillStartsForStructure inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where the reference loop and the valid start check
22 StructureManager.getStructureAt port crates/horizon-client/src/game/structures.rs::Game::structures_reaching returns every start whose box holds the position; the caller takes the one it needs
23 StructureManager.getStructureWithPieceAt port crates/horizon-client/src/game/structures.rs::Game::structures_at gap: minor: returns names of structures with a piece at the position; no predicate filter here
24 StructureManager.matching inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where the predicate becomes the wanted closure
25 StructureManager.structureHasPieceAt inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where the piece box test behind the piece flag
26 StructureManager.getAllStructuresAt inline crates/horizon-client/src/game/structures.rs::Game::structures_reaching_where gap: minor: the chunk's full reference map is not returned; only starts whose box holds the position
27 Biome.getTemperature port crates/horizon-world/src/worldgen/biome_temperature.rs::BiomeTemperature::temperature height adjusted temperature with the 1024 entry cache
28 Biome.warmEnoughToRain port crates/horizon-world/src/worldgen/biome_temperature.rs::BiomeTemperature::warm_enough_to_rain temperature at least 0.15
29 Biome.shouldMeltFrozenOceanIcebergSlightly port crates/horizon-world/src/worldgen/biome_temperature.rs::BiomeTemperature::should_melt_frozen_ocean_iceberg_slightly temperature above 0.1
30 Biome.getGrassColor port crates/horizon-client/src/biome.rs::Biomes::grass the grass modifier on the base colour
31 Biome.getBaseGrassColor inline crates/horizon-client/src/biome.rs::Biomes::load the grass_color override, else the colormap sample, resolved at load
32 Biome.getGrassColorFromTexture port crates/horizon-client/src/biome.rs::sample grass colormap by clamped temperature and downfall
33 Biome.getFoliageColorFromTexture port crates/horizon-client/src/biome.rs::sample foliage colormap by clamped temperature and downfall
34 Biome.getDryFoliageColorFromTexture port crates/horizon-client/src/biome.rs::sample dry foliage colormap by clamped temperature and downfall
35 Biome.BiomeBuilder.putAttributes skip:java builder for the biome bootstrap; Horizon reads biome data
36 Biome.BiomeBuilder.build skip:java builder for the biome bootstrap; Horizon reads biome data
37 Biome.BiomeBuilder.toString skip:debug debug text only
38 BiomeGenerationSettings.Builder.addFeature skip:java builder for the biome bootstrap; feature lists come from data
39 BiomeGenerationSettings.PlainBuilder.addFeature skip:java builder for the biome bootstrap
40 BiomeGenerationSettings.PlainBuilder.addFeatureStepsUpTo skip:java builder for the biome bootstrap
41 BiomeGenerationSettings.PlainBuilder.build skip:java builder for the biome bootstrap
42 BiomeManager.getFiddledDistance inline crates/horizon-core/src/biome.rs::BiomeZoom::quart_at_block the eight corner distances with fiddled offsets; the nearest one is picked there
43 BiomeManager.getFiddle port crates/horizon-core/src/biome.rs::fiddle uniform offset of plus or minus 0.45
44 BiomeResolver.getBiomesWithin inline crates/horizon-world/src/worldgen/structure/start.rs::try_generate the monument's surrounding check walks the same quart box of radius 29 around the sea level
45 Climate.parameters skip:data builds parameter points from float literals in the biome bootstrap; Horizon reads quantized points from data
46 Climate.Parameter.span port crates/horizon-world/src/worldgen/climate/index.rs::Parameter::span union of two parameter ranges
47 Climate.Parameter.toString skip:debug debug text only
48 Climate.Parameter.distance port crates/horizon-world/src/worldgen/climate/index.rs::Parameter::distance distance from a value to the range
49 Climate.ParameterList.codec skip:java codec
50 Climate.ParameterList.findValueBruteForce port crates/horizon-world/src/worldgen/climate/index.rs::ClimateIndex::brute_force lowest fitness, ties keep the first entry
51 Climate.ParameterList.findValueIndex port crates/horizon-world/src/worldgen/climate/index.rs::ClimateSearch::find tree search with the previous leaf as the candidate
52 Climate.ParameterPoint.fitness port crates/horizon-world/src/worldgen/climate/index.rs::ParameterPoint::fitness sum of squared distances over the seven axes
53 Climate.RTree.create port crates/horizon-world/src/worldgen/climate/index.rs::ClimateIndex::with_branching builds the tree with the branching factor
54 Climate.RTree.build port crates/horizon-world/src/worldgen/climate/index.rs::build recursive split into buckets by the cheapest axis
55 Climate.RTree.sort inline crates/horizon-world/src/worldgen/climate/index.rs::build the axis order sort runs inside build
56 Climate.RTree.comparator port crates/horizon-world/src/worldgen/climate/index.rs::compare_space compares centres on one axis, optionally by absolute value
57 Climate.RTree.bucketize inline crates/horizon-world/src/worldgen/climate/index.rs::build buckets sliced to the bucket size inside build
58 Climate.RTree.cost inline crates/horizon-world/src/worldgen/climate/index.rs::build the summed span of each axis picks the best split inside build
59 Climate.RTree.buildParameterSpace port crates/horizon-world/src/worldgen/climate/index.rs::space union of the children's ranges per axis
60 Climate.RTree.search port crates/horizon-world/src/worldgen/climate/index.rs::ClimateSearch::find search from the root with the previous result kept
61 Climate.RTree.Node.distance port crates/horizon-world/src/worldgen/climate/index.rs::distance squared distance from the target to the node's box
62 Climate.RTree.SubTree.search port crates/horizon-world/src/worldgen/climate/index.rs::ClimateIndex::search recursive search over the children
63 Climate.Sampler.sample port crates/horizon-world/src/worldgen/climate.rs::ClimateSampler::sample samples the six climate fields at a quart
64 FixedBiomeSource.findBiomeHorizontal missing unsure: flat worlds use one fixed biome, and this override picks a random point in the box; Horizon's ring search is the generic one and draws random values in a different order
65 FixedBiomeSource.findClosestBiome3d port crates/horizon-world/src/worldgen/generator.rs::Pipeline::find_closest_biome generic 3D search; for one biome its first sample is the origin
66 MobSpawnSettings.SpawnerData.toString skip:debug debug text only
67 MultiNoiseBiomeSource.stable skip:other preset check used only by world creation dimension validation
68 MultiNoiseBiomeSource.createResolver port crates/horizon-world/src/worldgen/biome.rs::MultiNoiseBiomeSource::resolver resolver over the sampler
69 MultiNoiseBiomeSource.createResolverForChunk port crates/horizon-world/src/worldgen/biome.rs::BiomeResolver::prepare_volume samples the climate volume for the chunk; sample_prepared then resolves each quart
70 MultiNoiseBiomeSource.addDebugInfo skip:debug debug screen line with the climate values
71 AbstractBedBlock.getSleepHeight inline crates/horizon-client/src/game.rs::Game::tick_sleep the sleep height is the fixed bed top 0.5625 above the head cell; the shape is not read
72 AbstractBedBlock.onStopSleeping missing player: waking up on a straw bed in the Overworld should break it (straw_bed_rule destroy_on_leave); Horizon's wake_up never breaks the bed
73 AbstractBedBlock.kickVillagerOutOfBed missing player: right-clicking a bed a villager sleeps in neither wakes the villager nor shows the occupied message; Horizon's bed use never reads the occupied state
74 AbstractBedBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class the other half removed takes this half with it, and occupied comes from the other half
75 AbstractBedBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy creative breaking of the foot removes the head
76 AbstractBedBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class the cell in front must be replaceable; gap: minor: no world border check on that cell
77 AbstractBedBlock.getConnectedDirection port crates/horizon-world/src/level/shapes.rs::Sim::bed_neighbour_direction the way to the other half: facing from the foot, opposite from the head
78 AbstractBedBlock.getBlockType skip:other chooses the block entity half for the combiner; Horizon keeps one bed block state with no combined block entity
79 AbstractBedBlock.findBunkBedStandUpPosition inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up bunk bed branch: around the bed, a block lower, above, then the unsafe fallbacks
80 AbstractBedBlock.findStandUpPositionAtOffset inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up the offset loop; each cell goes through safe_dismount_location
81 AbstractBedBlock.createBlockStateDefinition skip:data state definition comes from the block data tables
82 AbstractBedBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by places the head in the cell the bed faces
83 AbstractBedBlock.getSeed skip:other model seed of a random block variant; beds have one model, nothing reads it
84 AbstractBedBlock.bedSurroundStandUpOffsets inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up the ten cells around the bed, built inside bed_stand_up
85 AbstractBedBlock.bedAboveStandUpOffsets inline crates/horizon-client/src/game/respawn_anchor.rs::Game::bed_stand_up the two cells on the bed, built inside bed_stand_up
86 AbstractCandleBlock.onProjectileHit port crates/horizon-client/src/arrows.rs::Ticker::block_reaction a fire arrow lights an unlit, dry candle or candle cake
87 AbstractCandleBlock.extinguish inline crates/horizon-world/src/level/fluids.rs::Sim::place_liquid gap: minor: water flow turns a lit candle off with its sound; the smoke particles and game event are not here (the candle cake click is CandleCakeBlock's)
88 AbstractCandleBlock.setLit inline crates/horizon-client/src/arrows.rs::Ticker::block_reaction the lit=true write for a fire arrow; the lit=false write is in place_liquid
89 AbstractCandleBlock.onExplosionHit port crates/horizon-client/src/game/wind.rs::Game::wind_trigger_block a wind burst puts out a lit candle; only trigger blasts do this, as in vanilla
90 AbstractCauldronBlock.useItemOn port crates/horizon-client/src/game.rs::Game::use_on_cauldron held item interaction with a cauldron
91 AbstractSkullBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class powered from the neighbour signal at placement
92 AbstractSkullBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::skull_neighbor_changed powered state follows the neighbour signal
93 AnvilBlock.useWithoutItem inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item anvil screen opened from the use result, in the station list
94 AnvilBlock.getMenuProvider inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item the menu itself is built by the client station code; gap: minor: only the open is here
95 AnvilBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate facing rotated through the state transform table
96 BambooStalkBlock.createBlockStateDefinition skip:data state definition comes from the block data tables
97 BambooStalkBlock.getShape skip:data the stalk box comes from the block data tables by leaves size
98 BambooStalkBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class no placement in fluid, age and stage from the bamboo below
99 BambooStalkBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block breaks the stalk when it cannot survive on the scheduled tick
100 BambooStalkBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class schedules the survive check and cycles age when the bamboo above grows
101 BambooStalkBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid height and stage limits for growth
102 BambooStalkBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal grows the stalk up to the limit
103 BambooStalkBlock.getHeightAboveUpToMax port crates/horizon-world/src/level/tick.rs::Sim::bamboo_height_above counts bamboo above up to the max
104 BambooStalkBlock.getHeightBelowUpToMax port crates/horizon-world/src/level/tick.rs::Sim::bamboo_height_below counts bamboo below up to the max
105 BannerBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class standing banner placement
106 BannerBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class a standing banner breaks when its support goes
107 BannerBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rotation through the state transform table
108 BannerBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror mirror through the state transform table
109 BaseCoralPlantTypeBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class waterlogged when the clicked cell is full water
110 BaseCoralPlantTypeBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class goes to air when it cannot survive below
111 BaseCoralPlantTypeBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class needs a sturdy top face below
112 BaseCoralPlantTypeBlock.getFluidState skip:other waterlogged water comes from the block state in the generic fluid code
113 BaseFireBlock.inPortalDimension inline crates/horizon-world/src/level/portal.rs::Sim::fire_can_be_placed_at the Overworld or Nether check is inside fire_can_be_placed_at
114 BaseFireBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy fire broken by a player emits level event 1009
115 BaseFireBlock.isPortal inline crates/horizon-world/src/level/portal.rs::Sim::fire_can_be_placed_at the portal frame check and axis pick are inside fire_can_be_placed_at
116 BasePressurePlateBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class goes to air when it cannot survive below
117 BasePressurePlateBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class rigid block or centre support below
118 BasePressurePlateBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block re-checks the pressed signal on the scheduled tick
119 BasePressurePlateBlock.entityInside port crates/horizon-world/src/level/hooks.rs::Sim::entity_inside an entity pressing an unpowered plate runs the pressed check
120 BasePressurePlateBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal a powered plate removed updates its neighbours
121 BasePressurePlateBlock.getEntityCount inline crates/horizon-world/src/level/redstone.rs::Sim::plate_signal_strength counts entities in the detection area
122 BaseRailBlock.isRail port crates/horizon-world/src/level/rails.rs::Sim::is_rail rail test on a block state
123 BaseRailBlock.getShape skip:data the rail box comes from the block data tables; rail_shape only reads the shape property
124 BaseRailBlock.onPlace port crates/horizon-world/src/level/rails.rs::Sim::rail_place the placed rail takes its shape and connections
125 BaseRailBlock.neighborChanged port crates/horizon-world/src/level/rails.rs::Sim::rail_neighbor_changed neighbour update of a rail
126 BaseRailBlock.shouldBeRemoved inline crates/horizon-world/src/level/rails.rs::Sim::rail_neighbor_changed the rigid support check below and beside ascending rails is in the neighbour update
127 BaseRailBlock.updateDir port crates/horizon-world/src/level/rails.rs::Sim::rail_update_dir shape update for the rail's direction
128 BaseRailBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal rail arm updates neighbours after removal
129 BaseRailBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class BaseRail arm of placement
130 BaseRailBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rotation through the state transform table
131 BaseRailBlock.mirror port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::mirror mirror through the state transform table
132 BaseRailBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class BaseRail arm of the shape update
133 BaseRailBlock.getFluidState skip:other waterlogged water comes from the block state in the generic fluid code
134 BeaconBlock.useWithoutItem inline crates/horizon-world/src/level/interact.rs::Sim::use_without_item beacon screen opened from the use result, in the station list
135 BeehiveBlock.hiveContainsBees inline crates/horizon-client/src/game/beehives.rs::Game::use_beehive the bees-in-hive check before angering bees in the honey harvest path
136 BeehiveBlock.releaseBeesAndResetHoneyLevel port crates/horizon-client/src/game/beehives.rs::Game::empty_hive gap: minor: the honey reset is not in empty_hive; set_honey_level does it
137 BeehiveBlock.resetHoneyLevel port crates/horizon-client/src/game/beehives.rs::GameHive::set_honey_level honey level written back to the hive
138 BeehiveBlock.spawnParticle inline crates/horizon-client/src/animate_tick.rs::beehive_drip the drip point from the hive shape; the honey drip particle is added there
139 BeehiveBlock.spawnFluidParticle inline crates/horizon-client/src/animate_tick.rs::beehive_drip the dripping honey particle position
140 BeehiveBlock.createBlockStateDefinition skip:data state definition comes from the block data tables
141 BeehiveBlock.playerWillDestroy missing player: in survival, breaking a hive with bees or honey should give the hive item back with its bees and honey level; Horizon's break path only angers the bees
142 BeehiveBlock.rotate port crates/horizon-world/src/worldgen/structure.rs::StateTransforms::rotate rotation through the state transform table
+148
View File
@@ -0,0 +1,148 @@
BellBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::bell_neighbor_changed Rings on a new signal and stores POWERED.
BellBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item Class::Bell arm calls bell_hit.
BellBlock.isProperHit inline crates/horizon-world/src/level/redstone.rs::Sim::bell_hit Proper-hit test is folded into bell_hit.
BellBlock.getVoxelShape skip:data Shape precomputed from the extracted block shapes (level/data.rs).
BellBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::Bell arm picks attachment and facing.
BellBlock.onExplosionHit port crates/horizon-client/src/game/wind.rs::Game::wind_trigger_block gap: player: a wind charge burst that hits a bell should ring it; Horizon sends an Up-face use that bell_hit rejects, so it stays silent. TNT does not reach this (canTriggerBlocks is false).
BellBlock.getConnectedDirection port crates/horizon-world/src/level/survive.rs::Sim::bell_connected_direction Same floor/ceiling/wall mapping.
BellBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
BellBlock.rotate skip:data Rotation is a precomputed table from extracted data (worldgen/structure.rs rotate).
BigDripleafBlock.makeShapes skip:data Shape precomputed from the extracted block shapes (level/data.rs).
BigDripleafBlock.canReplace inline crates/horizon-world/src/level/bonemeal.rs::Sim::dripleaf_can_grow_into Only used by canGrowInto; folded into dripleaf_can_grow_into.
BigDripleafBlock.place port crates/horizon-world/src/level/bonemeal.rs::Sim::dripleaf_place Sets big dripleaf with waterlogged and facing.
BigDripleafBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
BigDripleafBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal Kind::BigDripleaf arm places the stem and the leaf above.
BigDripleafBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Signal resets tilt; UNSTABLE to PARTIAL (10 ticks) to FULL (100 ticks) with sound.
BigDripleafBlock.playTiltSound inline crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Random pitch sound is inside the tick.
BigDripleafBlock.setTiltAndScheduleTick inline crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Tick path schedules the next tilt; the UNSTABLE entity path is big_dripleaf_entity_inside in hooks.rs.
BigDripleafBlock.setTilt inline crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Tilt write plus block_change game event folded into the tick.
BigDripleafBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::BigDripleaf arm takes facing from the part below.
BigDripleafBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
Block.getId skip:data Block state ids are the extracted registry indices.
Block.stateById skip:data State lookup by id over the registry built from extracted data.
Block.byItem skip:data Item to block link comes from the item table (info.block in horizon-items/src/items.rs).
Block.box skip:data Shape builder; Horizon reads precomputed shapes from extracted data.
Block.boxes skip:data Shape array builder; shapes come from extracted data.
Block.cube skip:data Shape builder; shapes come from extracted data.
Block.boxZ skip:data Shape builder; shapes come from extracted data.
Block.dropFromLootTable inline crates/horizon-client/src/game/spill.rs::GameLevel::drop_interact_loot gap: minor: returns nothing, where vanilla returns whether anything dropped; folded into the interact-loot drop.
Block.popExperience port crates/horizon-client/src/game.rs::Game::spawn_orbs gap: minor: popExperience checks the block_drops rule, and the ore XP in break_block_as_player does not.
Block.fallOn port crates/horizon-world/src/block_landing.rs::BlockLandingRegistry::fall_on Default and hay rules apply fall damage with the block's reduction.
Block.getShapeForEachState skip:java Shape lookup cache over the state table; Horizon precomputes shapes per state.
Block.tryDropExperience inline crates/horizon-client/src/game.rs::Game::break_block_as_player Sampled block XP and pop folded into the break path; silk touch zeroes it as in vanilla (hard-coded check).
Block.ShapePairKey.equals skip:java Hash key for the shape cache.
Blocks.ocelotOrParrot port crates/horizon-client/src/mobs/spawn_rules.rs::is_valid_spawn Leaves spawn rule for ocelots and parrots (VALID_SPAWN_LEAVES).
Blocks.logProperties skip:data Block.Properties builder; the values come from extracted block data.
Blocks.netherStemProperties skip:data Block.Properties builder; the values come from extracted block data.
Blocks.leavesProperties skip:data Block.Properties builder; the values come from extracted block data.
Blocks.shulkerBoxProperties skip:data Block.Properties builder; the values come from extracted block data.
Blocks.pistonProperties skip:data Block.Properties builder; the values come from extracted block data.
Blocks.candleProperties skip:data Block.Properties builder; the values come from extracted block data.
Blocks.registerLegacyStair skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
Blocks.registerStair skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
Blocks.registerSlab skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
Blocks.register skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
BrushableBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::Brushable arm schedules the 2-tick update.
BubbleColumnBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick Bubble and current particles plus whirlpool and upwards ambient sounds.
BubbleColumnBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::BubbleColumn arm schedules the water tick and the 5-tick recheck.
BubbleColumnBlock.pickupBlock missing player: an empty bucket on a bubble column should scoop a water bucket and remove the column; Horizon's bucket_pickup takes only liquids and waterlogged blocks, so nothing happens.
ButtonBlock.makeShapes skip:data Shape precomputed from the extracted block shapes (level/data.rs).
ButtonBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item Class::Button arm presses it, or consumes when already pressed.
ButtonBlock.onExplosionHit port crates/horizon-client/src/game/wind.rs::Game::wind_trigger_block Wind charge bursts use the button like a player use; TNT does not reach it.
ButtonBlock.playSound port crates/horizon-world/src/level/redstone.rs::Sim::button_press Press sound; the release sound is in button_check_pressed.
ButtonBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal Button and lever arm updates neighbours when powered and not moved.
ButtonBlock.getDirectSignal port crates/horizon-world/src/level/redstone.rs::Sim::state_direct_signal Strong power read from the per-state facts.
ButtonBlock.updateNeighbours port crates/horizon-world/src/level/redstone.rs::Sim::attached_update_neighbours Updates the button and the block it is attached to.
ButtonBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
CactusBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::cactus_random_tick Growth, cactus flower chance and reset at age 15.
CactusBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::Cactus arm schedules a 1-tick survival check.
CactusBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Solid or lava side neighbours block it; needs cactus or support tag below and no liquid above.
CampfireBlock.entityInside port crates/horizon-client/src/motion.rs::MotionWorld::check_inside_blocks Lit campfire hurts living entities through environment_hurt.
CampfireBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Waterlogged, lit, signal fire from hay below, facing from the player.
CampfireBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Waterlogged tick and signal fire from the block below.
CampfireBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid Water puts it out with the extinguish sound and sets waterlogged.
CampfireBlock.onProjectileHit missing player: a burning arrow (Flame bow) that hits an unlit campfire should light it; Horizon's projectile_hit only dispatches bells and targets.
CampfireBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
CampfireBlock.rotate skip:data Rotation is a precomputed table from extracted data.
CampfireBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
CampfireBlock.getTicker port crates/horizon-client/src/game/campfire.rs::Game::tick_campfire Cooking tick when lit, cooldown tick when unlit.
CandleBlock.useItemOn missing player: an empty hand on a lit candle should snuff it out with the extinguish sound; Horizon has no snuff path (candles only light from arrows).
CandleBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced Adding a candle to a candle with fewer than four is allowed.
CandleBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::Candle arm cycles the candle count when placed on a candle.
CandleBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Waterlogged water tick.
CandleBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
CandleBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
CandleBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid Water waterlogs the candle and puts out a lit one.
CandleCakeBlock.useItemOn missing player: an empty hand on a lit candle cake should snuff the candle; Horizon has no snuff path.
CandleCakeBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item CandleCake arm eats the cake and drops the candle.
CandleCakeBlock.candleHit missing player: the hit-on-candle check for the missing candle-cake snuff.
CandleCakeBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Candle cake drops to air when unsupported below.
CarvedPumpkinBlock.getWeatherStateFromPattern inline crates/horizon-client/src/game/golems.rs::Game::try_spawn_copper_golem Weathering comes from the copper block below; waxed blocks count as unwaxed.
CarvedPumpkinBlock.getOrCreateSnowGolemBase inline crates/horizon-client/src/game/golems.rs::Game::find_golem Snow column under the head; the lazy pattern cache is not needed.
CarvedPumpkinBlock.getOrCreateSnowGolemFull inline crates/horizon-client/src/game/golems.rs::Game::find_golem Snow golem with a pumpkin head on the snow column.
CarvedPumpkinBlock.getOrCreateIronGolemBase inline crates/horizon-client/src/game/golems.rs::Game::find_golem Iron arms and body under the head.
CarvedPumpkinBlock.getOrCreateIronGolemFull inline crates/horizon-client/src/game/golems.rs::Game::find_golem Iron golem pattern with air cells.
CarvedPumpkinBlock.getOrCreateCopperGolemBase port crates/horizon-client/src/game/golems.rs::Game::copper_golem_base Copper block under the head.
CarvedPumpkinBlock.getOrCreateCopperGolemFull inline crates/horizon-client/src/game/golems.rs::Game::try_spawn_copper_golem Copper golem spawn with the pumpkin head; the head check is in is_golem_head.
CarvedPumpkinBlock.replaceCopperBlockWithChest inline crates/horizon-client/src/game/golems.rs::Game::try_spawn_copper_golem Copper block becomes its chest with flag 2 through copper_chest_from_block.
CauldronBlock.shouldHandlePrecipitation inline crates/horizon-world/src/level/tick.rs::Sim::precipitation_tick The 5 percent rain and 10 percent snow chances are inside the precipitation tick.
CauldronBlock.handlePrecipitation port crates/horizon-world/src/level/tick.rs::Sim::precipitation_tick Rain fills to water cauldron, snow to powder snow cauldron.
CauldronBlock.receiveStalactiteDrip port crates/horizon-world/src/level/speleothem.rs::Sim::cauldron_tick Water and lava drips fill the cauldron with level events 1047 and 1046.
ChainBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Chain takes the default placement, waterlogged from the fluid.
ChainBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Waterlogged water tick, then the default update.
ChainBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
ChainBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
ChangeOverTimeBlock.getNextState port crates/horizon-world/src/level/tick.rs::Sim::copper_change_over_time Counts weathering neighbours within 4 and rolls the chance, 0.75 for unaffected.
ChangeOverTimeBlock.isSameAgeingType inline crates/horizon-world/src/level/tick.rs::Sim::copper_change_over_time Same weathering family is the WeatheringCopper check in the neighbour loop.
ChiseledBookShelfBlock.useItemOn port crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Holding a book inserts it into the hit slot.
ChiseledBookShelfBlock.useWithoutItem port crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Empty hand takes the book out of the hit slot.
ChiseledBookShelfBlock.addBook inline crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Used stat, insert sound (enchanted variant), slot update folded in.
ChiseledBookShelfBlock.removeBook inline crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Pickup sound, book given or dropped, block_change event folded in.
ChiseledBookShelfBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
ChiseledBookShelfBlock.rotate skip:data Rotation is a precomputed table from extracted data.
ChorusFlowerBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Destroys the flower when it cannot survive.
ChorusFlowerBlock.isRandomlyTicking skip:data Random tick flag per state comes from extracted data.
ChorusFlowerBlock.placeGrownFlower inline crates/horizon-world/src/level/tick.rs::Sim::chorus_flower_random_tick Sets the age and level event 1033 inside the random tick.
ChorusFlowerBlock.placeDeadFlower inline crates/horizon-world/src/level/tick.rs::Sim::chorus_flower_random_tick Sets age 5 and level event 1034 inside the random tick.
ChorusFlowerBlock.allNeighborsEmpty inline crates/horizon-world/src/level/tick.rs::Sim::chorus_flower_random_tick The all_empty check of the random tick; the worldgen copy is ChorusPlantFeature::neighbors_empty.
ChorusFlowerBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::ChorusFlower arm schedules a survival check when the side or below changes.
ChorusFlowerBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Needs a chorus plant or support tag below, or a single plant neighbour in the air.
ChorusFlowerBlock.generatePlant port crates/horizon-world/src/worldgen/chorus_plant.rs::ChorusPlantFeature::place Connects the base plant and grows the tree.
ChorusFlowerBlock.growTreeRecursive port crates/horizon-world/src/worldgen/chorus_plant.rs::ChorusPlantFeature::grow Random height, stems and flowers at the tips.
ChorusFlowerBlock.onProjectileHit missing player: an arrow or other breakable projectile hitting a chorus flower should break it and drop it; Horizon's projectile_hit only dispatches bells and targets.
ChorusPlantBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::ChorusPlant arm updates the side connection and schedules the survival check.
ChorusPlantBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Destroys the plant when it cannot survive.
ChorusPlantBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Plant or support tag below, or a plant neighbour with support under it.
ChorusPlantBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
CommandBlock.neighborChanged port crates/horizon-client/src/game/command_blocks.rs::set_powered Stores the redstone power and marks the condition when it turns on.
CommandBlock.getAnalogOutputSignal port crates/horizon-client/src/game/command_blocks.rs::analog_signal Success count of the command block.
CommandBlock.rotate skip:data Rotation is a precomputed table from extracted data.
CommandBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
ComparatorBlock.getOutputSignal port crates/horizon-world/src/level/redstone.rs::Sim::comparator_output Stored output signal of the comparator.
ComparatorBlock.calculateOutputSignal port crates/horizon-world/src/level/redstone.rs::Sim::comparator_calculate_output Compare and subtract modes against the side input.
ComparatorBlock.shouldTurnOn port crates/horizon-world/src/level/redstone.rs::Sim::diode_should_turn_on Input against side input in compare or subtract mode.
ComparatorBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item Class::Comparator arm cycles the mode with the click sound and refreshes output.
ComparatorBlock.checkTickOnNeighbor port crates/horizon-world/src/level/redstone.rs::Sim::diode_check_tick_on_neighbor Schedules the 2-tick refresh when output or power would change.
ComparatorBlock.refreshOutputState port crates/horizon-world/src/level/redstone.rs::Sim::comparator_refresh Updates the output, powered state and neighbours in front.
ComparatorBlock.triggerEvent skip:other No effect: vanilla BlockEntity.triggerEvent returns false and the comparator entity does not override it.
ComparatorBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
ComposterBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place A full composter schedules its ready tick in 20 ticks.
ComposterBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Full composter becomes ready (level 8) with the ready sound.
ComposterBlock.getContainer port crates/horizon-client/src/game/machines.rs::Containers::view Composter level picks the input, output or empty view.
ComposterBlock.InputContainer.getSlotsForFace port crates/horizon-client/src/game/machines.rs::View::slots_for_face Up face, slot 0 while the level is under 7.
ComposterBlock.InputContainer.canPlaceItemThroughFace port crates/horizon-client/src/game/composter.rs::Game::composter_container_insert Only from above, below level 7, and compostable.
ComposterBlock.InputContainer.setChanged port crates/horizon-client/src/game/composter.rs::Game::composter_container_insert Composts the item at once through addLayer.
ComposterBlock.OutputContainer.getSlotsForFace port crates/horizon-client/src/game/machines.rs::View::slots_for_face Down face, slot 0 at level 8.
ComposterBlock.OutputContainer.setChanged port crates/horizon-world/src/level/interact.rs::Behaviours::composter_empty Empties the composter to level 0.
ChestBlock.getBlockType port crates/horizon-client/src/game/storage.rs::Game::chest_partner Partner half and right-half flag give the single, first or second combine type.
ChestBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::Chest arm joins or splits a double chest with the neighbour.
ChestBlock.getShape skip:data Outline shape per state comes from extracted block shapes.
ChestBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::Chest arm sets facing, double type and waterlogged.
ChestBlock.getChestType inline crates/horizon-world/src/level/place.rs::Sim::placement_class Left or right partner check folded into the Chest placement arm.
ChestBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
ChestBlock.candidatePartnerFacing port crates/horizon-world/src/level/place.rs::Sim::chest_candidate_partner_facing Facing of a single chest on the side, when it can connect.
ChestBlock.useWithoutItem port crates/horizon-client/src/game.rs::Game::open_menu Opens the chest menu, with the open stat and piglin anger.
ChestBlock.getTicker port crates/horizon-client/src/block_entity_anim.rs::ticker Client-side lid animation ticker.
ChestBlock.isCatSittingOnChest port crates/horizon-client/src/game/storage.rs::Game::chest_blocked_at A sitting cat above blocks the chest.
ChestBlock.rotate skip:data Rotation is a precomputed table from extracted data.
ChestBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
1 BellBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::bell_neighbor_changed Rings on a new signal and stores POWERED.
2 BellBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item Class::Bell arm calls bell_hit.
3 BellBlock.isProperHit inline crates/horizon-world/src/level/redstone.rs::Sim::bell_hit Proper-hit test is folded into bell_hit.
4 BellBlock.getVoxelShape skip:data Shape precomputed from the extracted block shapes (level/data.rs).
5 BellBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::Bell arm picks attachment and facing.
6 BellBlock.onExplosionHit port crates/horizon-client/src/game/wind.rs::Game::wind_trigger_block gap: player: a wind charge burst that hits a bell should ring it; Horizon sends an Up-face use that bell_hit rejects, so it stays silent. TNT does not reach this (canTriggerBlocks is false).
7 BellBlock.getConnectedDirection port crates/horizon-world/src/level/survive.rs::Sim::bell_connected_direction Same floor/ceiling/wall mapping.
8 BellBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
9 BellBlock.rotate skip:data Rotation is a precomputed table from extracted data (worldgen/structure.rs rotate).
10 BigDripleafBlock.makeShapes skip:data Shape precomputed from the extracted block shapes (level/data.rs).
11 BigDripleafBlock.canReplace inline crates/horizon-world/src/level/bonemeal.rs::Sim::dripleaf_can_grow_into Only used by canGrowInto; folded into dripleaf_can_grow_into.
12 BigDripleafBlock.place port crates/horizon-world/src/level/bonemeal.rs::Sim::dripleaf_place Sets big dripleaf with waterlogged and facing.
13 BigDripleafBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
14 BigDripleafBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal Kind::BigDripleaf arm places the stem and the leaf above.
15 BigDripleafBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Signal resets tilt; UNSTABLE to PARTIAL (10 ticks) to FULL (100 ticks) with sound.
16 BigDripleafBlock.playTiltSound inline crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Random pitch sound is inside the tick.
17 BigDripleafBlock.setTiltAndScheduleTick inline crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Tick path schedules the next tilt; the UNSTABLE entity path is big_dripleaf_entity_inside in hooks.rs.
18 BigDripleafBlock.setTilt inline crates/horizon-world/src/level/tick.rs::Sim::big_dripleaf_tick Tilt write plus block_change game event folded into the tick.
19 BigDripleafBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::BigDripleaf arm takes facing from the part below.
20 BigDripleafBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
21 Block.getId skip:data Block state ids are the extracted registry indices.
22 Block.stateById skip:data State lookup by id over the registry built from extracted data.
23 Block.byItem skip:data Item to block link comes from the item table (info.block in horizon-items/src/items.rs).
24 Block.box skip:data Shape builder; Horizon reads precomputed shapes from extracted data.
25 Block.boxes skip:data Shape array builder; shapes come from extracted data.
26 Block.cube skip:data Shape builder; shapes come from extracted data.
27 Block.boxZ skip:data Shape builder; shapes come from extracted data.
28 Block.dropFromLootTable inline crates/horizon-client/src/game/spill.rs::GameLevel::drop_interact_loot gap: minor: returns nothing, where vanilla returns whether anything dropped; folded into the interact-loot drop.
29 Block.popExperience port crates/horizon-client/src/game.rs::Game::spawn_orbs gap: minor: popExperience checks the block_drops rule, and the ore XP in break_block_as_player does not.
30 Block.fallOn port crates/horizon-world/src/block_landing.rs::BlockLandingRegistry::fall_on Default and hay rules apply fall damage with the block's reduction.
31 Block.getShapeForEachState skip:java Shape lookup cache over the state table; Horizon precomputes shapes per state.
32 Block.tryDropExperience inline crates/horizon-client/src/game.rs::Game::break_block_as_player Sampled block XP and pop folded into the break path; silk touch zeroes it as in vanilla (hard-coded check).
33 Block.ShapePairKey.equals skip:java Hash key for the shape cache.
34 Blocks.ocelotOrParrot port crates/horizon-client/src/mobs/spawn_rules.rs::is_valid_spawn Leaves spawn rule for ocelots and parrots (VALID_SPAWN_LEAVES).
35 Blocks.logProperties skip:data Block.Properties builder; the values come from extracted block data.
36 Blocks.netherStemProperties skip:data Block.Properties builder; the values come from extracted block data.
37 Blocks.leavesProperties skip:data Block.Properties builder; the values come from extracted block data.
38 Blocks.shulkerBoxProperties skip:data Block.Properties builder; the values come from extracted block data.
39 Blocks.pistonProperties skip:data Block.Properties builder; the values come from extracted block data.
40 Blocks.candleProperties skip:data Block.Properties builder; the values come from extracted block data.
41 Blocks.registerLegacyStair skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
42 Blocks.registerStair skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
43 Blocks.registerSlab skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
44 Blocks.register skip:data Registry bootstrap; Horizon reads block definitions from extracted data.
45 BrushableBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::Brushable arm schedules the 2-tick update.
46 BubbleColumnBlock.animateTick port crates/horizon-client/src/animate_tick.rs::block_animate_tick Bubble and current particles plus whirlpool and upwards ambient sounds.
47 BubbleColumnBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::BubbleColumn arm schedules the water tick and the 5-tick recheck.
48 BubbleColumnBlock.pickupBlock missing player: an empty bucket on a bubble column should scoop a water bucket and remove the column; Horizon's bucket_pickup takes only liquids and waterlogged blocks, so nothing happens.
49 ButtonBlock.makeShapes skip:data Shape precomputed from the extracted block shapes (level/data.rs).
50 ButtonBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item Class::Button arm presses it, or consumes when already pressed.
51 ButtonBlock.onExplosionHit port crates/horizon-client/src/game/wind.rs::Game::wind_trigger_block Wind charge bursts use the button like a player use; TNT does not reach it.
52 ButtonBlock.playSound port crates/horizon-world/src/level/redstone.rs::Sim::button_press Press sound; the release sound is in button_check_pressed.
53 ButtonBlock.affectNeighborsAfterRemoval port crates/horizon-world/src/level/hooks.rs::Sim::affect_neighbors_after_removal Button and lever arm updates neighbours when powered and not moved.
54 ButtonBlock.getDirectSignal port crates/horizon-world/src/level/redstone.rs::Sim::state_direct_signal Strong power read from the per-state facts.
55 ButtonBlock.updateNeighbours port crates/horizon-world/src/level/redstone.rs::Sim::attached_update_neighbours Updates the button and the block it is attached to.
56 ButtonBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
57 CactusBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::cactus_random_tick Growth, cactus flower chance and reset at age 15.
58 CactusBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::Cactus arm schedules a 1-tick survival check.
59 CactusBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Solid or lava side neighbours block it; needs cactus or support tag below and no liquid above.
60 CampfireBlock.entityInside port crates/horizon-client/src/motion.rs::MotionWorld::check_inside_blocks Lit campfire hurts living entities through environment_hurt.
61 CampfireBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Waterlogged, lit, signal fire from hay below, facing from the player.
62 CampfireBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Waterlogged tick and signal fire from the block below.
63 CampfireBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid Water puts it out with the extinguish sound and sets waterlogged.
64 CampfireBlock.onProjectileHit missing player: a burning arrow (Flame bow) that hits an unlit campfire should light it; Horizon's projectile_hit only dispatches bells and targets.
65 CampfireBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
66 CampfireBlock.rotate skip:data Rotation is a precomputed table from extracted data.
67 CampfireBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
68 CampfireBlock.getTicker port crates/horizon-client/src/game/campfire.rs::Game::tick_campfire Cooking tick when lit, cooldown tick when unlit.
69 CandleBlock.useItemOn missing player: an empty hand on a lit candle should snuff it out with the extinguish sound; Horizon has no snuff path (candles only light from arrows).
70 CandleBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced Adding a candle to a candle with fewer than four is allowed.
71 CandleBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::Candle arm cycles the candle count when placed on a candle.
72 CandleBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Waterlogged water tick.
73 CandleBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
74 CandleBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
75 CandleBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid Water waterlogs the candle and puts out a lit one.
76 CandleCakeBlock.useItemOn missing player: an empty hand on a lit candle cake should snuff the candle; Horizon has no snuff path.
77 CandleCakeBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item CandleCake arm eats the cake and drops the candle.
78 CandleCakeBlock.candleHit missing player: the hit-on-candle check for the missing candle-cake snuff.
79 CandleCakeBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Candle cake drops to air when unsupported below.
80 CarvedPumpkinBlock.getWeatherStateFromPattern inline crates/horizon-client/src/game/golems.rs::Game::try_spawn_copper_golem Weathering comes from the copper block below; waxed blocks count as unwaxed.
81 CarvedPumpkinBlock.getOrCreateSnowGolemBase inline crates/horizon-client/src/game/golems.rs::Game::find_golem Snow column under the head; the lazy pattern cache is not needed.
82 CarvedPumpkinBlock.getOrCreateSnowGolemFull inline crates/horizon-client/src/game/golems.rs::Game::find_golem Snow golem with a pumpkin head on the snow column.
83 CarvedPumpkinBlock.getOrCreateIronGolemBase inline crates/horizon-client/src/game/golems.rs::Game::find_golem Iron arms and body under the head.
84 CarvedPumpkinBlock.getOrCreateIronGolemFull inline crates/horizon-client/src/game/golems.rs::Game::find_golem Iron golem pattern with air cells.
85 CarvedPumpkinBlock.getOrCreateCopperGolemBase port crates/horizon-client/src/game/golems.rs::Game::copper_golem_base Copper block under the head.
86 CarvedPumpkinBlock.getOrCreateCopperGolemFull inline crates/horizon-client/src/game/golems.rs::Game::try_spawn_copper_golem Copper golem spawn with the pumpkin head; the head check is in is_golem_head.
87 CarvedPumpkinBlock.replaceCopperBlockWithChest inline crates/horizon-client/src/game/golems.rs::Game::try_spawn_copper_golem Copper block becomes its chest with flag 2 through copper_chest_from_block.
88 CauldronBlock.shouldHandlePrecipitation inline crates/horizon-world/src/level/tick.rs::Sim::precipitation_tick The 5 percent rain and 10 percent snow chances are inside the precipitation tick.
89 CauldronBlock.handlePrecipitation port crates/horizon-world/src/level/tick.rs::Sim::precipitation_tick Rain fills to water cauldron, snow to powder snow cauldron.
90 CauldronBlock.receiveStalactiteDrip port crates/horizon-world/src/level/speleothem.rs::Sim::cauldron_tick Water and lava drips fill the cauldron with level events 1047 and 1046.
91 ChainBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Chain takes the default placement, waterlogged from the fluid.
92 ChainBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Waterlogged water tick, then the default update.
93 ChainBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
94 ChainBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
95 ChangeOverTimeBlock.getNextState port crates/horizon-world/src/level/tick.rs::Sim::copper_change_over_time Counts weathering neighbours within 4 and rolls the chance, 0.75 for unaffected.
96 ChangeOverTimeBlock.isSameAgeingType inline crates/horizon-world/src/level/tick.rs::Sim::copper_change_over_time Same weathering family is the WeatheringCopper check in the neighbour loop.
97 ChiseledBookShelfBlock.useItemOn port crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Holding a book inserts it into the hit slot.
98 ChiseledBookShelfBlock.useWithoutItem port crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Empty hand takes the book out of the hit slot.
99 ChiseledBookShelfBlock.addBook inline crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Used stat, insert sound (enchanted variant), slot update folded in.
100 ChiseledBookShelfBlock.removeBook inline crates/horizon-client/src/game/chiseled_bookshelf.rs::Game::use_chiseled_bookshelf Pickup sound, book given or dropped, block_change event folded in.
101 ChiseledBookShelfBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
102 ChiseledBookShelfBlock.rotate skip:data Rotation is a precomputed table from extracted data.
103 ChorusFlowerBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Destroys the flower when it cannot survive.
104 ChorusFlowerBlock.isRandomlyTicking skip:data Random tick flag per state comes from extracted data.
105 ChorusFlowerBlock.placeGrownFlower inline crates/horizon-world/src/level/tick.rs::Sim::chorus_flower_random_tick Sets the age and level event 1033 inside the random tick.
106 ChorusFlowerBlock.placeDeadFlower inline crates/horizon-world/src/level/tick.rs::Sim::chorus_flower_random_tick Sets age 5 and level event 1034 inside the random tick.
107 ChorusFlowerBlock.allNeighborsEmpty inline crates/horizon-world/src/level/tick.rs::Sim::chorus_flower_random_tick The all_empty check of the random tick; the worldgen copy is ChorusPlantFeature::neighbors_empty.
108 ChorusFlowerBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::ChorusFlower arm schedules a survival check when the side or below changes.
109 ChorusFlowerBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Needs a chorus plant or support tag below, or a single plant neighbour in the air.
110 ChorusFlowerBlock.generatePlant port crates/horizon-world/src/worldgen/chorus_plant.rs::ChorusPlantFeature::place Connects the base plant and grows the tree.
111 ChorusFlowerBlock.growTreeRecursive port crates/horizon-world/src/worldgen/chorus_plant.rs::ChorusPlantFeature::grow Random height, stems and flowers at the tips.
112 ChorusFlowerBlock.onProjectileHit missing player: an arrow or other breakable projectile hitting a chorus flower should break it and drop it; Horizon's projectile_hit only dispatches bells and targets.
113 ChorusPlantBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::ChorusPlant arm updates the side connection and schedules the survival check.
114 ChorusPlantBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Destroys the plant when it cannot survive.
115 ChorusPlantBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Plant or support tag below, or a plant neighbour with support under it.
116 ChorusPlantBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
117 CommandBlock.neighborChanged port crates/horizon-client/src/game/command_blocks.rs::set_powered Stores the redstone power and marks the condition when it turns on.
118 CommandBlock.getAnalogOutputSignal port crates/horizon-client/src/game/command_blocks.rs::analog_signal Success count of the command block.
119 CommandBlock.rotate skip:data Rotation is a precomputed table from extracted data.
120 CommandBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
121 ComparatorBlock.getOutputSignal port crates/horizon-world/src/level/redstone.rs::Sim::comparator_output Stored output signal of the comparator.
122 ComparatorBlock.calculateOutputSignal port crates/horizon-world/src/level/redstone.rs::Sim::comparator_calculate_output Compare and subtract modes against the side input.
123 ComparatorBlock.shouldTurnOn port crates/horizon-world/src/level/redstone.rs::Sim::diode_should_turn_on Input against side input in compare or subtract mode.
124 ComparatorBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item Class::Comparator arm cycles the mode with the click sound and refreshes output.
125 ComparatorBlock.checkTickOnNeighbor port crates/horizon-world/src/level/redstone.rs::Sim::diode_check_tick_on_neighbor Schedules the 2-tick refresh when output or power would change.
126 ComparatorBlock.refreshOutputState port crates/horizon-world/src/level/redstone.rs::Sim::comparator_refresh Updates the output, powered state and neighbours in front.
127 ComparatorBlock.triggerEvent skip:other No effect: vanilla BlockEntity.triggerEvent returns false and the comparator entity does not override it.
128 ComparatorBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
129 ComposterBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place A full composter schedules its ready tick in 20 ticks.
130 ComposterBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Full composter becomes ready (level 8) with the ready sound.
131 ComposterBlock.getContainer port crates/horizon-client/src/game/machines.rs::Containers::view Composter level picks the input, output or empty view.
132 ComposterBlock.InputContainer.getSlotsForFace port crates/horizon-client/src/game/machines.rs::View::slots_for_face Up face, slot 0 while the level is under 7.
133 ComposterBlock.InputContainer.canPlaceItemThroughFace port crates/horizon-client/src/game/composter.rs::Game::composter_container_insert Only from above, below level 7, and compostable.
134 ComposterBlock.InputContainer.setChanged port crates/horizon-client/src/game/composter.rs::Game::composter_container_insert Composts the item at once through addLayer.
135 ComposterBlock.OutputContainer.getSlotsForFace port crates/horizon-client/src/game/machines.rs::View::slots_for_face Down face, slot 0 at level 8.
136 ComposterBlock.OutputContainer.setChanged port crates/horizon-world/src/level/interact.rs::Behaviours::composter_empty Empties the composter to level 0.
137 ChestBlock.getBlockType port crates/horizon-client/src/game/storage.rs::Game::chest_partner Partner half and right-half flag give the single, first or second combine type.
138 ChestBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Class::Chest arm joins or splits a double chest with the neighbour.
139 ChestBlock.getShape skip:data Outline shape per state comes from extracted block shapes.
140 ChestBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Class::Chest arm sets facing, double type and waterlogged.
141 ChestBlock.getChestType inline crates/horizon-world/src/level/place.rs::Sim::placement_class Left or right partner check folded into the Chest placement arm.
142 ChestBlock.getFluidState port crates/horizon-world/src/level/mod.rs::Behaviours::fluid Waterlogged fluid is read from per-state facts.
143 ChestBlock.candidatePartnerFacing port crates/horizon-world/src/level/place.rs::Sim::chest_candidate_partner_facing Facing of a single chest on the side, when it can connect.
144 ChestBlock.useWithoutItem port crates/horizon-client/src/game.rs::Game::open_menu Opens the chest menu, with the open stat and piglin anger.
145 ChestBlock.getTicker port crates/horizon-client/src/block_entity_anim.rs::ticker Client-side lid animation ticker.
146 ChestBlock.isCatSittingOnChest port crates/horizon-client/src/game/storage.rs::Game::chest_blocked_at A sitting cat above blocks the chest.
147 ChestBlock.rotate skip:data Rotation is a precomputed table from extracted data.
148 ChestBlock.createBlockStateDefinition skip:data Block state properties come from extracted data.
+148
View File
@@ -0,0 +1,148 @@
ConcretePowderBlock.onLand port crates/horizon-world/src/level/falling.rs::Behaviours::falling_block_landed landing branch turns the powder to concrete when the spot is water or touches liquid
ConcretePowderBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class ConcretePowder arm: concrete when the clicked spot is water or touches liquid
ConcretePowderBlock.shouldSolidify inline crates/horizon-world/src/level/falling.rs::Behaviours::falling_block_landed gap: minor: both overloads folded into the landing branch; only the water fluid test, canBeHydrated is not read
ConcretePowderBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class concrete arm: turns to concrete when touching liquid, else default shape
CopperBulbBlock.onPlace inline crates/horizon-world/src/level/hooks.rs::Sim::on_place copper_bulb_check runs on placement when the old block differs
CopperBulbBlock.neighborChanged inline crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed arm calls copper_bulb_check (checkAndFlip) on neighbour change
CopperBulbBlock.createBlockStateDefinition skip:data lit and powered properties come from the block state tables
CopperBulbBlock.getAnalogOutputSignal port crates/horizon-world/src/level/redstone.rs::Sim::analog_output CopperBulb arm: 15 when lit, else 0
CopperChestBlock.getHingeSound inline crates/horizon-client/src/mobs/transport_items.rs::open_or_close weathered, oxidized and plain open and close sound ids are chosen inside open_or_close
CopperGolemStatueBlock.createBlockStateDefinition skip:data facing, pose and waterlogged properties come from the block state tables
CopperGolemStatueBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class facing opposite the player and waterlogged when the spot is water
CopperGolemStatueBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
CopperGolemStatueBlock.updatePose inline crates/horizon-world/src/level/interact.rs::Behaviours::turn_statue become-statue sound, pose cycle and block_change game event are folded into turn_statue
CopperGolemStatueBlock.isPathfindable skip:data path types come from the per-state path data (mobs/path.rs)
CopperGolemStatueBlock.getCloneItemStack port crates/horizon-client/src/game/block_items.rs::Game::picked_stack gap: player: the picked statue does not get its pose in block_state, so a middle-click pick gives it standing
CopperGolemStatueBlock.getFluidState skip:data waterlogged water source comes from the per-state fluid facts table (Level::fluid)
CopperGolemStatueBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class statue arm runs waterlogged_tick then the default shape update
CrafterBlock.getAnalogOutputSignal port crates/horizon-client/src/game/machines.rs::Containers::signal crafter signal is the filled or disabled slot count from the block entity
CrafterBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Crafter arm sets orientation from look direction and triggered from neighbour signal
CrafterBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by schedules the 4-tick crafter tick when triggered
CrafterBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
CrafterBlock.mirror skip:data mirror results come from the exported BlockState mirror table (worldgen/structure.rs)
CrafterBlock.createBlockStateDefinition skip:data orientation, triggered and crafting properties come from the block state tables
CraftingTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item CraftingTable arm opens the menu; the interact_with_crafting_table stat is awarded in Game::open_station
CreakingHeartBlock.getTicker port crates/horizon-world/src/level/creaking.rs::Sim::heart_tick scheduled heart tick; the uprooted check is done inside heart_update_state
CreakingHeartBlock.animateTick missing player: the creak idle sound near a heart with its logs at night is never played (no creaking_heart.idle sound in Horizon)
CreakingHeartBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class CreakingHeart arm schedules the 1-tick heart update then the default shape
CreakingHeartBlock.isSurroundedByLogs missing player: the six-side pale oak log check only gates the idle creak sound in animateTick
CreakingHeartBlock.createBlockStateDefinition skip:data axis, creaking_heart_state and natural properties come from the block state tables
CreakingHeartBlock.tryAwardExperience inline crates/horizon-client/src/game/creaking.rs::Game::creaking_heart_broken natural heart drops 20-24 xp orbs when broken by a player outside creative and spectator
CreakingHeartBlock.getAnalogOutputSignal port crates/horizon-client/src/mobs/creaking_heart.rs::output_signal gap: minor: distance-based signal, no explicit uprooted check; a heart with no creaking or protector gives 0
CropBlock.growCrops inline crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal crop arm adds the bonemeal age increase capped at max age and sets the state
CropBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Crop arm: raw light of at least 8 and the supports_crops ground check
CropBlock.entityInside missing player: ravagers no longer trample crops they walk into; Horizon only breaks leaves for ravagers
DaylightDetectorBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item DaylightDetector arm checks mayBuild, cycles inverted, sends block change and updates the signal
DaylightDetectorBlock.getTicker port crates/horizon-world/src/level/mod.rs::Behaviours::tick_daylight_detector gap: minor: every 20 game ticks; only the Nether is skipped here, the End has no sky light but is not excluded
DaylightDetectorBlock.createBlockStateDefinition skip:data power and inverted properties come from the block state tables
DecoratedPotBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class DecoratedPot arm: waterlogged tick then the default shape update
DecoratedPotBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class DecoratedPot arm: facing from the player, waterlogged from the spot, cracked false
DecoratedPotBlock.useWithoutItem port crates/horizon-client/src/game/decorated_pot.rs::Game::use_decorated_pot empty-hand path plays insert_fail, negative wobble and block change
DecoratedPotBlock.createBlockStateDefinition skip:data facing, waterlogged and cracked properties come from the block state tables
DecoratedPotBlock.getFluidState skip:data waterlogged water source comes from the per-state fluid facts table (Level::fluid)
DecoratedPotBlock.onProjectileHit missing player: a projectile hitting a pot does not crack it, and the pot is not broken by the hit
DecoratedPotBlock.getCloneItemStack missing player: middle-click pick of a pot gives an empty pot, not one with its sherd decorations
DecoratedPotBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
DetectorRailBlock.entityInside port crates/horizon-world/src/level/hooks.rs::Sim::entity_inside when not powered, checks for minecarts inside the search box
DetectorRailBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block when powered, rechecks the minecart presence
DetectorRailBlock.getDirectSignal skip:data the power to the block above comes from the per-state strong signal facts (direct_signal default arm)
DetectorRailBlock.updatePowerToConnected inline crates/horizon-world/src/level/rails.rs::Sim::detector_rail_check_pressed neighbour notify on the connected rails is folded into check_pressed
DetectorRailBlock.onPlace inline crates/horizon-world/src/level/hooks.rs::Sim::on_place rail state update and check_pressed on a new placement
DetectorRailBlock.getSearchBB inline crates/horizon-world/src/level/rails.rs::Sim::detector_rail_check_pressed the 0.2-inset search box is built inline
DetectorRailBlock.rotate skip:data rail shape rotation comes from the exported BlockState rotate table (worldgen/structure.rs)
DetectorRailBlock.mirror skip:data rail shape mirror comes from the exported BlockState mirror table (worldgen/structure.rs)
DetectorRailBlock.createBlockStateDefinition skip:data shape, powered and waterlogged properties come from the block state tables
DiodeBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Diode arm: the block below must be a rigid sturdy face
DiodeBlock.getInputSignal port crates/horizon-world/src/level/redstone.rs::Sim::diode_input_signal input from the facing target, wire power, comparator analog and conductor cases
DiodeBlock.getAlternateSignal port crates/horizon-world/src/level/redstone.rs::Sim::diode_alternate_signal maximum of the two side control inputs
DiodeBlock.ownSignal skip:data the output while powered comes from the per-state weak signal facts (state_signal default arm)
DiodeBlock.getSignal skip:data the facing check and output per side come from the per-state weak signal facts (state_signal default arm)
DiodeBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by schedules the 1-tick update when the diode should turn on
DiodeBlock.updateNeighborsInFront port crates/horizon-world/src/level/redstone.rs::Sim::diode_update_neighbors_in_front neighbour notify on the block behind the output
DiodeBlock.shouldPrioritize port crates/horizon-world/src/level/redstone.rs::Sim::diode_should_prioritize checks for a diode facing back at it
DispenserBlock.registerProjectileBehavior inline crates/horizon-client/src/game/dispenser.rs::Game::dispense_item egg, snowball and wind charge dispense as projectiles in dispense_item
DispenserBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::dispenser_neighbor_changed a signal at the block or above starts a 4-tick dispense and sets triggered
DispenserBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
DispenserBlock.createBlockStateDefinition skip:data facing and triggered properties come from the block state tables
DoorBlock.getShape skip:data outline shapes come from the per-state shape table (facts shape index)
DoorBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Door arm: the other half follows, and the lower half breaks when unsupported
DoorBlock.onExplosionHit missing player: a wind charge blast does not swing a door open; canOpenByWindCharge is read from data but no code uses it
DoorBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy creative break of the upper half removes the lower half without drops
DoorBlock.isPathfindable skip:data path types come from the per-state path data (mobs/path.rs)
DoorBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by Door branch places the upper half
DoorBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::door_neighbor_changed redstone power toggles the door open and plays the sound
DoorBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Door arm: lower half needs a sturdy face below, upper half needs the same door below
DoorBlock.playSound port crates/horizon-world/src/level/redstone.rs::Sim::door_sound open or close sound from the block set type with a random pitch
DoorBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
DoorBlock.mirror skip:data mirror results come from the exported BlockState mirror table (worldgen/structure.rs)
DoorBlock.getSeed skip:other other: only seeds a random model offset, and doors have no offset type
DoorBlock.createBlockStateDefinition skip:data half, facing, open, hinge and powered properties come from the block state tables
DoublePlantBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class DoublePlant arm: the partner half follows, and the lower half breaks when unsupported
DoublePlantBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class DoublePlant arm: needs room below the build limit and a replaceable block above
DoublePlantBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by DoublePlant branch places the upper half, waterlogged from its own spot
DoublePlantBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class DoublePlant arm: upper half needs the lower half of the same block below
DoublePlantBlock.copyWaterloggedFrom inline crates/horizon-world/src/level/place.rs::Sim::set_placed_by upper half waterlogged from the water at its spot, inline in set_placed_by
DoublePlantBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy gap: minor: only the creative bottom-half removal is read here, the drop branch is not
DoublePlantBlock.preventDropFromBottomPart inline crates/horizon-world/src/level/hooks.rs::Sim::player_destroy bottom half removed without drops on a creative break of the upper half
DoublePlantBlock.getSeed port crates/horizon-client/src/mesher.rs::offset gap: minor: the jitter seed uses y 0 for every block, vanilla uses the lower half's y, so tall grass and flower offsets differ
DriedGhastBlock.createBlockStateDefinition skip:data facing, hydration_level and waterlogged properties come from the block state tables
DriedGhastBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class DriedGhast arm: waterlogged tick, then the default shape update
DriedGhastBlock.tickWaterlogged inline crates/horizon-world/src/level/timeline.rs::Sim::dried_ghast_tick waterlogged branch: transition sound and hydration plus one, or the ghastling spawn event at full hydration
DriedGhastBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class DriedGhast arm: waterlogged from the spot and facing opposite the player
DriedGhastBlock.getFluidState skip:data waterlogged water source comes from the per-state fluid facts table (Level::fluid)
DriedGhastBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid gap: player: waterlogs the block like the generic path, but plays no dried ghast place-in-water sound
DriedGhastBlock.setPlacedBy missing player: no dried ghast placement sound is played on placing it (no dried_ghast place or place-in-water sound id is referenced)
EndGatewayBlock.getPortalDestination port crates/horizon-client/src/game/end.rs::Game::gateway_job gap: minor: the thrown ender pearl branch (no relative flags) is not read, only the player travels through gateways here
EndPortalFrameBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class EndPortalFrame arm: facing opposite the player and eye set to false
EndPortalFrameBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
EndPortalFrameBlock.createBlockStateDefinition skip:data facing and eye properties come from the block state tables
EntityBlock.getListener inline crates/horizon-client/src/game/sculk.rs::Game::post_game_event gap: minor: listeners within reach are found in post_game_event, which reads only the sculk listener tables
EyeblossomBlock.randomTick port crates/horizon-world/src/level/timeline.rs::Sim::eyeblossom_tick random tick runs tryChangingState and picks the long switch sound
FaceAttachedHorizontalDirectionalBlock.canAttach inline crates/horizon-world/src/level/survive.rs::Sim::can_survive_class the sturdy-face test on the attached side is inline in the FaceAttached arm
FaceAttachedHorizontalDirectionalBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class FaceAttached arm: tries the nearest looking directions and keeps the first that survives
FaceAttachedHorizontalDirectionalBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class FaceAttached arm: breaks when the attached side is no longer sturdy
FallingBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class FallingBlock arm schedules the falling tick (2, or 5 for dragon egg) then the default shape
FarmlandBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Farmland arm schedules a 1-tick check when the block above changes and farmland cannot survive
FarmlandBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Farmland arm: survives when the block above is not solid or maintains farmland
FarmlandBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Farmland arm: the base block when farmland cannot survive at the spot
FarmlandBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Farmland arm turns the block to its base when it cannot survive
FarmlandBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::farmland_random_tick moisture falls or rises with water in reach and rain above, else turns to base
FarmlandBlock.turnToBaseBlock port crates/horizon-world/src/level/tick.rs::Sim::turn_to_base_block gap: player: entities standing on it are not pushed up when it turns to dirt (pushEntitiesUp is not read)
FarmlandBlock.isNearWater inline crates/horizon-world/src/level/tick.rs::Sim::farmland_random_tick gap: minor: the 9x2x9 water search is inline and tests the water fluid only, not canBeHydrated
FenceBlock.isSameFence inline crates/horizon-world/src/level/shapes.rs::Sim::fence_connects_to the same-fence test (fence tag and wooden match) is inline in fence_connects_to
FenceBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Fence arm: each horizontal side connects per neighbour and waterlogged from the spot
FenceBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Fence arm: waterlogged tick and the horizontal side connection update
FenceBlock.createBlockStateDefinition skip:data north, east, south, west and waterlogged properties come from the block state tables
FireBlock.makeShapes skip:data the per-age and per-side outline shapes come from the per-state shape table
FireBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Fire arm: keeps the fire with its age when it can survive, else air
FireBlock.getStateForPlacement port crates/horizon-world/src/level/shapes.rs::Sim::fire_state_for fire state from the sides that can catch fire, or the plain fire when the spot below is sturdy
FireBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Fire arm: a sturdy block below or a valid fire location
FireBlock.isNearRain port crates/horizon-world/src/level/tick.rs::Sim::fire_near_rain rain at the spot or on one of its four sides
FireBlock.getBurnOdds port crates/horizon-world/src/level/survive.rs::Sim::burn_odds waterlogged blocks never burn, else the burn odds table
FireBlock.checkBurnOut port crates/horizon-world/src/level/tick.rs::Sim::fire_check_burn_out burn-out roll that either ages the fire or removes the block
FireBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place Fire arm: base fire placement, then the fire tick scheduled at 30 plus a random 0 to 9
FireBlock.createBlockStateDefinition skip:data age and the per-side properties come from the block state tables
FireBlock.setFlammable skip:data flammability odds are data (burn odds table read by survive.rs), set by the registry bootstrap
FireBlock.bootStrap skip:data registry bootstrap of the flammable blocks; Horizon reads the odds from data tables
FlowerPotBlock.useItemOn missing player: right-clicking an empty flower pot with a flower or sapling does nothing, so no potted plant can be made
FlowerPotBlock.useWithoutItem missing player: right-clicking a potted plant with an empty hand does not take the plant out
FlowerPotBlock.getCloneItemStack missing player: middle-click pick of a potted plant gives an empty flower pot, not the plant
FlowerPotBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class FlowerPot arm: breaks when the block under it stops supporting it
GrassBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid grass arm: air above and inside build height
GrassBlock.stopBonemealSpread inline crates/horizon-world/src/level/bonemeal.rs::Sim::grass_bonemeal the per-step stop test (grass below, full collision at the spot) is inline in the attempt loop
GrowingPlantBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class GrowingPlant arm: attached to a supporting face, a body or a head on the growth side
GrowingPlantBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block GrowingPlant is in the tick list that breaks the plant when it cannot survive
GrowingPlantBodyBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class GrowingPlantBody arm: 1-tick survival check, and a random-age head replaces the body when the growth side opens
GrowingPlantBodyBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid PlantBody arm: finds the head and checks its growth spot
GrowingPlantBodyBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal PlantBody arm forwards to the head's bonemeal growth
GrowingPlantBodyBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced GrowingPlantBody arm: not replaceable by a held head item
GrowingPlantHeadBlock.isRandomlyTicking skip:data the random-ticking flag per state comes from the exported facts (Level::is_randomly_ticking)
GrowingPlantHeadBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block GrowingPlantHead arm: below age 25 and the growth roll grows it into the next spot
GrowingPlantHeadBlock.isMaxAge skip:other other: an AGE == 25 predicate that no pinned game code calls for plant heads (only crop, loot and villager code use isMaxAge)
GrowingPlantHeadBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class GrowingPlantHead arm: 1-tick survival check, and turns to body when the head or body sits on the growth side
GrowingPlantHeadBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid PlantHead arm: the growth spot is free and inside build height
HangingMossBlock.canStayAtPosition port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class HangingMoss arm: attaches above to a multiface or to another moss
HangingMossBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class HangingMoss arm: 1-tick check when unattached, and the tip follows the block below
HangingMossBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block HangingMoss arm breaks the moss when it cannot stay
HangingMossBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid HangingMoss arm: air below the tip inside build height
HangingMossBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal HangingMoss arm sets the tip on the air below the tip
1 ConcretePowderBlock.onLand port crates/horizon-world/src/level/falling.rs::Behaviours::falling_block_landed landing branch turns the powder to concrete when the spot is water or touches liquid
2 ConcretePowderBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class ConcretePowder arm: concrete when the clicked spot is water or touches liquid
3 ConcretePowderBlock.shouldSolidify inline crates/horizon-world/src/level/falling.rs::Behaviours::falling_block_landed gap: minor: both overloads folded into the landing branch; only the water fluid test, canBeHydrated is not read
4 ConcretePowderBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class concrete arm: turns to concrete when touching liquid, else default shape
5 CopperBulbBlock.onPlace inline crates/horizon-world/src/level/hooks.rs::Sim::on_place copper_bulb_check runs on placement when the old block differs
6 CopperBulbBlock.neighborChanged inline crates/horizon-world/src/level/hooks.rs::Sim::neighbor_changed arm calls copper_bulb_check (checkAndFlip) on neighbour change
7 CopperBulbBlock.createBlockStateDefinition skip:data lit and powered properties come from the block state tables
8 CopperBulbBlock.getAnalogOutputSignal port crates/horizon-world/src/level/redstone.rs::Sim::analog_output CopperBulb arm: 15 when lit, else 0
9 CopperChestBlock.getHingeSound inline crates/horizon-client/src/mobs/transport_items.rs::open_or_close weathered, oxidized and plain open and close sound ids are chosen inside open_or_close
10 CopperGolemStatueBlock.createBlockStateDefinition skip:data facing, pose and waterlogged properties come from the block state tables
11 CopperGolemStatueBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class facing opposite the player and waterlogged when the spot is water
12 CopperGolemStatueBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
13 CopperGolemStatueBlock.updatePose inline crates/horizon-world/src/level/interact.rs::Behaviours::turn_statue become-statue sound, pose cycle and block_change game event are folded into turn_statue
14 CopperGolemStatueBlock.isPathfindable skip:data path types come from the per-state path data (mobs/path.rs)
15 CopperGolemStatueBlock.getCloneItemStack port crates/horizon-client/src/game/block_items.rs::Game::picked_stack gap: player: the picked statue does not get its pose in block_state, so a middle-click pick gives it standing
16 CopperGolemStatueBlock.getFluidState skip:data waterlogged water source comes from the per-state fluid facts table (Level::fluid)
17 CopperGolemStatueBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class statue arm runs waterlogged_tick then the default shape update
18 CrafterBlock.getAnalogOutputSignal port crates/horizon-client/src/game/machines.rs::Containers::signal crafter signal is the filled or disabled slot count from the block entity
19 CrafterBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Crafter arm sets orientation from look direction and triggered from neighbour signal
20 CrafterBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by schedules the 4-tick crafter tick when triggered
21 CrafterBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
22 CrafterBlock.mirror skip:data mirror results come from the exported BlockState mirror table (worldgen/structure.rs)
23 CrafterBlock.createBlockStateDefinition skip:data orientation, triggered and crafting properties come from the block state tables
24 CraftingTableBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item CraftingTable arm opens the menu; the interact_with_crafting_table stat is awarded in Game::open_station
25 CreakingHeartBlock.getTicker port crates/horizon-world/src/level/creaking.rs::Sim::heart_tick scheduled heart tick; the uprooted check is done inside heart_update_state
26 CreakingHeartBlock.animateTick missing player: the creak idle sound near a heart with its logs at night is never played (no creaking_heart.idle sound in Horizon)
27 CreakingHeartBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class CreakingHeart arm schedules the 1-tick heart update then the default shape
28 CreakingHeartBlock.isSurroundedByLogs missing player: the six-side pale oak log check only gates the idle creak sound in animateTick
29 CreakingHeartBlock.createBlockStateDefinition skip:data axis, creaking_heart_state and natural properties come from the block state tables
30 CreakingHeartBlock.tryAwardExperience inline crates/horizon-client/src/game/creaking.rs::Game::creaking_heart_broken natural heart drops 20-24 xp orbs when broken by a player outside creative and spectator
31 CreakingHeartBlock.getAnalogOutputSignal port crates/horizon-client/src/mobs/creaking_heart.rs::output_signal gap: minor: distance-based signal, no explicit uprooted check; a heart with no creaking or protector gives 0
32 CropBlock.growCrops inline crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal crop arm adds the bonemeal age increase capped at max age and sets the state
33 CropBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Crop arm: raw light of at least 8 and the supports_crops ground check
34 CropBlock.entityInside missing player: ravagers no longer trample crops they walk into; Horizon only breaks leaves for ravagers
35 DaylightDetectorBlock.useWithoutItem port crates/horizon-world/src/level/interact.rs::Sim::use_without_item DaylightDetector arm checks mayBuild, cycles inverted, sends block change and updates the signal
36 DaylightDetectorBlock.getTicker port crates/horizon-world/src/level/mod.rs::Behaviours::tick_daylight_detector gap: minor: every 20 game ticks; only the Nether is skipped here, the End has no sky light but is not excluded
37 DaylightDetectorBlock.createBlockStateDefinition skip:data power and inverted properties come from the block state tables
38 DecoratedPotBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class DecoratedPot arm: waterlogged tick then the default shape update
39 DecoratedPotBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class DecoratedPot arm: facing from the player, waterlogged from the spot, cracked false
40 DecoratedPotBlock.useWithoutItem port crates/horizon-client/src/game/decorated_pot.rs::Game::use_decorated_pot empty-hand path plays insert_fail, negative wobble and block change
41 DecoratedPotBlock.createBlockStateDefinition skip:data facing, waterlogged and cracked properties come from the block state tables
42 DecoratedPotBlock.getFluidState skip:data waterlogged water source comes from the per-state fluid facts table (Level::fluid)
43 DecoratedPotBlock.onProjectileHit missing player: a projectile hitting a pot does not crack it, and the pot is not broken by the hit
44 DecoratedPotBlock.getCloneItemStack missing player: middle-click pick of a pot gives an empty pot, not one with its sherd decorations
45 DecoratedPotBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
46 DetectorRailBlock.entityInside port crates/horizon-world/src/level/hooks.rs::Sim::entity_inside when not powered, checks for minecarts inside the search box
47 DetectorRailBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block when powered, rechecks the minecart presence
48 DetectorRailBlock.getDirectSignal skip:data the power to the block above comes from the per-state strong signal facts (direct_signal default arm)
49 DetectorRailBlock.updatePowerToConnected inline crates/horizon-world/src/level/rails.rs::Sim::detector_rail_check_pressed neighbour notify on the connected rails is folded into check_pressed
50 DetectorRailBlock.onPlace inline crates/horizon-world/src/level/hooks.rs::Sim::on_place rail state update and check_pressed on a new placement
51 DetectorRailBlock.getSearchBB inline crates/horizon-world/src/level/rails.rs::Sim::detector_rail_check_pressed the 0.2-inset search box is built inline
52 DetectorRailBlock.rotate skip:data rail shape rotation comes from the exported BlockState rotate table (worldgen/structure.rs)
53 DetectorRailBlock.mirror skip:data rail shape mirror comes from the exported BlockState mirror table (worldgen/structure.rs)
54 DetectorRailBlock.createBlockStateDefinition skip:data shape, powered and waterlogged properties come from the block state tables
55 DiodeBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Diode arm: the block below must be a rigid sturdy face
56 DiodeBlock.getInputSignal port crates/horizon-world/src/level/redstone.rs::Sim::diode_input_signal input from the facing target, wire power, comparator analog and conductor cases
57 DiodeBlock.getAlternateSignal port crates/horizon-world/src/level/redstone.rs::Sim::diode_alternate_signal maximum of the two side control inputs
58 DiodeBlock.ownSignal skip:data the output while powered comes from the per-state weak signal facts (state_signal default arm)
59 DiodeBlock.getSignal skip:data the facing check and output per side come from the per-state weak signal facts (state_signal default arm)
60 DiodeBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by schedules the 1-tick update when the diode should turn on
61 DiodeBlock.updateNeighborsInFront port crates/horizon-world/src/level/redstone.rs::Sim::diode_update_neighbors_in_front neighbour notify on the block behind the output
62 DiodeBlock.shouldPrioritize port crates/horizon-world/src/level/redstone.rs::Sim::diode_should_prioritize checks for a diode facing back at it
63 DispenserBlock.registerProjectileBehavior inline crates/horizon-client/src/game/dispenser.rs::Game::dispense_item egg, snowball and wind charge dispense as projectiles in dispense_item
64 DispenserBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::dispenser_neighbor_changed a signal at the block or above starts a 4-tick dispense and sets triggered
65 DispenserBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
66 DispenserBlock.createBlockStateDefinition skip:data facing and triggered properties come from the block state tables
67 DoorBlock.getShape skip:data outline shapes come from the per-state shape table (facts shape index)
68 DoorBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Door arm: the other half follows, and the lower half breaks when unsupported
69 DoorBlock.onExplosionHit missing player: a wind charge blast does not swing a door open; canOpenByWindCharge is read from data but no code uses it
70 DoorBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy creative break of the upper half removes the lower half without drops
71 DoorBlock.isPathfindable skip:data path types come from the per-state path data (mobs/path.rs)
72 DoorBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by Door branch places the upper half
73 DoorBlock.neighborChanged port crates/horizon-world/src/level/redstone.rs::Sim::door_neighbor_changed redstone power toggles the door open and plays the sound
74 DoorBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Door arm: lower half needs a sturdy face below, upper half needs the same door below
75 DoorBlock.playSound port crates/horizon-world/src/level/redstone.rs::Sim::door_sound open or close sound from the block set type with a random pitch
76 DoorBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
77 DoorBlock.mirror skip:data mirror results come from the exported BlockState mirror table (worldgen/structure.rs)
78 DoorBlock.getSeed skip:other other: only seeds a random model offset, and doors have no offset type
79 DoorBlock.createBlockStateDefinition skip:data half, facing, open, hinge and powered properties come from the block state tables
80 DoublePlantBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class DoublePlant arm: the partner half follows, and the lower half breaks when unsupported
81 DoublePlantBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class DoublePlant arm: needs room below the build limit and a replaceable block above
82 DoublePlantBlock.setPlacedBy port crates/horizon-world/src/level/place.rs::Sim::set_placed_by DoublePlant branch places the upper half, waterlogged from its own spot
83 DoublePlantBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class DoublePlant arm: upper half needs the lower half of the same block below
84 DoublePlantBlock.copyWaterloggedFrom inline crates/horizon-world/src/level/place.rs::Sim::set_placed_by upper half waterlogged from the water at its spot, inline in set_placed_by
85 DoublePlantBlock.playerWillDestroy port crates/horizon-world/src/level/hooks.rs::Sim::player_destroy gap: minor: only the creative bottom-half removal is read here, the drop branch is not
86 DoublePlantBlock.preventDropFromBottomPart inline crates/horizon-world/src/level/hooks.rs::Sim::player_destroy bottom half removed without drops on a creative break of the upper half
87 DoublePlantBlock.getSeed port crates/horizon-client/src/mesher.rs::offset gap: minor: the jitter seed uses y 0 for every block, vanilla uses the lower half's y, so tall grass and flower offsets differ
88 DriedGhastBlock.createBlockStateDefinition skip:data facing, hydration_level and waterlogged properties come from the block state tables
89 DriedGhastBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class DriedGhast arm: waterlogged tick, then the default shape update
90 DriedGhastBlock.tickWaterlogged inline crates/horizon-world/src/level/timeline.rs::Sim::dried_ghast_tick waterlogged branch: transition sound and hydration plus one, or the ghastling spawn event at full hydration
91 DriedGhastBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class DriedGhast arm: waterlogged from the spot and facing opposite the player
92 DriedGhastBlock.getFluidState skip:data waterlogged water source comes from the per-state fluid facts table (Level::fluid)
93 DriedGhastBlock.placeLiquid port crates/horizon-world/src/level/fluids.rs::Sim::place_liquid gap: player: waterlogs the block like the generic path, but plays no dried ghast place-in-water sound
94 DriedGhastBlock.setPlacedBy missing player: no dried ghast placement sound is played on placing it (no dried_ghast place or place-in-water sound id is referenced)
95 EndGatewayBlock.getPortalDestination port crates/horizon-client/src/game/end.rs::Game::gateway_job gap: minor: the thrown ender pearl branch (no relative flags) is not read, only the player travels through gateways here
96 EndPortalFrameBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class EndPortalFrame arm: facing opposite the player and eye set to false
97 EndPortalFrameBlock.rotate skip:data rotation results come from the exported BlockState rotate table (worldgen/structure.rs)
98 EndPortalFrameBlock.createBlockStateDefinition skip:data facing and eye properties come from the block state tables
99 EntityBlock.getListener inline crates/horizon-client/src/game/sculk.rs::Game::post_game_event gap: minor: listeners within reach are found in post_game_event, which reads only the sculk listener tables
100 EyeblossomBlock.randomTick port crates/horizon-world/src/level/timeline.rs::Sim::eyeblossom_tick random tick runs tryChangingState and picks the long switch sound
101 FaceAttachedHorizontalDirectionalBlock.canAttach inline crates/horizon-world/src/level/survive.rs::Sim::can_survive_class the sturdy-face test on the attached side is inline in the FaceAttached arm
102 FaceAttachedHorizontalDirectionalBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class FaceAttached arm: tries the nearest looking directions and keeps the first that survives
103 FaceAttachedHorizontalDirectionalBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class FaceAttached arm: breaks when the attached side is no longer sturdy
104 FallingBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class FallingBlock arm schedules the falling tick (2, or 5 for dragon egg) then the default shape
105 FarmlandBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Farmland arm schedules a 1-tick check when the block above changes and farmland cannot survive
106 FarmlandBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Farmland arm: survives when the block above is not solid or maintains farmland
107 FarmlandBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Farmland arm: the base block when farmland cannot survive at the spot
108 FarmlandBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block Farmland arm turns the block to its base when it cannot survive
109 FarmlandBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::farmland_random_tick moisture falls or rises with water in reach and rain above, else turns to base
110 FarmlandBlock.turnToBaseBlock port crates/horizon-world/src/level/tick.rs::Sim::turn_to_base_block gap: player: entities standing on it are not pushed up when it turns to dirt (pushEntitiesUp is not read)
111 FarmlandBlock.isNearWater inline crates/horizon-world/src/level/tick.rs::Sim::farmland_random_tick gap: minor: the 9x2x9 water search is inline and tests the water fluid only, not canBeHydrated
112 FenceBlock.isSameFence inline crates/horizon-world/src/level/shapes.rs::Sim::fence_connects_to the same-fence test (fence tag and wooden match) is inline in fence_connects_to
113 FenceBlock.getStateForPlacement port crates/horizon-world/src/level/place.rs::Sim::placement_class Fence arm: each horizontal side connects per neighbour and waterlogged from the spot
114 FenceBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Fence arm: waterlogged tick and the horizontal side connection update
115 FenceBlock.createBlockStateDefinition skip:data north, east, south, west and waterlogged properties come from the block state tables
116 FireBlock.makeShapes skip:data the per-age and per-side outline shapes come from the per-state shape table
117 FireBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class Fire arm: keeps the fire with its age when it can survive, else air
118 FireBlock.getStateForPlacement port crates/horizon-world/src/level/shapes.rs::Sim::fire_state_for fire state from the sides that can catch fire, or the plain fire when the spot below is sturdy
119 FireBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class Fire arm: a sturdy block below or a valid fire location
120 FireBlock.isNearRain port crates/horizon-world/src/level/tick.rs::Sim::fire_near_rain rain at the spot or on one of its four sides
121 FireBlock.getBurnOdds port crates/horizon-world/src/level/survive.rs::Sim::burn_odds waterlogged blocks never burn, else the burn odds table
122 FireBlock.checkBurnOut port crates/horizon-world/src/level/tick.rs::Sim::fire_check_burn_out burn-out roll that either ages the fire or removes the block
123 FireBlock.onPlace port crates/horizon-world/src/level/hooks.rs::Sim::on_place Fire arm: base fire placement, then the fire tick scheduled at 30 plus a random 0 to 9
124 FireBlock.createBlockStateDefinition skip:data age and the per-side properties come from the block state tables
125 FireBlock.setFlammable skip:data flammability odds are data (burn odds table read by survive.rs), set by the registry bootstrap
126 FireBlock.bootStrap skip:data registry bootstrap of the flammable blocks; Horizon reads the odds from data tables
127 FlowerPotBlock.useItemOn missing player: right-clicking an empty flower pot with a flower or sapling does nothing, so no potted plant can be made
128 FlowerPotBlock.useWithoutItem missing player: right-clicking a potted plant with an empty hand does not take the plant out
129 FlowerPotBlock.getCloneItemStack missing player: middle-click pick of a potted plant gives an empty flower pot, not the plant
130 FlowerPotBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class FlowerPot arm: breaks when the block under it stops supporting it
131 GrassBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid grass arm: air above and inside build height
132 GrassBlock.stopBonemealSpread inline crates/horizon-world/src/level/bonemeal.rs::Sim::grass_bonemeal the per-step stop test (grass below, full collision at the spot) is inline in the attempt loop
133 GrowingPlantBlock.canSurvive port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class GrowingPlant arm: attached to a supporting face, a body or a head on the growth side
134 GrowingPlantBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block GrowingPlant is in the tick list that breaks the plant when it cannot survive
135 GrowingPlantBodyBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class GrowingPlantBody arm: 1-tick survival check, and a random-age head replaces the body when the growth side opens
136 GrowingPlantBodyBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid PlantBody arm: finds the head and checks its growth spot
137 GrowingPlantBodyBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal PlantBody arm forwards to the head's bonemeal growth
138 GrowingPlantBodyBlock.canBeReplaced port crates/horizon-world/src/level/place.rs::Sim::can_be_replaced GrowingPlantBody arm: not replaceable by a held head item
139 GrowingPlantHeadBlock.isRandomlyTicking skip:data the random-ticking flag per state comes from the exported facts (Level::is_randomly_ticking)
140 GrowingPlantHeadBlock.randomTick port crates/horizon-world/src/level/tick.rs::Sim::random_tick_block GrowingPlantHead arm: below age 25 and the growth roll grows it into the next spot
141 GrowingPlantHeadBlock.isMaxAge skip:other other: an AGE == 25 predicate that no pinned game code calls for plant heads (only crop, loot and villager code use isMaxAge)
142 GrowingPlantHeadBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class GrowingPlantHead arm: 1-tick survival check, and turns to body when the head or body sits on the growth side
143 GrowingPlantHeadBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid PlantHead arm: the growth spot is free and inside build height
144 HangingMossBlock.canStayAtPosition port crates/horizon-world/src/level/survive.rs::Sim::can_survive_class HangingMoss arm: attaches above to a multiface or to another moss
145 HangingMossBlock.updateShape port crates/horizon-world/src/level/shapes.rs::Sim::update_shape_class HangingMoss arm: 1-tick check when unattached, and the tip follows the block below
146 HangingMossBlock.tick port crates/horizon-world/src/level/tick.rs::Sim::tick_block HangingMoss arm breaks the moss when it cannot stay
147 HangingMossBlock.isValidBonemealTarget port crates/horizon-world/src/level/bonemeal.rs::Sim::bonemeal_valid HangingMoss arm: air below the tip inside build height
148 HangingMossBlock.performBonemeal port crates/horizon-world/src/level/bonemeal.rs::Sim::perform_bonemeal HangingMoss arm sets the tip on the air below the tip
Loaded 100 of 138 files, more files were not shown because too many files have changed in this diff. Show more