Skip to content

Add multiblock and util libs 添加多方块库和工具库#18

Merged
QiuShui1012 merged 5 commits intoAnvil-Dev:dev/1.21.1from
QiuShui1012:multiblock/1.21.1
Apr 19, 2026
Merged

Add multiblock and util libs 添加多方块库和工具库#18
QiuShui1012 merged 5 commits intoAnvil-Dev:dev/1.21.1from
QiuShui1012:multiblock/1.21.1

Conversation

@QiuShui1012
Copy link
Copy Markdown
Contributor

No description provided.

…etwork support

feat(multiblock): enhance multiblock configuration and management with new intervals and entity tracking
Copilot AI review requested due to automatic review settings April 17, 2026 05:23
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds two new modules—multiblock (dynamic multiblock system) and util (shared utilities/predicates)—and wires them into the Gradle multi-project build, downstream modules (recipe/main/test), documentation, and CI/release workflows.

Changes:

  • Add new module.multiblock with datapack-defined multiblock definitions, world saved-state manager, and client sync packets.
  • Add new module.util with common helpers (casting, shape utilities, scrolling helper), predicate types migrated out of module.recipe, and module metadata/build config.
  • Update existing modules (recipe/main/test/codec) plus GitHub workflows and READMEs to include and publish the new modules.

Reviewed changes

Copilot reviewed 78 out of 86 changed files in this pull request and generated 16 comments.

Show a summary per file
File Description
settings.gradle Includes and names the new module.multiblock and module.util subprojects.
module.util/src/main/resources/icon.png Adds module icon asset.
module.util/src/main/resources/anvillib_util.mixins.json Adds mixin config stub for util module.
module.util/src/main/resources/META-INF/neoforge.mods.toml Adds NeoForge mod metadata for util module.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/package-info.java Adds nullability defaults for util predicate package.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/NbtPredicate.java Moves predicate package from recipe to util.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/ItemPredicate.java Moves predicate package from recipe to util.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/ItemIngredientPredicate.java Moves predicate package from recipe to util; removes recipe-specific conversion helper.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/IItemStackPredicate.java Moves predicate interface package from recipe to util.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/ChanceItemStack.java Moves chance stack type to util; removes recipe-specific conversion helper.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/ChanceBlockState.java Moves chance blockstate type to util; removes recipe-specific conversion helper.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/BlockStatePredicate.java Moves block predicate to util; switches RL helper and adds Builder.with(BlockState).
module.util/src/main/java/dev/anvilcraft/lib/v2/util/package-info.java Adds nullability defaults for util package.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/Util.java Adds shared runtime/casting helper methods.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/ShapeUtil.java Adds voxel shape merge/rotate/mirror utilities including threaded join.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/Scrollable.java Adds generic scrolling helper base class.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/NumberProviderUtil.java Moves number-provider utilities to util module.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/BlockInfo.java Adds BlockInfo record for block snapshots.
module.util/src/main/java/dev/anvilcraft/lib/v2/util/AnvilLibUtil.java Adds util module entrypoint and ResourceLocation helper.
module.util/gradle.properties Declares util module mod_id, name, description.
module.util/build.gradle Adds util module build/publish configuration and dependency on codec.
module.test/src/main/resources/assets/anvillib_test/lang/en_us.json Removes static lang file (moved to generated output).
module.test/src/main/resources/META-INF/neoforge.mods.toml Changes Minecraft dependency ordering.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/wheel/data/lang/WheelLang.java Moves wheel keybind translations into lang datagen.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/wheel/data/lang/LangHandler.java Adds lang datagen init entry point.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/multiblock/init/package-info.java Adds nullability defaults for multiblock test init package.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/multiblock/init/LibMultiblocks.java Adds test multiblock definition bootstrap registration.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/multiblock/init/LibMultiblockControllers.java Adds test controllers to demonstrate formed/unformed callbacks.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/multiblock/init/LibItemGroups.java Adds creative tab for multiblock test items.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/multiblock/init/LibBlocks.java Adds test controller block registration.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/multiblock/block/package-info.java Adds nullability defaults for multiblock test block package.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/multiblock/block/TestControllerBlock.java Adds a block implementing IController for tests.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/AnvilLibTestDatagen.java Adds datagen registration scaffolding for test module content.
module.test/src/main/java/dev/anvilcraft/lib/v2/test/AnvilLibTest.java Wires multiblock test content + registrum + datagen init into test mod.
module.test/src/generated/resources/data/anvillib_test/loot_table/blocks/test_controller.json Adds generated loot table for test controller block.
module.test/src/generated/resources/data/anvillib_test/anvillib/definitions/simple.json Adds generated datapack definition for simple multiblock.
module.test/src/generated/resources/data/anvillib_test/anvillib/definitions/complicated.json Adds generated datapack definition for complicated multiblock.
module.test/src/generated/resources/assets/anvillib_test/lang/en_us.json Adds generated en_us translations.
module.test/src/generated/resources/assets/anvillib_test/lang/en_ud.json Adds generated en_ud translations.
module.test/src/generated/resources/assets/anvillib/lang/en_us.json Removes generated anvillib lang output from test module.
module.test/build.gradle Adds deps on new modules (multiblock/util) and adjusts JavaExec config.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/predicate/item/HasItemIngredient.java Switches to util predicates and adds a predicate→HasItemIngredient converter method.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/predicate/item/HasItemBase.java Switches to util predicate interface import.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/predicate/item/HasItem.java Switches to util ItemPredicate.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/predicate/block/HasBlockIngredient.java Switches to util BlockStatePredicate.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/predicate/block/HasBlockBase.java Updates predicate test path to pass state/entity instead of BlockCache+pos.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/predicate/block/HasBlock.java Switches to util BlockStatePredicate.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/outcome/SpawnItem.java Switches to util ChanceItemStack and adds conversion helper.
module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/outcome/SetBlock.java Switches to util ChanceBlockState and adds conversion helper.
module.recipe/build.gradle Adds util dependency for recipe module.
module.network/src/main/java/dev/anvilcraft/lib/v2/network/util/NetworkUtil.java Adds a helper for broadcasting packets excluding a player.
module.multiblock/src/main/resources/icon.png Adds module icon asset.
module.multiblock/src/main/resources/anvillib_dynamic_multiblock.mixins.json Adds mixin config stub for multiblock module.
module.multiblock/src/main/resources/META-INF/neoforge.mods.toml Adds NeoForge mod metadata for multiblock module.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/package-info.java Adds nullability defaults for multiblock root package.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/network/package-info.java Marks multiblock network package with @Network.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/network/MultiblockUnformPacket.java Adds clientbound unform packet.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/network/MultiblockFormPacket.java Adds clientbound form packet.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/init/package-info.java Adds nullability defaults for multiblock init package.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/init/LibRegistries.java Registers datapack registry for multiblock definitions.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/event/package-info.java Adds nullability defaults for multiblock events package.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/event/BlockEventListener.java Hooks place/break/tick events to update multiblock manager.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/package-info.java Adds dynamic multiblock package-level docs and nullability defaults.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/definition/package-info.java Adds nullability defaults for definition package.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/definition/MultiblockDefinition.java Adds definition model + builder helpers for local→global mapping and controller checks.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/definition/DefinitionSerialization.java Implements JSON/network serialization for definitions (grid + mapping).
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/controller/package-info.java Adds nullability defaults for controller package.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/controller/SimpleController.java Adds helper base class for controller registration.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/controller/IController.java Adds controller interface with formed/unformed hooks.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/controller/ControllerRecord.java Adds controller registry keyed by block+definition id.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/controller/ControllerInfo.java Adds controller registry key record.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/MultiblockState.java Adds runtime state (pos, definition holder, formed) + NBT/network codecs.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/MultiblockPart.java Adds part record tying state to a local part position.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/dynamic/DynamicMultiblockManager.java Adds world saved-data manager for dynamic multiblock detection and syncing.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/AnvilLibDynamicMultiblockConfig.java Adds config for formed/unformed check intervals.
module.multiblock/src/main/java/dev/anvilcraft/lib/v2/multiblock/AnvilLibDynamicMultiblock.java Adds multiblock module entrypoint and network registration hook.
module.multiblock/gradle.properties Declares multiblock module mod_id, name, description.
module.multiblock/build.gradle Adds multiblock module build/publish configuration and dependencies.
module.main/build.gradle Adds util + multiblock as aggregated module dependencies.
module.codec/src/main/java/dev/anvilcraft/lib/v2/codec/StreamCodecUtil.java Adds a BlockPos varint stream codec.
module.codec/src/main/java/dev/anvilcraft/lib/v2/codec/CodecUtil.java Adds a MapCodec-oriented encodeStart helper.
README.md Documents new modules (Multiblock/Util) and updates dependency snippets and authors.
README.en.md English docs for new modules and updated dependency snippets/authors.
.github/workflows/release.yml Adds release jobs for util/multiblock and updates main job dependencies.
.github/workflows/pull_request.yml Adds PR build jobs for util/multiblock and updates main job dependencies.
.github/workflows/ci.yml Adds CI jobs for util/multiblock and updates main job dependencies.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/ci.yml
Comment thread module.test/build.gradle Outdated
Comment thread .github/workflows/release.yml
Comment thread module.util/src/main/java/dev/anvilcraft/lib/v2/util/ShapeUtil.java
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 80 out of 88 changed files in this pull request and generated 12 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread module.util/src/main/java/dev/anvilcraft/lib/v2/util/ShapeUtil.java
Comment thread README.en.md
Comment thread README.md
Comment thread README.en.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 118 out of 126 changed files in this pull request and generated 7 comments.

Comments suppressed due to low confidence (1)

module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/BlockStatePredicate.java:152

  • test(...) returns true when properties is empty, which skips NBT matching entirely. That makes NBT-only predicates (or predicates with blocks+nbt but no properties) always pass, defeating the purpose of nbts. Adjust the early-return logic so NBT predicates are evaluated even when there are no property matchers (and only return true when both properties and nbts are empty after the block check).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread module.multiblock/gradle.properties
Comment thread module.multiblock/src/main/resources/META-INF/neoforge.mods.toml
Comment thread module.util/src/main/java/dev/anvilcraft/lib/v2/util/ShapeUtil.java
@QiuShui1012 QiuShui1012 merged commit 0a3402c into Anvil-Dev:dev/1.21.1 Apr 19, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants