[1.20.1-0.0.9-hotfix1] - 23.11.2025
Fixed
- Copper Golem Spawn Egg model now uses correct template_spawn_egg parent instead of generated item model
[1.21.1-0.0.9-hotfix1] - 23.11.2025
Fixed
- Critical bug: Copper Golem spawning was broken due to missing block tag definitions
- Added missing
copper.jsontag file defining all copper block variants (normal + oxidized + waxed) - Added missing
copper_chests.jsontag file defining all copper chest variants - Added missing
golem_target_chests.jsonandgolem_target_barrels.jsontag files for item transport - Golem spawning now works correctly: Place carved pumpkin on copper block to spawn golem + copper chest
[1.21.1-0.0.9] - 23.11.2025
Added
- Mining support for Copper Chests and Copper Golem Statues with pickaxe
- Block tags for mineable/pickaxe and needs_stone_tool for all chest and statue variants
- Pose preservation: Statue items now retain their pose in inventory, GUIs, and item frames
- Block state component rendering for statue items
Fixed
- Copper Chests and Copper Golem Statues can now be mined and harvested with correct tool (stone pickaxe or better)
- Copper Golem Statue items now display the correct pose in all contexts (inventory, item frames, GUIs)
- Item renderer now reads DataComponents.BLOCK_STATE from dropped statue items
- Loot tables correctly apply minecraft:copy_state for pose property
- Item frame rendering: Copper Chests and Copper Golem Statues now display correctly without offset issues
[1.20.1-0.0.9] - 23.11.2025
Added
- Mining support for Copper Chests and Copper Golem Statues with pickaxe
- Block tags for mineable/pickaxe and needs_stone_tool for all chest and statue variants
- Pose preservation: Statue items now retain their pose in inventory, GUIs, and item frames
- Block state component rendering for statue items
Fixed
- Copper Chests and Copper Golem Statues can now be mined and harvested with correct tool (stone pickaxe or better)
- Copper Golem Statue items now display the correct pose in all contexts (inventory, item frames, GUIs)
- Item renderer now reads DataComponents.BLOCK_STATE from dropped statue items
- Loot tables correctly apply minecraft:copy_state for pose property
- Item frame rendering: Copper Chests and Copper Golem Statues now display correctly without offset issues
[1.21.1-0.0.8] - 22.11.2025
Fixed
- Recipe format corrected to Minecraft 1.21.1 specification (using
"id"instead of"item"in result field)
[1.20.1-0.0.8] - 2025-11-22
Fixed
- Recipe format corrected from 1.20.5+ format to 1.20.1 format (changed
"id"to"item"in result objects) - Added missing
"count": 1to Golem Statue waxing recipes
[1.21.1-0.0.7] - 2025-11-22
Fixed
- Waxed Copper Chests are now recognized by Copper Golems as source containers
- Barrels surrounded by blocks (only front face accessible) are now correctly detected by Copper Golems
Added
- Separate tag system for container types:
golem_target_chestsandgolem_target_barrels - Tag-based barrel detection for modpack compatibility
- Container-specific blocking checks (chests need space above, barrels only need front face free)
- Copper Golem AI now accepts both chest and barrel tags as valid target containers
- Automatic sound detection based on container type (Copper Chest, Barrel, or Regular Chest sounds)
Changed
- Updated
CHEST_COMPATIBILITY.mdwith separate documentation for chests and barrels - Updated datapack example to include
golem_target_barrels.json - Improved barrel accessibility logic for better pathfinding in tight spaces
[1.20.1-0.0.7] - 2025-11-22
Fixed
- Waxed Copper Chests are now recognized by Copper Golems as source containers
- Barrels surrounded by blocks (only front face accessible) are now correctly detected by Copper Golems
Added
- Separate tag system for container types:
golem_target_chestsandgolem_target_barrels - Tag-based barrel detection for modpack compatibility
- Container-specific blocking checks (chests need space above, barrels only need front face free)
- Copper Golem AI now accepts both chest and barrel tags as valid target containers
- Automatic sound detection based on container type (Copper Chest, Barrel, or Regular Chest sounds)
- Spawn Egg now uses color-based rendering (
0xB87333and0x48D1CC) instead of texture files
Changed
- Updated
CHEST_COMPATIBILITY.mdwith separate documentation for chests and barrels - Updated datapack example to include
golem_target_barrels.json - Improved barrel accessibility logic for better pathfinding in tight spaces
[1.21.1-0.0.6] - 22.11.2025
Added
- 3D Item Rendering for Copper Chests and Copper Golem Statues in inventory, hand, and item frames
- Copper Chest Oxidation through 4 stages (Copper → Exposed → Weathered → Oxidized)
- Copper Chest weathering mechanics: scraping with axe removes oxidation stages
- Copper Chest waxing with honeycomb prevents oxidation
- Waxed Copper Chests (4 variants) that prevent oxidation, craftable with honeycomb
- Waxed Copper Chest dewaxing with axe
- Copper Button oxidation, scraping, and waxing support
- Copper Golem Statue Oxidation through 4 stages
- Copper Golem Statue scraping and waxing support
- Waxed Copper Golem Statues (4 variants), craftable with honeycomb, still revivable with axe
- Waxed Copper Golem Statue dewaxing with axe (statue remains revivable)
- Double Chest Oxidation Sync to prevent separation
- Double Chest atomic updates to prevent separation during oxidation
- Item preservation during chest oxidation - items no longer drop or duplicate
- Durability damage for axes when scraping/dewaxing (2x for double chests)
- Interaction System for honeycomb waxing and axe scraping with particles and sounds
WeatheringHelperutility class with vanilla oxidation probability (0.05688889)
Fixed
- Copper Golem become_statue sound now uses existing block sounds
- Copper Golem now drops held items when turning into statue
- Waxed Copper Chests and Statues now appear in Creative Mode tab
- Waxed Copper Chests now render with correct copper textures
- Chests no longer oxidize while open (prevents item loss)
- Chests no longer accept scraping/waxing while open
- Double chest oxidation now updates both halves simultaneously
- Particles and sounds now appear on both halves of double chests
- Chest opening with axe/honeycomb after full descraping/dewaxing
- Statue revival with axe prioritizes scraping/dewaxing over revival when applicable
[1.20.1-0.0.6] - 2025-11-22
Added
- 3D Item Rendering for Copper Chests and Copper Golem Statues in inventory, hand, and item frames
- Copper Chest Oxidation through 4 stages (Copper → Exposed → Weathered → Oxidized)
- Copper Chest weathering mechanics: scraping with axe removes oxidation stages
- Copper Chest waxing with honeycomb prevents oxidation
- Waxed Copper Chests (4 variants) that prevent oxidation, craftable with honeycomb
- Waxed Copper Chest dewaxing with axe
- Copper Button oxidation, scraping, and waxing support
- Copper Golem Statue Oxidation through 4 stages
- Copper Golem Statue scraping and waxing support
- Waxed Copper Golem Statues (4 variants), craftable with honeycomb, still revivable with axe
- Waxed Copper Golem Statue dewaxing with axe (statue remains revivable)
- Double Chest Oxidation Sync to prevent separation
- Double Chest atomic updates to prevent separation during oxidation
- Item preservation during chest oxidation - items no longer drop or duplicate
- Durability damage for axes when scraping/dewaxing (2x for double chests)
- Interaction System for honeycomb waxing and axe scraping with particles and sounds
WeatheringHelperutility class with vanilla oxidation probability (0.05688889)
Fixed
- Copper Golem become_statue sound now uses existing block sounds
- Copper Golem now drops held items when turning into statue
- Waxed Copper Chests and Statues now appear in Creative Mode tab
- Waxed Copper Chests now render with correct copper textures
- Chests no longer oxidize while open (prevents item loss)
- Chests no longer accept scraping/waxing while open
- Double chest oxidation now updates both halves simultaneously
- Particles and sounds now appear on both halves of double chests
- Chest opening with axe/honeycomb after full descraping/dewaxing
- Statue revival with axe prioritizes scraping/dewaxing over revival when applicable
[1.21.1-0.0.5-hotfix1] - 2025-11-20
Fixed
- Tag Loading Error: Fixed "missing references" error for optional mod chests
- Issue: Tag loading failed when IronChest mod were not installed
- Error:
Couldn't load tag coppergolemlegacy:golem_target_chests as it is missing following references - Solution: Changed all optional mod entries to use
{"id": "...", "required": false}format - Affected mods: IronChest (14 chest types)
- Mod now works properly both with and without IronChest installed
[1.20.1-0.0.5-hotfix1] - 2025-11-20
Fixed
- Tag Loading Error: Fixed "missing references" error for optional mod chests
- Issue: Tag loading failed when IronChest mod were not installed
- Error:
Couldn't load tag coppergolemlegacy:golem_target_chests as it is missing following references - Solution: Changed all optional mod entries to use
{"id": "...", "required": false}format - Affected mods: IronChest (14 chest types)
- Mod now works properly both with and without IronChest installed
Changelog
All notable changes to the Copper Golem Legacy mod will be documented in this file.
[1.21.1-0.0.5] - 2025-11-20
Added
-
Mod Compatibility System
- Flexible tag-based system for chest interactions
- New block tags:
golem_target_chests - Target chests define where golems can place items to (all compatible chests)
- Easy mod integration without code changes - just add block IDs to tags
-
Barrel Support
- Copper Golems can now place items into barrels
- Correct barrel sounds (
BARREL_OPEN/BARREL_CLOSE) when interacting - Added
minecraft:barreltogolem_target_cheststag
-
IronChest Mod Integration
- Full support for all 14 IronChest variants (7 types + trapped variants)
- Supported chests: iron, gold, diamond, copper, crystal, obsidian, dirt
- Both regular and trapped versions work with golem item transport
-
Documentation
CHEST_COMPATIBILITY.md- Complete guide for adding new mod supportdatapack_example/- Example datapack for players to add custom chests- Instructions for three integration methods: direct block IDs, mod tags, datapacks
- Examples for popular mods (Storage Drawers, Sophisticated Storage, AE2)
Changed
-
AI Sound System
- Enhanced
playChestSound()method with container-type detection - Automatic sound selection based on container type:
- Copper Chests → Custom copper chest sounds
- Barrels → Barrel-specific sounds
- Regular Chests → Standard chest sounds
- Improved blockState caching for better performance
- Enhanced
-
Code Structure
ModTags.java- AddedGOLEM_TARGET_CHESTSconstantsCopperGolemAi.java- Refactored to use tags instead of hardcoded block checks- More maintainable and extensible architecture
Fixed
-
Container Detection Bug
- Fixed golem only detecting vanilla chests (
ChestBlockEntity) - Now properly detects all container types including barrels and mod chests
- Changed search from
ChestBlockEntitytoBaseContainerBlockEntity - Enables support for IronChest, barrels, and other mod containers
- Fixed golem only detecting vanilla chests (
-
Container Animation Bug
- Fixed missing open/close animations for barrels and mod chests
- Barrels now correctly animate using
OPENBlockState property - Chests use
blockEventfor animation - All container types (vanilla, barrels, mod chests) now animate properly
Technical
- Tag-based predicates in
TransportItemsBetweenContainersbehavior - Container type detection with proper sound event mapping
- Support for datapack-based chest additions with
"replace": falsepattern - Performance-optimized through Minecraft's tag caching system
[1.20.1-0.0.5] - 2025-11-20
Added
-
Mod Compatibility System
- Flexible tag-based system for chest interactions
- New block tags:
golem_target_chests - Target chests define where golems can place items to (all compatible chests)
- Easy mod integration without code changes - just add block IDs to tags
-
Barrel Support
- Copper Golems can now place items into barrels
- Correct barrel sounds (
BARREL_OPEN/BARREL_CLOSE) when interacting - Added
minecraft:barreltogolem_target_cheststag
-
IronChest Mod Integration
- Full support for all 14 IronChest variants (7 types + trapped variants)
- Supported chests: iron, gold, diamond, copper, crystal, obsidian, dirt
- Both regular and trapped versions work with golem item transport
-
Documentation
CHEST_COMPATIBILITY.md- Complete guide for adding new mod supportdatapack_example/- Example datapack for players to add custom chests- Instructions for three integration methods: direct block IDs, mod tags, datapacks
- Examples for popular mods (Storage Drawers, Sophisticated Storage, AE2)
Changed
-
AI Sound System
- Enhanced
playChestSound()method with container-type detection - Automatic sound selection based on container type:
- Copper Chests → Custom copper chest sounds
- Barrels → Barrel-specific sounds
- Regular Chests → Standard chest sounds
- Improved blockState caching for better performance
- Enhanced
-
Code Structure
ModTags.java- AddedGOLEM_TARGET_CHESTSconstantsCopperGolemAi.java- Refactored to use tags instead of hardcoded block checks- More maintainable and extensible architecture
Fixed
-
Critical Server Crash
- Client-Side Import Fix: Resolved crash when loading mod on dedicated servers
- Issue:
CopperGolemLegacyConfig.javaimported client-only classes (Screen,GuiGraphics,Button, etc.) - Crash:
RuntimeException: Attempted to load class net/minecraft/client/gui/screens/Screen for invalid dist DEDICATED_SERVER - Solution: Moved all GUI/Screen code to new
ConfigScreenFactory.javawith@OnlyIn(Dist.CLIENT)annotation CopperGolemLegacyConfig.javanow only containsForgeConfigSpec(safe for both client and server)- Config screen is now properly isolated to client-side only code
-
Container Detection Bug
- Fixed golem only detecting vanilla chests (
ChestBlockEntity) - Now properly detects all container types including barrels and mod chests
- Changed search from
ChestBlockEntitytoBaseContainerBlockEntity - Enables support for IronChest, barrels, and other mod containers
- Fixed golem only detecting vanilla chests (
-
Container Animation Bug
- Fixed missing open/close animations for barrels and mod chests
- Barrels now correctly animate using
OPENBlockState property - Chests use
blockEventfor animation - All container types (vanilla, barrels, mod chests) now animate properly
Technical
- Tag-based predicates in
TransportItemsBetweenContainersbehavior - Container type detection with proper sound event mapping
- Support for datapack-based chest additions with
"replace": falsepattern - Performance-optimized through Minecraft's tag caching system
[0.0.4] - 2025-11-19
Changed
- Entity Size: Reduced Copper Golem width from 0.7 to 0.6 blocks
- Allows golem to fit through doors more easily
Fixed
-
Chest Interaction Range: Fixed vertical distance detection for chest interactions
- Increased vertical reach from 0.5 to match horizontal distance (0.5-1.0 blocks)
- Golems can now properly reach chests that are one block above or below them
- Fixes issue where golem standing on a block couldn't interact with chest one block below
-
Spawn Behavior
- Copper Golems now perform idle walk animation after spawning before checking the chest they spawned on
- Added initial 140-tick (7 second) transport cooldown when golem spawns
- Prevents golem from immediately trying to interact with spawn chest
- Allows idle walk/animation behavior to trigger naturally after spawn
Changelog - Forge 1.20.1 Port
[1.20.1-0.0.4] - 2025-11-19
Port Information
Complete port from NeoForge 1.21.1 to Forge 1.20.1
Changed - Build System
- Gradle: Downgraded from 9.2.0 to 8.7 for ForgeGradle compatibility
- Java: Downgraded from Java 21 to Java 17 (required for Minecraft 1.20.1)
- Mod Loader: Migrated from NeoForge MDG 2.0.118 to ForgeGradle 6.0
- Minecraft Version: 1.21.1 → 1.20.1
- Forge Version: 47.3.0 with Parchment Mappings 2023.09.03-1.20.1
- Metadata File: Created new
mods.tomlfor Forge (replacing NeoForge's format) - Build Output:
coppergolemlegacy-1.20.1-0.0.3.jar(1.38 MB)
Changed - Core API Migration
- Package Imports: All
net.neoforged.*imports replaced withnet.minecraftforge.* - Event Bus:
NeoForge.EVENT_BUS→MinecraftForge.EVENT_BUS - Event Package:
net.neoforged.neoforge.event.level→net.minecraftforge.event.level - Registry System:
DeferredRegister.createItems()→DeferredRegister.create(ForgeRegistries.ITEMS, ...)DeferredRegister.create(Registries.*)→DeferredRegister.create(ForgeRegistries.*, ...)DeferredHolder<T>→RegistryObject<T>DeferredItem<T>→RegistryObject<Item>
- Mod Constructor: Forge 1.20.1 doesn't support IEventBus constructor parameter injection
- From:
public CopperGolemLegacy(IEventBus modEventBus) - To:
public CopperGolemLegacy()withFMLJavaModLoadingContext.get().getModEventBus()
- From:
Changed - Block Interaction API
- Method Signature:
useItemOn()withItemInteractionResult→use()withInteractionResult - Return Type:
ItemInteractionResultremoved (1.21+ exclusive) →InteractionResultused throughout - Parameter Changes:
useItemOn(ItemStack, BlockState, ...)→use(BlockState, ..., ItemStack from hand) - Affected Classes:
CopperButtonBlock.javaWaxedCopperButtonBlock.javaCopperGolemStatueBlock.java
Changed - Button Block API
- Constructor Signature: Parameter order changed for
ButtonBlock- From:
super(BlockSetType, int, Properties) - To:
super(Properties, BlockSetType, int, boolean)
- From:
- BlockSetType:
BlockSetType.COPPER→BlockSetType.IRON(COPPER doesn't exist in 1.20.1) - Method Removal:
useWithoutItem()removed (doesn't exist in 1.20.1) - Affected Classes:
CopperButtonBlock.java- Constructor updated, oxidized button check logic adjustedWaxedCopperButtonBlock.java- Constructor updated
Changed - Entity API
- defineSynchedData(): Method signature changed
- From:
defineSynchedData(SynchedEntityData.Builder builder) - To:
defineSynchedData()withthis.entityData.define()calls
- From:
- finalizeSpawn(): Added
CompoundTagparameter- From:
finalizeSpawn(ServerLevelAccessor, DifficultyInstance, MobSpawnType, SpawnGroupData) - To:
finalizeSpawn(ServerLevelAccessor, DifficultyInstance, MobSpawnType, SpawnGroupData, CompoundTag)
- From:
- dropCustomDeathLoot(): Signature changed
- From:
dropCustomDeathLoot(ServerLevel, DamageSource, boolean) - To:
dropCustomDeathLoot(DamageSource, int, boolean)
- From:
- Attributes:
Attributes.STEP_HEIGHTremoved (doesn't exist in 1.20.1) - Pathfinding:
PathType→BlockPathTypesenum - AI Behavior:
AnimalPanic<>→AnimalPanic(not generic in 1.20.1) - TransportItemsBetweenContainers: Multiple 1.20.1 API fixes
ChunkPos.rangeClosed()→ Manual chunk iteration loopgetChunkNow()→getChunk()path.getEndNode().asBlockPos()→new BlockPos(node.x, node.y, node.z)getBoundingBox().getYsize()→getBbHeight()AABB.ofSize()→ Manual AABB constructorDirection.stream()→Arrays.stream(Direction.values())
- Affected Classes:
CopperGolemEntity.javaCopperGolemAi.javaTransportItemsBetweenContainers.java
Changed - Block Entity API
- saveAdditional(): Removed
HolderLookup.Providerparameter- From:
saveAdditional(CompoundTag, HolderLookup.Provider) - To:
saveAdditional(CompoundTag)
- From:
- load(): Method changed from
loadAdditional()- From:
loadAdditional(CompoundTag, HolderLookup.Provider) - To:
load(CompoundTag)
- From:
- getUpdateTag(): Added missing override
- Returns:
this.saveWithoutMetadata()
- Returns:
- Affected Classes:
CopperGolemStatueBlockEntity.java
Changed - Resource Location API
- Constructor: Static method removed
- From:
ResourceLocation.fromNamespaceAndPath(namespace, path) - To:
new ResourceLocation(namespace, path)
- From:
- Affected Files: All files using ResourceLocation (20+ files)
Changed - Global Position API
- Constructor: Changed from public to private
- From:
new GlobalPos(dimension, pos) - To:
GlobalPos.of(dimension, pos)
- From:
- Affected Classes:
InteractWithDoor.javaPressRandomCopperButton.javaTransportItemsBetweenContainers.java
Changed - ItemStack API
- ItemStack API:
stack.consume()→stack.shrink()isSameItemSameComponents()→isSameItemSameTags()
- hurtAndBreak(): Signature changed
- From:
hurtAndBreak(int, ServerLevel, ServerPlayer, Consumer) - To:
hurtAndBreak(int, LivingEntity, Consumer)
- From:
- Spawn Egg API: Changed from
SpawnEggItemtoForgeSpawnEggItem- From:
new SpawnEggItem(COPPER_GOLEM.get(), color1, color2, properties) - To:
new ForgeSpawnEggItem(COPPER_GOLEM, color1, color2, properties) ForgeSpawnEggItemacceptsRegistryObject<EntityType<?>>directly (lazy initialization)
- From:
- Affected Classes: Multiple block and AI behavior classes
Changed - Rendering API
- renderToBuffer(): Parameter count increased
- From:
renderToBuffer(PoseStack, VertexConsumer, int, int, int)with color as single int - To:
renderToBuffer(PoseStack, VertexConsumer, int, int, float, float, float, float)with RGBA
- From:
- Color Format: Changed from packed int (-1 for white) to RGBA floats (1.0F, 1.0F, 1.0F, 1.0F)
- Affected Classes:
CopperGolemStatueRenderer.javaCopperGolemEyesLayer.java
Removed - 1.21+ Exclusive Features
- MapCodec System: Completely removed (doesn't exist in 1.20.1)
- Removed
codec()method fromCopperGolemStatueBlock.java - Removed
CODECconstant andcodec()fromWeatheringCopperGolemStatueBlock.java - Removed all
RecordCodecBuilderusage
- Removed
- DataComponents API: Removed (1.21+ only)
- Removed component-based data storage from block entities
- Reverted to CompoundTag-based NBT storage
- StreamCodec: Removed (1.21+ only)
- Config Screen Handler: Removed
ConfigScreenHandler.setScreenFactory()(doesn't exist in Forge 1.20.1)- Config screen registration removed from
CopperGolemLegacyClient.java
- Config screen registration removed from
Fixed - Compilation Issues
- PowerShell Script Errors: Fixed literal backtick characters (`) in Java source files
- PowerShell escape sequences (`n for newline) were written literally
- Manually replaced with proper Java syntax in affected files
- Missing Imports: Added
InteractionResultimport toCopperGolemStatueBlock.java - Missing Semicolons: Fixed missing semicolon in
CopperGolemEntity.javaattribute builder - Method Overrides: Fixed incorrect
@Overrideannotations for methods that don't exist in 1.20.1
Fixed - Runtime Issues
- NoSuchMethodException: Fixed constructor injection incompatibility
- Forge 1.20.1 requires parameterless constructor with manual event bus retrieval
- Fixed in
CopperGolemLegacy.java
- Missing pack.mcmeta: Created resource pack metadata file
- Added with
pack_format: 15for Minecraft 1.20.1 - Includes
forge:resource_pack_format: 15andforge:data_pack_format: 12
- Added with
- Missing Block Tag: Created
data/coppergolemlegacy/tags/blocks/copper.json- Contains all 8 copper block variants (copper_block, exposed, weathered, oxidized, waxed variants)
- Required for golem spawning mechanic (pumpkin + copper block detection)
- Copper Chest Interaction: Created
data/coppergolemlegacy/tags/blocks/copper_chests.json- Contains all 4 copper chest variants (copper_chest, exposed, weathered, oxidized)
- Required for item transport behavior (golem finding copper chests)
- Missing Sound File: Sound
coppergolemlegacy:sounds/entity/copper_golem/become_statue.oggreferenced but not included- Warning logged but doesn't prevent gameplay
Technical Details - Migration Process
- Automated Conversion: Created PowerShell scripts for mass API replacement
convert_to_forge.ps1- Package imports conversionfix_block_interactions.ps1- Block interaction API updatesfix_api_changes.ps1- Resource location and registry fixesfix_entity_blockentity.ps1- Entity and block entity method updates
- Manual Fixes: 30+ compilation errors fixed through targeted code changes
- Build System: Complete restructuring of
build.gradlefor ForgeGradle compatibility - Gradle Wrapper: Downgraded and regenerated for version 8.7
- UTF-8 Encoding: All file operations use UTF-8 without BOM to prevent compiler issues
Compatibility Notes
- Breaking Changes: This is a complete rewrite for Forge 1.20.1
- No Backward Compatibility: Cannot be used with Minecraft 1.21+
- Mod Dependencies: Requires Forge 47.3.0 or higher for Minecraft 1.20.1
- Java Requirement: Java 17 (not compatible with Java 21)
Known Limitations
- Config Screen: In-game config GUI available via Mods menu
- Copper BlockSetType: Uses IRON instead of COPPER (not available in 1.20.1)
- Button Behavior: Oxidized button check moved from
useWithoutItem()to mainuse()method
Added - Configuration System
- Config Screen: In-game GUI for mod configuration
- Accessible via Mods menu → Copper Golem Legacy → Config button
- Toggle button for "Golem Presses Buttons" setting
- Visual feedback: Green text when enabled, red when disabled
- Tooltip explains behavior: "20% chance every 7.5 seconds"
- Changes save automatically to
config/coppergolemlegacy-common.toml
- Config Registration: Properly registered using Forge's
ConfigScreenHandler.ConfigScreenFactory- Registered in
FMLClientSetupEventfor thread-safety - Uses
event.enqueueWork()for proper initialization timing
- Registered in
Added - AI Behavior System
- Item Transport Behavior: Golems now transport items between containers
- Automatically finds copper chests with items within a 65×17×65 block cubic area centered on the golem
- Transports items to regular chests or trapped chests
- Walks to chest, waits for 60 ticks while interacting, picks up items
- Carries items in main hand while walking to destination chest
- Places items in destination chest and returns to idle behavior
- Transport behavior has highest priority (Priority 0) but won't interrupt button pressing
- Cooldown system (60-100 ticks) prevents constant transport spam
- Tracks visited and unreachable containers to avoid getting stuck
- Button Press Behavior: Enhanced with interruption protection
- 20% random chance to press buttons (checked every 7.5 seconds)
- Finds copper buttons within 16 block horizontal, 4 block vertical radius
- Cannot be interrupted by transport behavior once started (via IS_PRESSING_BUTTON memory flag)
- 5-15 second cooldown after pressing any button
- 20-40 second cooldown before visiting the same button again
- Priority 1 (lower than transport) but protected from interruption
- Memory System: New memory types for behavior coordination
IS_PRESSING_BUTTON: Boolean flag prevents interruption of button pressingTRANSPORT_ITEMS_COOLDOWN_TICKS: Cooldown between transport operationsVISITED_BLOCK_POSITIONS: Tracks visited containers to avoid repetitionUNREACHABLE_TRANSPORT_BLOCK_POSITIONS: Tracks unreachable containers
- Behavior Priority System: Intelligent task management
- Priority 0: Item Transport (highest priority, can start anytime)
- Priority 1: Button Press (protected from interruption once started)
- Priority 2: Look at players
- Priority 3: Random walking / idle standing
File Changes Summary
- Modified: 40+ Java source files
- Core API migration (35+ files)
- AI behavior enhancements (3 files:
CopperGolemAi.java,PressRandomCopperButton.java,TransportItemsBetweenContainers.java) - Config screen implementation (2 files:
CopperGolemLegacyClient.java,CopperGolemLegacyConfig.java)
- Created: 5 new files
META-INF/mods.toml(Forge metadata)pack.mcmeta(Resource pack metadata)data/coppergolemlegacy/tags/blocks/copper.json(Block tag for spawning)data/coppergolemlegacy/tags/blocks/copper_chests.json(Block tag for item transport)ModMemoryTypes.javaenhancement (added IS_PRESSING_BUTTON memory type)
- Build Files: 5 files changed (
build.gradle,gradle.properties,settings.gradle,gradle-wrapper.properties,.github/workflows/release.yml) - Total Lines Changed: 800+ lines of code
Development Notes
- Port completed on November 19, 2025
- All NeoForge-specific APIs successfully replaced with Forge equivalents
- No features were removed; all functionality preserved
- Ready for release pending runtime testing
Version Naming Convention: [minecraft_version]-[mod_version]
Build Location: build/libs/coppergolemlegacy-1.20.1-0.0.3.jar
Forge Version: 47.3.0 for Minecraft 1.20.1
License: MIT License (Copyright 2025 Marc Schirrmann)
Version 0.0.3 - Copper Buttons & Improved AI

New Features
- Copper Buttons: 8 variants (4 oxidation stages + waxed versions) with 1.5s activation time
- Button Interactions: Scrape with axe, wax with honeycomb, oxidized buttons won't work (unless waxed)
- Golem Button AI: Golems now intelligently search for and press nearby copper buttons
- Smooth Animations: Golem stops completely (5 ticks) before pressing - no animation overlap
- Smart Cooldowns: 5-15s between any button presses, 20-40s per individual button
- Configurable: Enable/disable button pressing in config file
Crafting
- 1 Cut Copper Block → 1 Copper Button
- Button + Honeycomb → Waxed Button
- Add Crafting Recipe for Copper Chest in all 4 variants

[0.0.2] - 2025-01-18
Fixed from GitHub Issue
- Item Sorting Bug: Fixed Copper Golems skipping slots when placing items in chests
- Removed duplicate slot increment causing grid pattern (slot filled, slot skipped, slot filled, etc.)
- Fixed incorrect stack size calculation when stacking items (
spaceLeftvstoAdd) - Items now fill chest slots consecutively without gaps
Changelog
All notable changes to the Copper Golem Legacy mod will be documented in this file.
[0.0.1] - 2025-01-18
Added
- Initial release of Copper Golem Legacy
- MIT License (Copyright 2025 Marc Schirrmann)
- GitHub repository setup with automated release workflow
- Comprehensive README.md with installation instructions, features, and development guide
- Ko-fi support link for project development funding
Added
-
Complete Sound System Implementation
- Item interaction sounds (item_get, item_no_get, item_drop, item_no_drop) playing at tick 9 with 1.0F volume
- Chest opening/closing sounds with conditional logic for copper vs regular chests at tick 1 and 60
- Custom copper chest sounds (copper_chest.open/close) for all oxidation levels
- Copper statue sounds (hit, break, place, become_statue) for all block interactions
- Entity sounds for all oxidation levels (death, hurt, step, head_spin) for unaffected, exposed, weathered, and oxidized states
- Custom
ModSoundTypes.COPPER_STATUESoundType for statue blocks - All sound events registered in
ModSounds.javawith proper mappings insounds.json
-
Copper Chest System
CopperChestBlockwith full oxidation support (unaffected, exposed, weathered, oxidized)- Copper-to-copper chest mapping system for seamless block conversion
- Waxing support for all oxidation levels
- Custom block entity (
CopperChestBlockEntity) with 27-slot inventory - Connection rules for double chest formation
- Chest renderer (
CopperChestRenderer) with proper material mappings for all variants - Block tag
copper_chestsfor copper chest identification
-
Copper Statue System
- Four oxidation variants: copper, exposed_copper, weathered_copper, oxidized_copper statues
- Interactive pose system (standing, running, sitting, star) changeable with empty hand
- Axe restoration mechanic to convert statues back to golems
- Custom block entity (
CopperGolemStatueBlockEntity) storing golem data - Statue renderer (
CopperGolemStatueRenderer) with proper model animations - Full sound integration for all interactions
Changed
-
Sound Volume Optimization
- Item interaction sounds increased to 1.0F for better audibility
- Chest sounds set to 1.0F volume for clear audio feedback
- Step sounds maintained at 0.15F (standard walking volume)
- Entity base sound volume set to 0.4F
-
Step Sound Frequency
- Overridden
nextStep()method to returnmoveDist + 0.35F(reduced from default 0.6F) - Step sounds now play every step instead of every 2 steps
- Overridden
-
Chest Interaction System
- Custom
playChestSound()method with manual sound playback - Conditional sound selection based on
ModTags.Blocks.COPPER_CHESTS - Integrated
blockEvent()calls for proper chest opening/closing animations - Game events (CONTAINER_OPEN/CLOSE) properly triggered
- Custom
-
Package Structure
- Migrated package from
com.example.coppergolemlegacytocom.github.smallinger.coppergolemlegacy - Updated all package declarations and imports across 29+ files
- Maintained proper subpackage organization (block, entity, client, events, ai)
- Migrated package from
-
Spawning Mechanics
- Player-oriented golem and chest spawning (structures face toward player)
- Precise rotation control using
Direction.fromYRot()with 180° offset for player-facing orientation - Golem positioned 90° clockwise from chest direction
- All rotation values (yRot, yBodyRot, yHeadRot and old values) set explicitly for consistent orientation
-
Build Configuration
- Custom JAR naming format:
modid-mcversion-modversion.jar(e.g.,coppergolemlegacy-1.21.1-0.0.1.jar) - GitHub Actions workflow for automated release builds
- Automatic version extraction from gradle.properties
- JAR artifacts automatically uploaded to GitHub releases
- Custom JAR naming format:
-
Project Documentation
- Removed unnecessary config system (mod requires no user configuration)
- Complete CHANGELOG.md with detailed feature history
- Professional README.md for GitHub repository
- MIT License file with proper copyright attribution
Fixed
- Chest sounds not playing during golem container interactions
- Chest animations not triggering when golem opens/closes chests
- Wrong sounds playing for copper chests (now uses custom copper chest sounds)
- Step sounds only playing every 2 steps (now plays every step)
- Item interaction sounds too quiet (increased to 1.0F volume)
- Package name inconsistencies after refactoring
- Build errors due to old package references in import statements
- Incorrect spawning orientation (chest and golem not facing player)
- Golem spawning facing south regardless of player direction
- Missing rotation values causing inconsistent entity orientation
Technical Details
- AI Behavior Integration: Sound coordination at specific ticks (1, 9, 60) in
CopperGolemAi.java - Entity Animation: Proper timing between chest operations and sound playback
- Oxidation System: Full weathering support for copper chests with visual and audio changes
- Block Registry: All blocks registered with proper properties, sounds, and oxidation levels
- Renderer System: Custom renderers for chest variants, statue poses, and golem entity
- CI/CD Pipeline: GitHub Actions workflow with permissions: contents: write for release automation
- Item Models: All 4 copper golem statue variants using
minecraft:item/generatedparent with proper texture paths
Audio Files Added
entity/copper_golem/: Death, hurt, step, and head_spin sounds for 4 oxidation levelsentity/copper_golem/: Item interaction sounds (item_drop, item_no_drop, no_item_get, no_item_no_get)block/copper_chest/: Open/close sounds for 4 oxidation levelsblock/copper_statue/: Hit, break, place, and become_statue sounds with multiple variants- Total: 50+ sound files integrated
Removed
- Config system (Config.java and all related integration)
- Config screen registration from client initialization
- Config translation keys from en_us.json
- Unnecessary template code and example configurations
Known Issues
- None currently reported
[Unreleased]
Planned Features
- Additional golem behaviors and interactions
- More statue poses
- Redstone integration capabilities
- Extended oxidation mechanics
Notes
- This mod is for Minecraft 1.21.1 with NeoForge 21.1.215
- Requires Java 21 or higher
- All sounds properly registered and mapped through
ModSounds.java - Custom SoundTypes properly implemented for blocks
- Package refactoring completed successfully with all references updated
- Licensed under MIT License (see LICENSE file)



