initial release set up#1
Merged
Merged
Conversation
The block now acts as both the worker's home and its log storage: - LumberjackBlockEntity: implements Container (vanilla hopper compat) with a single slot capped at 64 items; exposes IItemHandler capability via RegisterCapabilitiesEvent so pipes from other mods can extract from any face - LumberjackBlock: now extends BaseEntityBlock (EntityBlock); right-click shows "Storage: N/64 <item>" in the action bar; breaking the block drops stored logs before discarding the entity - ChopTreeGoal: instead of Block.dropResources(), harvested logs are inserted into the block entity; any overflow is dropped on the ground - FindTreeGoal: will not search for new trees while the storage is full, preventing logs from piling up on the ground - ModBlockEntities: new DeferredRegister wiring up the block entity type https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
LumberjackBlockEntity: - Replaced single ItemStack slot with NonNullList<ItemStack> of 27 slots (same as a vanilla chest) - insertItem() does two-pass insertion: merge into existing matching stacks first, then fill the next empty slot; handles different log types, saplings, apples and any other item in separate slots - isFull() now checks all 27 slots; getStorageStatus() shows slots used and total item count - NBT uses ContainerHelper.saveAllItems / loadAllItems for slot-indexed serialization ChopTreeGoal: - collectTreeBlocks() now calls collectLeafBlocks() after the log BFS; collectLeafBlocks() scans a bounding box around the log columns (+ 3-block margin) and records every leaf block - After the last log is broken, clearLeaves() runs in the same tick: each leaf is evaluated through Block.getDrops() so loot-table chances for saplings, apples, and sticks are respected, then removed from the world - chopNext() also switched from hardcoded new ItemStack(...) to Block.getDrops() for consistency with modded logs that may have custom loot tables - depositItems() handles a full List<ItemStack> and falls back to Block.popResource() for any overflow the storage can't accept https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
Required for ./gradlew / gradlew.bat to work without a global Gradle install. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
Excludes Gradle cache, build output, and IDE-specific files. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
- ChopTreeGoal: remove LevelEvent import (class absent in 1.21.1), use raw int 2001 for block-break particle event; remove PALE_OAK_* constants which were only added in 1.21.2 - LumberjackBlock: add required codec() override (BaseEntityBlock made it abstract in 1.21.1); update constructor to accept BlockBehaviour.Properties as required by simpleCodec - ModBlocks: pass Properties explicitly to LumberjackBlock constructor https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
NeoForge 21.1.172 puts asm-analysis-9.7 on the JVM module path while NeoGradle 7.0.145 drags in asm-analysis-9.5 as a transitive dependency on the classpath. BootstrapLauncher 2.0.2 treats this as a fatal duplicate- module error and exits with code 1 before Minecraft starts. Forcing all org.ow2.asm artifacts to 9.7 via resolutionStrategy eliminates the 9.5 jar from the classpath so there is no conflict. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
LumberjackTier enum defines chop intervals: Wood=40t Stone=30t Iron=20t Diamond=12t Netherite=6t (ticks/log) LumberjackBlock now accepts a LumberjackTier at construction time. Each tier is a separately registered block sharing the same LumberjackBlockEntity type. A per-tier MapCodec is declared via simpleCodec to satisfy the abstract codec() requirement from BaseEntityBlock in 1.21.1. ChopTreeGoal.chopInterval() reads the tier off the home block at runtime so the speed is always consistent with the placed block, no config needed. LUMBERJACK_CHOP_INTERVAL removed from config (hardcoded per tier now). Recipes chain upgrades: each tier consumes the previous block + the matching axe tier + 7 planks. Pattern: WWW / WAW / WWW (wood — no previous block) WWW / WAW / WBW (stone/iron/diamond/netherite — B = previous tier) Resources: 5 blockstates, 5 block models, 5 item models, 5 recipe files, 5 loot tables, 5 placeholder textures (colour-coded per tier), updated lang. Old single-tier lumberjack_block resources removed. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
FindTreeGoal now queries all other LumberjackEntity instances in the search area and skips any tree-base position they already have claimed, so each worker independently selects a distinct tree. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
- LumberjackBlock gains a FACING (horizontal) block state so it orients toward the player when placed, and supports rotate/mirror for structure blocks and data packs - Blockstate JSONs updated to 4 facing variants (0/90/180/270 y-rotation) - Block models changed from cube_all to cube with distinct textures for front, back, top, bottom, and side faces - Generated 25 block face templates (16x16 per face per tier) and a 64x64 entity skin template following the standard Minecraft UV layout; edit these in any pixel editor (Aseprite, GIMP, Pixelorama, etc.) - gen_textures.py included at project root to regenerate templates https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
Places a MinerEntity that digs a 3-block-tall tunnel (Y, Y+1, Y+2) in the block's facing direction, up to 64 blocks deep. All mined blocks are deposited into the block's 27-slot storage; hoppers and mod pipes can extract from it. Tier restrictions (ore blocks left in place if tier is too low): Wood – skips NEEDS_STONE_TOOL, NEEDS_IRON_TOOL, NEEDS_DIAMOND_TOOL Stone – skips NEEDS_IRON_TOOL, NEEDS_DIAMOND_TOOL Iron – skips NEEDS_DIAMOND_TOOL Diamond / Netherite – mines everything except bedrock Mining intervals match lumberjack: 40 / 30 / 20 / 12 / 6 ticks per block. Progress (currentDepth) is persisted in entity NBT across world restarts. Recipes use pickaxes instead of axes, chained through previous tier: Wood: planks + wooden_pickaxe Stone–Netherite: planks + pickaxe + previous miner block Includes 26 block texture templates (16x16, 5 tiers × 5 faces + entity skin 64x64) and full blockstate/model/recipe/loot-table resource files. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
- LumberjackRenderer and MinerRenderer now add ItemInHandLayer so the held tool is rendered in the entity's hand - LumberjackBlock.onPlace calls setTierEquipment() so the entity spawns holding the matching axe (wooden → netherite); equipment is persisted automatically via mob NBT - MinerBlock.onPlace calls setTierEquipment() so the entity spawns holding the matching pickaxe - MineForwardGoal now digs in facing.getOpposite() so the drill face points toward the player and mining goes into the rock behind the block - Removed gen_textures.py (textures will be created externally) https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
Farmer blocks (wood→netherite) spawn a FarmerEntity that harvests mature crops in a 5×5 area, auto-replants them, and keeps surrounding farmland hydrated without needing a water source. Higher tiers harvest more frequently and force-trigger randomTick on nearby crops to accelerate growth. The farmer entity holds a tier-matched hoe. Supported crops: wheat/carrots/potatoes/beetroot, nether wart, cocoa, sweet berry bush, melons, and pumpkins. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
…YER_INNER_ARMOR PLAYER_INNER_ARMOR uses the slim inner-armor layer mesh which lacks the correct UV mapping for a full player skin, causing visual artifacts. PLAYER uses the standard player model layer that matches the 64×64 skin texture. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
…BonemealableBlock API randomTick is protected in BlockBehaviour so it cannot be called from mod code without an access transformer. CropBlock and StemBlock implement BonemealableBlock, so performBonemeal() is used instead. NetherWart, Cocoa, and SweetBerry don't support bonemeal, so their age property is advanced by 1 directly. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
Warehouse blocks (wood→netherite) spawn a WarehouseWorkerEntity that roams up to 32 blocks to find nearby Lumberjack, Miner, and Farmer block entities with items, collects from them, and deposits into the warehouse's 27-slot chest. Right-clicking the warehouse block opens a chest GUI so players can extract items to central storage. Higher tiers collect more stacks per trip (4→27) and move faster (0.25→0.43 speed). The worker carries no visible items. Source locations are cached to avoid repeated world scans during steady-state collection. Recipe: 8× material surrounding the previous tier (wood uses a chest as the center ingredient). https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
On each PR merge to main the workflow: 1. Increments mod_version by 0.1 (0.9 → 1.0, etc.) 2. Builds the JAR via ./gradlew build 3. Commits the version bump back to main 4. Creates a GitHub release and attaches the JAR Version starts at 0.0 so the first merge produces 0.1. https://claude.ai/code/session_01Ko8zQjsoTR3N7dKcVea1uz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sets up the full Hard Workers mod with all four worker types and the automated release pipeline.
Workers added
Other changes
Generated by Claude Code