Emage 1.1.1
Major Release - Custom Color Engine, GIF Caching & Stability Overhaul
This release introduces a completely custom color matching system, GIF processing cache, improved stability, and a complete code reorganization for better maintainability.
⚠️ Breaking Changes
- Maximum GIF grid size reduced from unlimited to 4x4
- Maximum static image grid size set to 10x10
- Minimum frame delay increased to 50ms (20 FPS max)
New Features
Custom Color System
- Replaced Bukkit's MapPalette with custom EmageColors class
- Perceptually-weighted color matching (green-biased for human vision)
- Pre-computed 262,144 entry color cache for instant lookups
- Full Minecraft 1.17+ palette with all 248 map colors
- Fixed dark colors appearing as yellow/banana or transparent
GIF Caching System
- Processed GIFs are cached to avoid reprocessing
- Cache key based on URL + grid size + quality
- Maximum 20 entries or 100MB memory
- Auto-expires after 30 minutes of no use
- LRU (Least Recently Used) eviction when full
- Second use of same GIF is instant
New Commands
- /emage cache - View GIF cache statistics (hit rate, memory, count)
- /emage clearcache - Clear all cached GIF data
New Flags
- --nocache / --nc / --fresh - Force reprocess GIF, ignore cache
Grid Size Limits
- Static Images: Maximum 10x10 (100 maps) - Any size recommended
- Animated GIFs: Maximum 4x4 (16 maps) - 2x2 or smaller recommended
User Warnings
- Warning displayed for GIF grids of 3x3 or larger
- Error displayed when exceeding maximum grid sizes
- Help text updated with limits and recommendations
Performance Improvements
Lag Fixes
- Fixed player timeout issues with large GIF grids
- Fixed 40%+ CPU usage spikes during GIF playback
- Removed aggressive parallel processing that flooded network
- Single-threaded processing prevents system overload
Animation System
- Animation tick runs every 2 ticks (100ms) instead of every tick
- Only sends map updates when frames actually change
- All maps in sync group update together efficiently
- needsRender flag prevents redundant canvas updates
- Animation starts only after all maps are applied
Memory Management
- Sequential frame processing reduces memory usage
- Reusable pixel buffers across frames
- Frame references cleared immediately after processing
- Efficient buffer reuse throughout processing pipeline
Processing
- Proper frame disposal handling (restoreToPrevious, restoreToBackgroundColor)
- Correct metadata extraction for delays and positions
- Better handling of 0-delay frames (defaults to 100ms)
Bug Fixes
Color Issues
- Fixed dark colors appearing as banana/yellow color
- Fixed very dark areas appearing as transparent
- Fixed COLOR_BLACK palette entries being skipped incorrectly
GIF Playback
- Fixed GIFs running at 5 FPS instead of correct speed
- Fixed frame skipping in first few seconds of playback
- Fixed maps showing different frames (desync issues)
- Fixed animation starting before all maps were ready
Stability
- Fixed player timeout issues with large GIF grids
- Fixed CPU spikes during GIF playback
- Fixed memory leaks from unreleased frame data
- Fixed network flooding from excessive map updates
Code Reorganization
New Project Structure
├── EmagePlugin.java
├── cache/
│ └── GifCache.java
├── command/
│ └── EmageCommand.java
├── config/
│ └── EmageConfig.java
├── manager/
│ └── EmageManager.java
├── processing/
│ ├── EmageColors.java
│ ├── EmageCompression.java
│ └── EmageCore.java
├── render/
│ ├── EmageRenderer.java
│ └── GifRenderer.java
└── util/
└── UpdateChecker.java[/CODE]