* CustomPayloadPacket Changes
commented all code for old equip packets
cleaned up custom payload key creation
added 2 new payload packet definitions for upcoming changes
* server sided recipe list
* code cleanup for recipes
* add dtor for recipe classes to fix memory leak
* forgot this part to the dtor commit
* dtor changes tested and fixed
* server side creative menu list
Added "unimplemented" achievements
Fix image renaming breaking icons
Fix "Diamonds to you" strings
Readd broken assertion - I'm not entirely sure if its fixed, and you may need to delete profile0.dat to make it not assert on older saves.
SWF movie loading crashed with __debugbreak when the window height was
below 720px (e.g. after leaving exclusive fullscreen). The fallback
chain only tried 720.swf which doesn't exist. Now falls back through
720 -> 1080 so scenes always find a valid SWF.
Three issues fixed:
- Save file path used hardcoded saveData.ms but new 4JLibs names files
as <title>.ms. ReadLevelNameFromSaveFile now constructs the correct
path with fallback to saveData.ms for old saves.
- The level.dat code path for reading the hardcore flag (sidecar rename)
returned early without ever parsing level.dat. Now stores the sidecar
name and continues to read the hardcore flag from NBT.
- The thumbnail host options path could overwrite m_bHardcore to false.
Now only upgrades to true, never downgrades.
- Load menu constructor and tick handler both lock difficulty slider to
Hardcore and gamemode to Survival when hardcore is detected.
- Hide title logo on load menu to match create world menu.
- Remove shadowcolor from font tags (Iggy doesn't support multiple)
- Enforce HTML text mode on chat labels and jukebox
- Move IDS translatable pattern matching into FormatChatMessage
- Add §r (reset) color code support
- Fix message truncation to count visible characters, skipping HTML tags
- Fix CJK truncation using raw index instead of visible char count
fixes:
fishing rod crashing in enchantment table
updated more swfs that were not updated in a recent merge
sort costs in ascending order
randomise enchantment seeds for new players
The hardcore difficulty label was using the raw string ID `IDS_HARDCORE` (oops)
instead of a localized string, which caused a crash in the UI.
Replaced `IDS_HARDCORE` with `app.GetString(IDS_HARDCORE)`
Add virtual `canMoveSlider` method to UIScene base class and override it
in both LoadMenu and CreateWorldMenu scenes. The method returns false
when attempting to move the gamemode slider while hardcore mode is active,
effectively locking the slider in that state.
The UIController now checks `canMoveSlider` before initiating a slider
drag and during ongoing drag updates.