Add multiblock and util libs 添加多方块库和工具库#18
Conversation
…etwork support feat(multiblock): enhance multiblock configuration and management with new intervals and entity tracking
There was a problem hiding this comment.
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.multiblockwith datapack-defined multiblock definitions, world saved-state manager, and client sync packets. - Add new
module.utilwith common helpers (casting, shape utilities, scrolling helper), predicate types migrated out ofmodule.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.
There was a problem hiding this comment.
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.
…ion and List utility classes
There was a problem hiding this comment.
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(...)returnstruewhenpropertiesis empty, which skips NBT matching entirely. That makes NBT-only predicates (or predicates with blocks+nbt but no properties) always pass, defeating the purpose ofnbts. Adjust the early-return logic so NBT predicates are evaluated even when there are no property matchers (and only returntruewhen both properties and nbts are empty after the block check).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
No description provided.