A puzzle mod that adds word creation and number guessing to Minecraft gameplay.
CharmedChars Version History
Version 1.5.0 - Ender Dragon Logo Block
Release Date
2026-04-23
Overview
Feature release introducing the Ender Dragon finale: a randomly-colored logo block drops above the exit portal on dragon death, and placing the block in The End then hitting it with a gold or pyrite tool transforms it into a matching colored shulker box pre-filled with configurable loot. All three custom item providers are fully supported and tested. Fixes a critical build issue where the shadow JAR was being overwritten by the thin JAR, and several Oraxen-specific visual glitches.
Changes
New Features ⭐
Ender Dragon Logo Block Drop (EnderDragonKillListener.kt)
- Fires on
EntityDeathEventforEnderDragonentity type - Random color selected via
BlockColor.getRand()(cyan, magenta, or yellow) - Item ID constructed as
charmedchars:${color.directoryName}_logo - Dropped at
Location(world, 5.5, (getHighestBlockYAt(5,0) + 2).toDouble(), 0.5)— on flat end stone outside the fountain, clear of portal blocks and the dragon egg's non-full hitbox - World sourced from
event.entity.world— works in any End dimension - No killing blow required — fires for any dragon death
Logo Block → Shulker Box Transformation (LogoBlockListener.kt)
- Listens on
PlayerInteractEvent(LEFT_CLICK_BLOCK) andBlockDamageEvent - Only activates in
World.Environment.THE_ENDwith a valid gold or pyrite tool (no Silk Touch) - Color detected from provider namespaced ID suffix (
_logo→ color prefix) - Custom block removed via provider, then shulker placed 1 tick later, inventory filled 1 tick after that
- Shulker color mapping: cyan →
CYAN_SHULKER_BOX, magenta →MAGENTA_SHULKER_BOX, yellow →YELLOW_SHULKER_BOX - Processing guard held for the full 2-tick chain to prevent double-processing
Configurable Shulker Contents (config.yml, ConfigManager.kt)
- New config section
logo-block.shulker-contents— list of{materialName, quantity}entries - Default: 4 Ghast Tears
- Invalid material names silently skipped; empty/absent section falls back to default
Logo Block Provider Definitions
- Oraxen: item YAML definitions + block/item model JSONs + textures generated by
/oraxensetup - Nexo: item YAML definitions + model JSONs + textures generated by
/nexosetup - ItemsAdder: logo blocks already defined; now fully integrated with drop and transformation
Bug Fixes 🐛
Shadow JAR Build Fix (build.gradle.kts)
jartask was outputtingCharmedChars-X.X.X.jar, overwriting the shadow fat JAR (no bundled dependencies)- Fix:
tasks.jar { enabled = false }— thin JAR suppressed entirely;build/libs/contains only the deployable shadow JAR - Previously caused
NoClassDefFoundError: kotlinx/coroutines/CoroutineScopeat server startup
Shulker Inventory Wipe Fix (LogoBlockListener.kt)
shulkerState.update(true, false)afterinventory.addItem()was writing the empty snapshot back over the live tile entity, wiping all added items- Fix: removed the
update()call — live block inventory modifications persist immediately without it
Oraxen Logo Block Texture Fix (OraxenSetup.kt)
- Model generation loop did not include logo blocks;
cyan_logo.json,magenta_logo.json,yellow_logo.jsonwere missing from bothmodels/block/andmodels/item/ - Fix: loop extended to generate block and item model JSON for all three logo colors
Oraxen Double-Processing Visual Glitch (LogoBlockListener.kt)
PlayerInteractEventreleased the processing key on event return (before deferred tasks ran);BlockDamageEvent(fired for the same click by Oraxen) then slipped through the guard and scheduled a second transformation, causing a block-break animation and invisible shulker- Fix: processing key held until tick+2 deferred task completes, then released in
finally
Nexo Status Update
- Nexo integration fully tested at runtime — removed all "UNTESTED" labels from documentation and setup guides
Technical Details
Compatibility
- ✅ 100% Backward Compatible — no config or database changes required
- ✅ Minecraft 1.21.11 / PaperMC Build 130+
- ✅ ItemsAdder 3.6.3-beta-14+ (fully tested)
- ✅ Oraxen 1.212.0+ (fully tested)
- ✅ Nexo 1.0.0+ (fully tested)
- ✅ 336 unit tests passing
Custom Item Counts
- 126 custom blocks (added 3 logo blocks to previous 123)
- 5 pyrite items
- Total: 131 custom items
Upgrade Instructions
From v1.4.2:
- Stop server
- Replace
CharmedChars-1.4.2.jarwithCharmedChars-1.5.0.jar - Start server — new config section written automatically if absent
- Oraxen:
/oraxensetup force→/oraxen reload all - Nexo:
/nexosetup force→/nexo reload - ItemsAdder:
/iasetup force→/iazipif logo blocks were not previously available
Post-Release Fixes
Logo Block Drop Location (EnderDragonKillListener.kt)
- Portal blocks teleport item entities to world spawn; dragon egg (first kill) has a non-full hitbox that causes items to slide off onto surrounding portal blocks
- Fix: drop moved to end stone at X=5, Z=0 — outside the fountain structure and beyond the reach of
dropItemNaturally's scatter (~1 block max)
Nexo Resource Pack Size (NexoSetup.kt)
copyTextures()sourced block textures frompack/(512×512 PNGs), causing the Nexo resource pack to exceed the server upload size limit after the three logo block textures were added- Fix: block textures now sourced from
pack-oraxen/(256×256), matching what Oraxen setup uses
Gradle / Shadow upgrade for JDK 25 (build.gradle.kts, gradle-wrapper.properties)
- Gradle 8.14.4 supports only up to JDK 24; the build failed with
IllegalArgumentException: 25.0.2from Kotlin'sJavaVersion.parsewhen JDK was updated to 25.0.2 - Shadow 8.3.5 internally uses Groovy 3 and is incompatible with Gradle 9's Groovy 4 runtime
- Fix: upgraded to Gradle 9.4.1 and Shadow 9.4.1 (rewritten in Kotlin, no Groovy dependency)
Information
| Published on | April 25, 2026 |
|---|---|
| Downloads | 0 |