Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for badbabywentaway

A puzzle mod that adds word creation and number guessing to Minecraft gameplay.

Report CharmedChars?

Release
v1.5.0

badbabywentaway released CharmedChars version v1.5.0 on April 25, 2026

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 EntityDeathEvent for EnderDragon entity 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) and BlockDamageEvent
  • Only activates in World.Environment.THE_END with 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)

  • jar task was outputting CharmedChars-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/CoroutineScope at server startup

Shulker Inventory Wipe Fix (LogoBlockListener.kt)

  • shulkerState.update(true, false) after inventory.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.json were missing from both models/block/ and models/item/
  • Fix: loop extended to generate block and item model JSON for all three logo colors

Oraxen Double-Processing Visual Glitch (LogoBlockListener.kt)

  • PlayerInteractEvent released 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:

  1. Stop server
  2. Replace CharmedChars-1.4.2.jar with CharmedChars-1.5.0.jar
  3. Start server — new config section written automatically if absent
  4. Oraxen: /oraxensetup force/oraxen reload all
  5. Nexo: /nexosetup force/nexo reload
  6. ItemsAdder: /iasetup force/iazip if 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 from pack/ (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.2 from Kotlin's JavaVersion.parse when 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 onApril 25, 2026
Downloads0

Platforms

Paper Paper (1.21.10-26.1.2)