Commit Graph

2005 Commits

Author SHA1 Message Date
RB007
655e69fc66 feat: vegetation patch features (#1708)
* feat: vegetation features

* refactor: surface_direction helpers

* fix: several issues

* refactor: add with_waterlogged helper to Block/BlockState

* refactor: small changes and added helpful comments
2026-03-20 09:43:28 +01:00
ChocoDev
f2d7a1a332 perf: skip random tick on none ticking block (#1856)
* skip random tick

* skip tick out of loop and better randomness

* min y

* formating

* properly ticking block and fluid check

* clippy

* fix malformed NBT and i64 overflow

* formating

---------

Co-authored-by: chocodev11 <chocodev11@users.noreply.github.com>
2026-03-20 09:42:47 +01:00
yunuservices
babb191e66 feat(wasm-api): port basic block events (#1889)
* feat(wasm-api): port basic block events

* fix(wasm-api): align stacked event ports with clippy

* style(wasm-api): format basic block event batch
2026-03-20 09:37:56 +01:00
RB007
b1e25f0db9 feat: potion use and brewing (#1670)
* feat: potions and brewing

* fix: splash water puts out fire

* fix: saving

* fix: brew sound

* chore: fixes, formatting, and clippy
2026-03-19 17:40:09 +01:00
Laptop59
0b15f29f90 feat: integrate command dispatchers + reimplement /help (#1700)
* initial commit

* added more functions

* ported /help command to new dispatcher

* /? shows similar usage to /help instead of `-> help`

* fixed /help bugs

* change min limit in `read_boxed_slice` to 0 so that empty command (`/`) doesn't cause an error

* fixed clippy errors

* formatted

* added convenience for fetching world and server from context

* fixed `min` mistakes to `max` instead

* changed node to now store a list of predicates as its requirement (permission included)

* added easier way to register aliases

* prevent unauthorized usage of command when aliased

* added `TextComponent::empty()` to create empty text only for the purpose of adding children to it

* added more documentation

* make argument more obvious

* fixed some issues (not done yet)

* added more clarification in comments & docs

* fixed fn docs

* fixed order of arguments in translated error

---------

Signed-off-by: Alexander Medvedev <lilalexmed@proton.me>
Co-authored-by: Alexander Medvedev <lilalexmed@proton.me>
2026-03-19 17:17:57 +01:00
yunuservices
a5908c04fd feat(wasm-api): port world core events (#1880)
* feat(wasm-api): port world core events

# Conflicts:
#	pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1_0/context.rs

* fix(wasm-api): satisfy clippy for world event batch

* style(wasm-api): format world event registration
2026-03-18 20:29:32 +01:00
yunuservices
581430aeff feat(wasm-api): port player and server core events (#1860)
* feat(wasm-api): port player and server core events

* fix(wasm-api): satisfy clippy for player event batch
2026-03-18 12:32:16 +01:00
Andrei Șugubete
4e4b5202b4 fix: packet spam and mob leaks (#1865)
* feat: add mob ai throttling

* chore: formating

* fix: prevent entity leak and server timeout during death animation

* fix: vanilla parity + optimize entity position and rotation updates to reduce unnecessary broadcasts

* chore: formatting
2026-03-18 12:31:26 +01:00
RB007
feff36e488 fix: fungus and sprout placement (#1877) 2026-03-18 08:12:02 +01:00
RB007
76e62cd739 feat: glowstone feature (#1878) 2026-03-18 08:10:52 +01:00
Andrei Șugubete
dc802d374e fix(enderman): remove server-side ambient portal particle generation (#1863) 2026-03-17 01:45:52 -04:00
Illyrius
5dda697c15 docs: docs/pumpkin-codegen (#1826)
* added docs

* some small corrections

* woopsie

* revert back lock changes

Signed-off-by: Illyrius <28700752+illyrius666@users.noreply.github.com>

---------

Signed-off-by: Illyrius <28700752+illyrius666@users.noreply.github.com>
Co-authored-by: Illyrius <FitimQ@live.nl>
2026-03-15 20:48:50 +01:00
Greened
a54728f2be fix: add Kelp block placement/break rules (#1805)
* fix: wrong piston break check

* feat: kelp placement rules and break/place behaviour

* chore: make clippy happy

* fix: breaking kelp now places water instead of air

* chore: make clippy happy

* fix: vanilla parity
2026-03-15 14:19:25 +01:00
Greened
554b3daad9 feat: Implement Stalagmites, Stalactites and Dripstone block (#1824)
* feat: implement Dripstone block, Stalagmites and Stalactites

* feat: implement tip_merge thickness allowing stalagmites and stalactites to be connected. fix: correct placing

* chore: make clippy happy
2026-03-15 14:18:16 +01:00
Andrei Șugubete
a0ff7f46dc feat: Durability Overhaul (#1848)
* feat: broadcast EntityStatus when equipment breaks

Pumpkin did not play any sound or show break particles when a tool or
piece of armour reached zero durability. Vanilla sends a per-slot
EntityStatus packet (47-52, 65, 68) that every nearby client uses to
play the break sound and spawn break particles textured with the item
that just broke.

Changes
-------

player.rs – new damage_item_in_slot(slot, amount) method:
- Generalises the old damage_held_item to cover all EquipmentSlots:
  MainHand, OffHand, Head, Chest, Legs, Feet.
- Resolves the correct PlayerInventory slot index per slot (36-39 for
  armour, 40 for off-hand) consistent with build_equipment_slots().
- Sends the EntityStatus break packet BEFORE clearing the slot so
  clients can use the item texture for break particles.
- Bypasses sync_hand_slot (which only broadcast for hand slots) and
  instead calls enqueue_slot_set_packet + send_equipment_changes
  directly, ensuring armour equipment changes also propagate.
- damage_held_item is kept as a thin convenience wrapper.

apply_mending_from_xp – DRY refactor:
- Replaces three separate candidate-gathering blocks (main hand, off
  hand, armour loop) with a single unified slot_pairs list iterated
  once. Behaviour is identical.

living.rs – damage_armor_items:
- When a player takes hit damage, armour durability is reduced through
  LivingEntity::damage_armor_items, a separate code path from the
  player item-damage methods. This path now also broadcasts the
  EntityStatus break packet when an armour piece's durability hits zero.

entity/mod.rs – shared helper:
- Add equipment_break_status(slot) -> EntityStatus as a #[must_use]
  pub const fn. Eliminates the duplicated slot→status match that would
  otherwise exist in both call sites (player.rs and living.rs).

Tests (16 new)
--------------
- entity::tests::equipment_break_status_maps_all_slots – asserts every
  EquipmentSlot variant (including Body and Saddle) maps to its
  expected EntityStatus break variant.
- item::tests (15 tests) – first unit tests for ItemStack durability
  logic, covering damage_item_with_context (zero/negative amount,
  non-damageable item, unbreakable item, accumulation, stack break at
  max damage, over-damage) and repair_item (zero/negative amount,
  undamaged item, partial repair, cap at current damage, full repair
  clears the Damage component patch entry) and set_damage (negative
  value clamps to zero).

* refactor: use table-driven cases in damage_increases_damage_value test

* chore: make clippy happy

* refactor: the rest of damage and repair tests to use table-driven cases

* feat: broadcast EntityStatus when equipment breaks

- Implement strict packet ordering (EntityStatus before slot sync)
- Add break broadcast in play.rs use_on_block for all tools
- Generalize damage_item_in_slot to support all equipped slots
- Trim PR comments to 1-2 professional lines
- Convert equipment_break_status test to table-driven format
- Ensure vanilla parity per decompiled 1.21.11 EntityEvent mappings

* feat(item): durability overhaul — DamageResult, armor/weapon parity, elytra fix

pumpkin-world
- Add DamageResult enum (Untouched/Damaged/Broken) replacing bool return on
  damage_item_with_context and damage_item
- Elytra clamped at max_damage-1; never deleted from inventory
- Stacked item break correctly returns Broken regardless of remaining count
- Add is_axe/is_pickaxe/is_shovel/is_hoe tag-based predicates to ItemStack
- 21 new unit tests covering all cases (elytra, stacks, Unbreaking, categories)

pumpkin
- Armor damage type filter: bypasses_armor_durability() driven by the
  vanilla minecraft:bypasses_armor data tag (1.21.11); id-based u8 lookup
- Elytra worn in armor slot skipped from hit damage
- Thorns: extra +2 durability cost + 1-4 magic retaliation damage
- Weapon 2-durability cost: axes/pickaxes/shovels/hoes in combat
- Fix armor slot Unbreaking formula (is_armor_slot() gate)
- Fix stacked-item break broadcast (Broken not is_empty())
- Extract combat_weapon_durability_cost as sync fn; reuse existing lock
- 5 forward-compatible TODO one-liners for shield/trident/crossbow/fishing rod/brush

* fix(item): resolve vanilla parity issues in durability and combat tracking

- Move armor durability calculation to pre-absorption damage
- Fix Thorns damage range to uniform float [1.0, 5.0) and correct execution order
- Attribute Thorns damage to victim for correct combat tracking
- Refactor `damage_item` to auto-infer armor via `#minecraft:enchantable/armor`
- Decouple Elytra clamping from generic item damage loop into dedicated methods
- Add TODOs for DAMAGE_RESISTANT, post-attack effects, and data-driven bypasses

Also reformatted long comments to be concise and techincal

* chore: trigger CI rerun

* fix: shears no longer take durability damage when attacking mobs (refactor + codegen to standardize)

Replace hardcoded item-category checks in combat_weapon_durability_cost
with a data-driven lookup of the minecraft:weapon component.

- Add item_damage_per_attack field to WeaponImpl with DataComponentImpl
- Wire WeaponComponent deserialization into pumpkin-codegen item builder
- Regenerate item data so weapon durability values come from items.json
- Items without the Weapon component (e.g. shears) return 0 cost

* chore: retrigger CI

* refactor: Remove Thorns retaliation and trigger mechanics

- Remove Thorns enchantment trigger check and probability
- Remove Thorns extra +2 durability cost on armor
- Remove Thorns retaliation damage to attacker (1-5 magic damage)
- Remove Thorns combat attribution via damage_with_context
- Remove related imports and TODO comments
- Keep source parameter for future compatibility

* fix: glaring issues

- Fix WeaponImpl::read_data to actually read item_damage_per_attack from NBT
  instead of hardcoding 1; custom weapons now load correctly
- Remove unused _source parameter from damage_armor_items signature
- Move is_axe/is_pickaxe/is_shovel/is_hoe behind #[cfg(test)] since they're
  test-only helpers, keeping public API clean

* fix: elytra unbreaking and Pre-absorption Armor Test
Also a comment for clarity

* refactor: remove elytra scope creep: damage handling and related tests

* adjustment: tighten unbreaking test, update comments to be correct

* fix: clamp negative NBT, widen Unbreaking test, document elytra and shield-disable TODOs

* refactor: armor bypass logic: use bitmask, hoist lookups, optimize durability loop

* feat: Remove hardcoded Elytra armor check; use EquippableImpl::damage_on_hurt for data-driven durability logic.

* fix: add bitmask compile-time assert, clarify NBT clamping, document damage_on_hurt logic, rename slot_result, add #[must_use] to damage_item, and fix all unused result warnings.

* fix: clarify stacked item break edge, strengthen bitmask asserts, document NBT error handling, add TODOs for tool break handling and loop short-circuit, remove dead code and trident stub, note TOCTOU, and document test determinism. All tests passing.

* fix: Various

CRITICAL ITEMS:
  * bypasses_armor_durability correctness: Verified by existing test suite
    (validates all 19 bypass types return true, 12 physical types return false).
  * TOCTOU race in attack(): Enhanced documentation with 3 specific mitigation
    options and justification for single-player safety.
  * must_use suppressions: Removed #[must_use] from damage_item; added TODO to
    restore once all DamageResult::Broken handlers implement proper semantics.

SIGNIFICANT ITEMS:
  * DamageResult::Broken semantics: Updated doc comment to clarify that breaking
    always broadcasts correctly—whether consuming a single item or decrementing
    a stack. Callers need not split the enum.
  * Stacked item multi-break behavior: Verified matches vanilla (one break per
    call, never chains). Updated comment to document this as correct behavior,
    not a regression.
  * should_apply_durability_damage_with visibility: Made private to prevent
    incorrect unbreaking formula usage outside durability context.
  * Elytra exemption caching optimization: Added PERF comment noting O(1)
    component lookup is already efficient (max 4/hit). Deferred to dedicated
    caching architecture pass.

MINOR ITEMS:
  * Unbreaking test windows: Tightened from (500–1500) to (865–1135) for ±5σ
    confidence—catches actual formula regressions while remaining statistically
    sound. Updated both tool and armor tests.
  * WeaponImpl NBT error handling: Documented conservative fallback behavior
    (clamp negatives, default missing keys). Added TODO for tracing::warn! at
    higher-level call site.
  * default_item_damage naming: Renamed return_1u32 for consistency and clarity
    in weapon damage context.
  * WeaponImpl Hash collision prevention: Added struct-level NOTE reminding
    developers to update get_hash() if fields are added. Deferred until
    multi-field scenario (currently impossible with one field).

* fix: Resolve duplicate `return_1f32` and restore `#[must_use]` on `damage_item`

- Removed duplicate `return_1f32` function in `pumpkin-codegen/src/item.rs` to fix a compile blocker.
- Restored `#[must_use]` attribute on `damage_item` in `pumpkin-world/src/item/mod.rs` to enforce proper handling of `DamageResult`.
2026-03-15 14:17:18 +01:00
Alexander Medvedev
e2ee483fca chore: update tracing-subscriber
now possible since they allowed to disable ansi sanitization
2026-03-13 18:03:59 +01:00
Andrei Șugubete
7a63b766de feat: broadcast EntityStatus when equipment breaks (#1837)
* feat: broadcast EntityStatus when equipment breaks

Pumpkin did not play any sound or show break particles when a tool or
piece of armour reached zero durability. Vanilla sends a per-slot
EntityStatus packet (47-52, 65, 68) that every nearby client uses to
play the break sound and spawn break particles textured with the item
that just broke.

Changes
-------

player.rs – new damage_item_in_slot(slot, amount) method:
- Generalises the old damage_held_item to cover all EquipmentSlots:
  MainHand, OffHand, Head, Chest, Legs, Feet.
- Resolves the correct PlayerInventory slot index per slot (36-39 for
  armour, 40 for off-hand) consistent with build_equipment_slots().
- Sends the EntityStatus break packet BEFORE clearing the slot so
  clients can use the item texture for break particles.
- Bypasses sync_hand_slot (which only broadcast for hand slots) and
  instead calls enqueue_slot_set_packet + send_equipment_changes
  directly, ensuring armour equipment changes also propagate.
- damage_held_item is kept as a thin convenience wrapper.

apply_mending_from_xp – DRY refactor:
- Replaces three separate candidate-gathering blocks (main hand, off
  hand, armour loop) with a single unified slot_pairs list iterated
  once. Behaviour is identical.

living.rs – damage_armor_items:
- When a player takes hit damage, armour durability is reduced through
  LivingEntity::damage_armor_items, a separate code path from the
  player item-damage methods. This path now also broadcasts the
  EntityStatus break packet when an armour piece's durability hits zero.

entity/mod.rs – shared helper:
- Add equipment_break_status(slot) -> EntityStatus as a #[must_use]
  pub const fn. Eliminates the duplicated slot→status match that would
  otherwise exist in both call sites (player.rs and living.rs).

Tests (16 new)
--------------
- entity::tests::equipment_break_status_maps_all_slots – asserts every
  EquipmentSlot variant (including Body and Saddle) maps to its
  expected EntityStatus break variant.
- item::tests (15 tests) – first unit tests for ItemStack durability
  logic, covering damage_item_with_context (zero/negative amount,
  non-damageable item, unbreakable item, accumulation, stack break at
  max damage, over-damage) and repair_item (zero/negative amount,
  undamaged item, partial repair, cap at current damage, full repair
  clears the Damage component patch entry) and set_damage (negative
  value clamps to zero).

* refactor: use table-driven cases in damage_increases_damage_value test

* chore: make clippy happy

* refactor: the rest of damage and repair tests to use table-driven cases

* feat: broadcast EntityStatus when equipment breaks

- Implement strict packet ordering (EntityStatus before slot sync)
- Add break broadcast in play.rs use_on_block for all tools
- Generalize damage_item_in_slot to support all equipped slots
- Trim PR comments to 1-2 professional lines
- Convert equipment_break_status test to table-driven format
- Ensure vanilla parity per decompiled 1.21.11 EntityEvent mappings
2026-03-13 16:46:57 +01:00
Greened
51d883f265 fix: redstone wire blockupdate (#1855) 2026-03-13 16:45:04 +01:00
Greened
eb1da88e33 fix: piston not unextending (#1812)
* fix: piston not  unextending

* chore: make clippy happy
2026-03-13 16:44:41 +01:00
Joseph Rimmer
f4b322edb2 fix: drop receiver on console exit (#1817) (#1839)
* fix: drop receiver on console exit (#1817)

Fixes terminal echoing not being restored after stopping the server.
When the console command task exits, dropping the channel receiver
causes the blocking readline thread to wake up and properly return
the editor, which restores terminal state.

* fix: make server ticker interruptible for graceful CTRL+C shutdown

The Ticker's sleep was not responding to the STOP_INTERRUPT cancellation
token, causing the server to hang when CTRL+C was pressed during tick sleep.

Changes:
- Added STOP_INTERRUPT to ticker imports
- Changed loop to use labeled break ('ticker) for clean exit
- Made sleep interruptible with tokio::select! against STOP_INTERRUPT

Now CTRL+C immediately wakes the ticker and allows clean shutdown.
2026-03-11 20:02:12 +01:00
Illyrius
ee3aa76c2b feat: wasm-api/context/get_data_folder (#1843)
* init

Signed-off-by: illyrius666 <28700752+illyrius666@users.noreply.github.com>

* fix build errors

Signed-off-by: illyrius666 <28700752+illyrius666@users.noreply.github.com>

* Use context.downcast_ref(self) instead

Signed-off-by: illyrius666 <28700752+illyrius666@users.noreply.github.com>

* Add filesystem access

---------

Signed-off-by: illyrius666 <28700752+illyrius666@users.noreply.github.com>
Signed-off-by: Illyrius <28700752+illyrius666@users.noreply.github.com>
Co-authored-by: Bjorn Beishline <75190918+BjornTheProgrammer@users.noreply.github.com>
2026-03-10 15:48:58 -07:00
dependabot[bot]
d78ba7dee1 build(deps): bump docker/setup-buildx-action from 3 to 4 (#1823)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 21:11:19 +01:00
dependabot[bot]
dab5f0080e build(deps): bump docker/login-action from 3 to 4 (#1822)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 21:11:10 +01:00
dependabot[bot]
cc60eeb61d build(deps): bump docker/build-push-action from 6 to 7 (#1821)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 21:11:02 +01:00
ChocoDev
a8a07fa3a6 feat: desert pyramid (#1815)
* pyramid

* cleanup wrapper functions

* replace old        add_pending_block_entity

---------

Signed-off-by: ChocoDev <100467857+chocodev11@users.noreply.github.com>
Co-authored-by: chocodev11 <chocodev11@users.noreply.github.com>
2026-03-10 21:08:58 +01:00
Alexander Medvedev
744664cb2f chore: parse DoublePerlinNoiseParameters at compile time 2026-03-10 20:55:49 +01:00
Illyrius
823914ec1c feat: wasm-api/player/get_name (#1840)
* init

Signed-off-by: illyrius666 <28700752+illyrius666@users.noreply.github.com>

* fix fn order to match trait

Signed-off-by: illyrius666 <28700752+illyrius666@users.noreply.github.com>

* feat: add DowncastResourceExt impl for player

---------

Signed-off-by: illyrius666 <28700752+illyrius666@users.noreply.github.com>
Co-authored-by: Bjorn Beishline <75190918+BjornTheProgrammer@users.noreply.github.com>
2026-03-10 04:47:46 -07:00
Bjorn Beishline
6e84473199 feat: add register permission to wasm (#1841) 2026-03-10 02:31:55 -07:00
Bjorn Beishline
4f5b2e4f39 feat: cleaner API for registering wasm events (#1838) 2026-03-10 02:26:33 -07:00
Bjorn Beishline
576d76dfd6 feat: add wasm plugin api (#1675)
* feat: wasm plugin api base

* fix: make metadata macro work

* chore: fix clippy lints

* Implement guest registering of events

* chore: remove hardcoded v0.1.0  dep in wasm_host

* feat: add events to wasm

* feat: add caching of components

* fix: clippy lints

* chore: update Cargo.lock

* fix: add feature flag for link section

* feat: add base for command wit definitions

* feat: implement arg variants for command wit interface

* feat: add commented out command-tree arg variant

* feat: add wit definitions for text-component and command tree

Introduces the text interface with a builder-pattern resource,
argument-type variant, command-node resource, and register-command
on context. Migrates event and command-sender to use the new
text-component resource.

* feat: add stubs for wasm host

* chore: update wasmtime to v42

* feat: implement three methods of wit textcomponent

* Add consume function

* feat: implement all text-component host methods

Replace todo!() stubs with working implementations for all
HostTextComponent trait methods: style setters, click events,
hover events, add_text, get_text, and encode.

* feat: allow events to be modified

* feat: add some of base for commands

* chore: fix spelling mistake

* chore: remove unused dep

* feat: implement all argument-type to consumer mappings

* Add command exports

* log plugin load errors

* Some commands work

* Some more Commands work

* Update how commands are registered

* Implement locale

* Use handler id with require

* chore: fix some warnings

* Add PlayerLeaveEvent

* chore: fix all clippy warnings

* fix: add more descriptive error message

---------

Co-authored-by: Purdze <r.s.sutton@hotmail.co.uk>
Co-authored-by: Alexander Medvedev <lilalexmed@proton.me>
2026-03-09 18:12:48 +01:00
dependabot[bot]
7e1e411993 build(deps): bump docker/metadata-action from 5 to 6 (#1820)
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5 to 6.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 14:14:47 +01:00
Alexander Medvedev
a0b8bbebfb Port bedrock to 1.26
still some bugs :c
2026-03-08 21:42:57 +01:00
Alexander Medvedev
004a41625f fix: https://github.com/Pumpkin-MC/Pumpkin/issues/1792 2026-03-08 21:39:26 +01:00
Alexander Medvedev
4aaaea7cc7 feat: Spawners now work for generated Structures 2026-03-08 19:41:37 +01:00
RB007
e312c4cbd9 feat: underwater magma feature (#1747) 2026-03-07 09:31:55 +01:00
Alexander Medvedev
d41e5b9b98 fix: structures 2026-03-06 22:01:39 +01:00
Greened
3392aa164f fix: conduit being waterlogged all the time (#1808) 2026-03-06 13:44:08 -05:00
yunuservices
471c65ec59 feat(event): add BlockRedstoneEvent for pressure plates (#1750) 2026-03-06 12:30:01 -05:00
Greened
eb0a012e72 feat: add all type of lanterns (#1779) 2026-03-06 11:53:27 -05:00
Joseph Rimmer
6ca0a5e195 fix: dying entity not ticking for movement (#1623) (#1741) 2026-03-06 11:34:28 -05:00
ChocoDev
5474fcb9e5 fix: use command sender dimension when tp (#1690)
* fix: use target dismention

* use from command sender

* vanilla accurate

---------

Co-authored-by: chocodev11 <chocodev11@users.noreply.github.com>
2026-03-06 11:28:22 -05:00
Alexander Medvedev
3f4cdd0695 feat: Nether Fortress
Co-Authored-By: Richard Marshall <29306641+Purdze@users.noreply.github.com>
2026-03-06 09:42:54 +01:00
Alexander Medvedev
e125ca19be fix: fmt
oh bro ofc
2026-03-05 21:36:41 +01:00
Alexander Medvedev
7248f942e7 fix: latest rust clippy lints 2026-03-05 21:34:47 +01:00
RB007
fbe13bbacd feat: geodes (#1697)
Signed-off-by: Alexander Medvedev <lilalexmed@proton.me>
Co-authored-by: Alexander Medvedev <lilalexmed@proton.me>
2026-03-05 14:32:27 +01:00
Matthieu B
33531d3c77 feat: add nether fossil structure generation (#1632)
* feat: add NBT structure template system

Adds a reusable system for loading and placing Minecraft structures from
NBT template files, enabling exact vanilla structure matching.

- Template loading system with lazy caching (DashMap)
- Block rotation and mirroring transformations
- Block entity creation for furnaces, chests, signs, etc.
- Pending block entity support in ProtoChunk for structure generation
- Biome Y clamping to prevent out-of-bounds lookups for tall structures

* feat: add nether fossil structure generation

Implement nether fossil structure with vanilla-matching placement logic
using the NBT template system:

- Column scan for air above soul sand/solid block
- 14 embedded NBT fossil templates with rotation support
- 50% chance dried ghast placement at fossil base
- Template skip_air support for IGNORE_AIR processor

* fix: formatting and clippy lints

---------

Signed-off-by: Matthieu B <66959271+mtthidoteu@users.noreply.github.com>
2026-03-05 14:30:24 +01:00
Joseph Rimmer
8626e81f60 fix: align with java entity water velocity (#1716) (#1739)
Signed-off-by: Joseph Rimmer <4097668+yuminstalljoe@users.noreply.github.com>
2026-03-05 14:20:40 +01:00
HairlessVillager
6d069a8bb6 chore: refactor(PalettedContainer): replace for_each() with iter() (#1721) 2026-03-04 20:28:53 +01:00
HairlessVillager
e10a45b3db chore: refactor(PalettedContainer): replace for_each() with iter() (#1721) 2026-03-03 19:53:54 +01:00
Joseph Rimmer
e0fb5c2e28 fix: allow lava to flow when above water block (#1618) (#1737) 2026-03-03 19:51:40 +01:00