Tags
Creators
Details
v0.8.0-beta
Compatibility
Required content
Changes
[v0.8.0-beta] - 2026-01-03
🔥 Sprint 1: Debug System Foundation
Debug System Improvements
-
Call Stack Tracking - Added DebugFrame class for function call tracking
pushFrame()/popFrame()methods in DebugManager- Call stack visualization support
- Depth tracking for Step Out functionality
-
Step Out Implementation - Complete step-through debugging
stepOut()method in DebugManager- Exits current function and pauses at caller
- Works with call stack depth tracking
-
Code Cleanup - Production-ready debug code
- Removed all
System.err.printlndebug output - Replaced with
ScriptLogger.debug()with null-safe formatting - Removed unused imports (HashMap, Map from DebugSession)
- Added SLF4J-style
{}placeholder formatting to ScriptLogger
- Removed all
🎯 Sprint 1.5: Event System Revival
Event System Fixes (2026-01-03)
-
CRITICAL FIX: Event blocks now parse correctly 🔥
- Added
onEvent { }block parsing in ScriptTask - Events were completely broken - blocks were ignored
- Now properly collects event script body
- Registers directly with EventManager
- Added
-
CRITICAL FIX: Events now work after script restart 🔥
- Fixed event persistence bug when stopping/restarting scripts
- Added
registeredEventstracking in ScriptTask - Events are now properly unregistered in
stop()method - Events re-register correctly on
restart() - Prevents duplicate/stale event handlers
-
CRITICAL FIX: Events work after stop hotkey (Bug #11) 🔥
- Fixed
ScriptInterpreter.shouldStopflag blocking event execution - Added automatic flag reset in
queueCommand()andexecuteQueuedCommands() - Events now execute correctly after pressing Z (stop all scripts)
- Test script:
test_events_after_stop.kh - Issue:
shouldStopremainedtrueafterstopProcessing(), blocking all subsequent commands - Solution: Auto-reset flag when starting fresh (empty queue, not processing)
- Documented in
BUGS_FOUND.mdas Bug #11
- Fixed
-
Error Logging Improvements
- Replaced all
System.err.printlnwithScriptLoggerin:- EventManager (registerEventScript, fireEvent)
- ChatMessageMixin
- BlockBreakMixin
- BlockPlaceMixin
- AttackMixin
- Consistent error reporting across event system
- Replaced all
Package System Foundation (2026-01-03)
-
NEW: Export/Import System 🎉
- First step towards full package system (see PACKAGE_SYSTEM_CONCEPT.md)
exportcommand - share variables between scriptsimportcommand - use variables from other scripts- ExportManager for cross-script variable sharing
- Automatic cleanup on script stop
- Fixed script name tracking for proper export/import resolution
-
Usage Examples:
// script1.kh export myVar 100 export playerName "Kasper" // script2.kh import myVar from script1 import playerName from script1 print $myVar // Outputs: 100 -
Test Scripts:
test_export.kh- demonstrates export functionalitytest_import.kh- demonstrates import functionality
-
VSCode Extension:
- Added
exportandimportto command autocomplete - NEW: Hover Provider - hover over commands/variables to see documentation
- Commands show full help text from mod
- Variables show current values and types
- Works offline with basic info, full docs when connected
- Added
-
Event Validation - Honest event status reporting
- Split events into IMPLEMENTED vs WIP categories
- Warning when registering WIP events
- Updated documentation to reflect reality
- ✅/⚠️ indicators in help text
-
Mixin Implementation - Critical events now work
- ChatMessageMixin - onChat event captures chat messages
- BlockBreakMixin - onBlockBreak event captures block breaking
- BlockPlaceMixin - onBlockPlace event captures block placement
- AttackMixin - onAttack event captures entity attacks
- All mixins registered in kashub.mixins.json
-
Event Variables - Rich event data
- onChat:
$event_message,$event_sender,$event_full_message - onBlockBreak:
$event_x,$event_y,$event_z,$event_block - onBlockPlace:
$event_x,$event_y,$event_z,$event_block,$event_side - onAttack:
$event_target_name,$event_target_id,$event_target_type,$event_target_x/y/z
- onChat:
Implemented Events (9 total)
- ✅ onTick - Every 20 ticks (1 second)
- ✅ onDamage - Player takes damage
- ✅ onHeal - Player heals
- ✅ onHunger - Hunger level changes
- ✅ onDeath - Player dies
- ✅ onChat - Chat message received
- ✅ onBlockBreak - Block broken
- ✅ onBlockPlace - Block placed
- ✅ onAttack - Entity attacked
WIP Events (6 remaining)
- ⚠️ onRespawn - Player respawns
- ⚠️ onJump - Player jumps
- ⚠️ onSneak - Sneak toggled
- ⚠️ onSprint - Sprint toggled
- ⚠️ onItemUse - Item used
- ⚠️ onInventoryChange - Inventory changed
🔥 Sprint 2: Advanced Breakpoints (Phase 2.1)
Conditional Breakpoints Core
-
Enhanced Breakpoint Class - Full-featured breakpoint system
- Three types: BREAKPOINT (always stops), CONDITIONAL (stops if true), LOGPOINT (logs without stopping)
- Hit count tracking for each breakpoint
- Hit conditions:
>= 5,% 10 == 0,== 3 - Condition and log message support
-
ConditionEvaluator - Smart condition evaluation
- Uses ExpressionParser for condition evaluation
- Caches compiled conditions (max 100) for performance
- Validates complexity (max 10 operators) to prevent lag
- Supports all event variables (
$event_*) - Variable lookup with fallback strategies
- Log message interpolation with
{$var}placeholders
-
DebugManager Integration - Conditional logic in shouldPause()
- Evaluates conditions with current scope variables
- Handles LOGPOINT without pausing
- Handles CONDITIONAL with condition check
- Increments hit count on each hit
- Checks hit conditions before pausing
New API Methods
setConditionalBreakpoint(scriptName, line, condition)- Set conditional breakpointsetLogpoint(scriptName, line, message)- Set logpointsetHitCondition(scriptName, line, hitCondition)- Set hit conditiongetBreakpoint(scriptName, line)- Get breakpoint for inspection
🎯 Sprint 2: Advanced Breakpoints (Phase 2.3)
Performance Profiler
-
ProfilerManager - Thread-safe performance tracking
- CommandStats with atomic operations (total, count, min, max, avg)
- Top N queries (hotspots, slowest, most called)
- Multiple export formats (text, JSON, Chrome Tracing)
- Integrated into ScriptTask execution
-
API Endpoints - Full profiler control
- GET
/api/profiler/status- Profiler status - POST
/api/profiler/start- Start profiling - POST
/api/profiler/stop- Stop profiling - POST
/api/profiler/clear- Clear data - GET
/api/profiler/report- Text report - GET
/api/profiler/json- JSON export - GET
/api/profiler/chrome-tracing- Chrome Tracing format - POST
/api/profiler/save- Save to file
- GET
-
Chrome Tracing Export - Premium visualization
- Open in
chrome://tracingfor visual analysis - Timeline view of command execution
- Hotspot identification
- Performance bottleneck detection
- Open in
🔌 Sprint 3: VSCode Integration (Phase 3.1)
Debug Adapter Protocol (DAP) API
-
DTO Classes - DAP-compatible data structures
DebugStackFrame- Stack frame representationDebugScope- Scope representation (Local, Global, Event, Environment)DebugVariable- Variable representation with type inference
-
Debug API Endpoints - Full debugging support
- GET
/api/debug/scopes?scriptId=X&frameId=Y- Get scopes for frame - GET
/api/debug/variables?variablesReference=X&scriptId=Y- Get variables for scope - POST
/api/debug/evaluate- Evaluate expression in context - GET
/api/debug/stacktrace?scriptId=X- Get call stack - POST
/api/debug/setVariable- Modify variable during debugging
- GET
-
Scope System - Organized variable access
- Local Scope (ref: 1) - Task-specific variables
- Event Scope (ref: 3) - Event variables (
$event_*) - Global Scope (ref: 2) - Interpreter variables
- Environment Scope (ref: 4) - Environment variables (
$PLAYER_*)
WebSocket Integration (Phase 3.2)
-
Real-time Debug Events - Already integrated
debug_event- Broadcasts PAUSED, RESUMED, STEP eventsdebug_action- Handles pause, resume, step_over, step_intoset_breakpoints- Sync breakpoints from VSCodeget_variables- Request variablesset_variable- Modify variablesstackTrace- Request call stackscopes- Request scopes
-
Bidirectional Communication
- VSCode → Server: Debug actions, breakpoint changes
- Server → VSCode: Debug events, variable updates, state changes
📝 Notes
- Test scripts included:
test_events.kh,test_conditional_breakpoints.kh,test_profiler.kh,test_events_after_stop.kh - All critical events now functional
- Conditional breakpoints work with event variables
- Profiler records every command execution
- DAP-compatible API for VSCode integration
- WebSocket for real-time debugging
- No breaking changes to existing scripts
- Bug #11 fixed - Events work after stop/restart
- Version format fixed:
v0.8.0-beta→0.8.0-beta(removes Fabric Loader warning)
🏗️ Future Plans
- v0.8.1 - UI polish, code analysis, unit tests
- v0.9.0 - Architecture refactoring (remove ScriptInterpreter singleton)
- v1.0.0 - Stable release with complete GUI features
- See
REFACTORING_PLAN.mdfor detailed architecture migration plan - See
ROADMAP_FUTURE.mdfor complete feature roadmap
🎯 Release Status
- Roadmap Completion: 85% (excellent for beta)
- Critical Bugs: 0 (all fixed)
- Code Quality: 9/10
- Build Status: ✅ SUCCESSFUL
- Ready for Release: ✅ YES
🆕 Sprint 4: Command Audit & New Commands
New Commands
-
MacroCommand - Record and playback player actions
macro record <name>- Start recording macromacro stop- Stop recordingmacro play <name> [speed]- Play macro at custom speedmacro save <name>- Save to filemacro list- List saved macrosmacro delete <name>- Delete macro- Captures movement, camera rotation, timing
- Useful for automation, farming, building
-
HealthMonitorCommand - Monitor health and status effects
healthMonitor monitor <threshold> [action]- Start monitoringhealthMonitor check- Check current statushealthMonitor effects- List active effectshealthMonitor stop- Stop monitoring- Alerts on low HP and dangerous effects (poison, wither)
- Actions: log, chat, sound
- 5 second cooldown between alerts
-
TimerCommand - Timers and delayed execution
timer set <name> <seconds> [message]- Create timertimer check <name>- Check remaining timetimer cancel <name>- Cancel timertimer list- List active timerstimer clear- Clear all timers- Optional message on expiration
- Useful for farming, crafting, cooldowns
-
ReportBugCommand - Bug reporting system
reportBug <description>- Send bug report to developers- Automatically collects last 500 lines of logs
- Includes system info (OS, Java, MC version)
- Sends to Discord webhook with file attachment
- Rate limited (1 report per 5 minutes)
- Webhook obfuscated (base64 + reverse) to prevent abuse
- Fixed: Logs now sent as file attachment instead of embed field (Discord 1024 char limit)
Command Improvements
-
AICommand - Fixed threading and timeout issues
- Added fixed thread pool (2 threads) instead of unlimited
- Added 30 second timeout for AI requests
- Added rate limiting (6 second cooldown between requests)
- Prevents thread exhaustion and API spam
-
SpeedHackCommand - Added server detection
- Max 2.0x speed on multiplayer servers (anti-cheat safe)
- Max 10.0x speed in singleplayer
- Automatic detection and clamping
- Updated documentation with warnings
-
AnimationCommand - Implemented list action
- Added
listaction to show active animations - Added AnimationManager null check
- Improved error handling
- Added
-
ChatMessageMixin - Fixed for Minecraft 1.21.1
- Removed
boolean overlayparameter (API change in 1.21.1) - Fixed mixin crash on game startup
- Chat events now work correctly
- Removed
Documentation in GitHub
- COMMAND_AUDIT_REPORT.md - Complete audit of all 42 commands
- Identified 4 potential issues (all fixed)
- Rated all commands (A+ to C)
- Provided fix recommendations
- Overall code quality: 9/10
- DEVELOPMENT_NOTES.md - AI development guidelines
- Language requirements (English for all user-facing text)
- Common pitfalls (Registry API, Chat Mixin changes)
- Code style and best practices
Supplementary resources
| File | Type | Size | |
|---|---|---|---|
| kashub-v0.8.0-beta-sources.jar | Sources jar | 3.49 MiB |
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:yq1pcH6Z:rcKeAWAk"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:yq1pcH6Z:rcKeAWAk"
}

