merge: integrate duckietm/Dev (JSON5 + split-aware gamedata loader)

# Conflicts:
#	packages/session/src/SessionDataManager.ts
#	yarn.lock
This commit is contained in:
simoleo89
2026-05-19 17:01:58 +02:00
19 changed files with 823 additions and 404 deletions
+1
View File
@@ -15,6 +15,7 @@
"@nitrots/configuration": "1.0.0",
"@nitrots/events": "1.0.0",
"@nitrots/localization": "1.0.0",
"@nitrots/utils": "1.0.0",
"pixi.js": "^8.8.1"
},
"devDependencies": {
+2 -2
View File
@@ -3,7 +3,7 @@ import { AccountSafetyLockStatusChangeMessageEvent, AccountSafetyLockStatusChang
import { GetConfiguration } from '@nitrots/configuration';
import { GetLocalizationManager } from '@nitrots/localization';
import { GetEventDispatcher, MysteryBoxKeysUpdateEvent, NitroEvent, NitroEventType, NitroSettingsEvent, SessionDataPreferencesEvent, UserNameUpdateEvent } from '@nitrots/events';
import { CreateLinkEvent, HabboWebTools } from '@nitrots/utils';
import { CreateLinkEvent, HabboWebTools, parseConfigJsonFromResponse } from '@nitrots/utils';
import { Texture } from 'pixi.js';
import { GroupInformationManager } from './GroupInformationManager';
import { IgnoredUsersManager } from './IgnoredUsersManager';
@@ -194,7 +194,7 @@ export class SessionDataManager implements ISessionDataManager
if(response.status !== 200) throw new Error(`Unable to load ${ url }`);
const data = await response.json();
const data = await parseConfigJsonFromResponse(response, url);
this._floorItemOverrides = this.parseFurnitureOverrides(data?.roomitemtypes?.furnitype || []);
this._wallItemOverrides = this.parseFurnitureOverrides(data?.wallitemtypes?.furnitype || []);
@@ -1,6 +1,7 @@
import { FurnitureType, IFurnitureData } from '@nitrots/api';
import { GetConfiguration } from '@nitrots/configuration';
import { GetLocalizationManager } from '@nitrots/localization';
import { loadGamedata } from '@nitrots/utils';
import { FurnitureData } from './FurnitureData';
export class FurnitureDataLoader
@@ -20,28 +21,15 @@ export class FurnitureDataLoader
if(!url || !url.length) throw new Error('Missing "furnidata.url" in config — add the furniture data URL to your renderer-config.json');
let response: Response;
try
{
response = await fetch(url);
}
catch(fetchErr)
{
throw new Error(`Could not fetch furniture data from "${ url }" — check "furnidata.url" in renderer-config.json (${ fetchErr.message })`);
}
if(response.status !== 200) throw new Error(`Failed to load furniture data from "${ url }" — server returned HTTP ${ response.status }. Check "furnidata.url" in renderer-config.json`);
let responseData: any;
try
{
responseData = await response.json();
responseData = await loadGamedata(url);
}
catch(parseErr)
catch(err)
{
throw new Error(`Invalid JSON in furniture data "${ url }" — the URL may be wrong. Check "furnidata.url" in renderer-config.json (${ parseErr.message })`);
throw new Error(`Could not load furniture data from "${ url }" — check "furnidata.url" in renderer-config.json (${ err?.message || err })`);
}
if(responseData.roomitemtypes) this.parseFloorItems(responseData.roomitemtypes);
@@ -1,5 +1,6 @@
import { IProductData } from '@nitrots/api';
import { GetConfiguration } from '@nitrots/configuration';
import { loadGamedata } from '@nitrots/utils';
import { ProductData } from './ProductData';
export class ProductDataLoader
@@ -17,28 +18,15 @@ export class ProductDataLoader
if(!url || !url.length) throw new Error('Missing "productdata.url" in config — add the product data URL to your renderer-config.json');
let response: Response;
try
{
response = await fetch(url);
}
catch(fetchErr)
{
throw new Error(`Could not fetch product data from "${ url }" — check "productdata.url" in renderer-config.json (${ fetchErr.message })`);
}
if(response.status !== 200) throw new Error(`Failed to load product data from "${ url }" — server returned HTTP ${ response.status }. Check "productdata.url" in renderer-config.json`);
let responseData: any;
try
{
responseData = await response.json();
responseData = await loadGamedata(url);
}
catch(parseErr)
catch(err)
{
throw new Error(`Invalid JSON in product data "${ url }" — the URL may be wrong. Check "productdata.url" in renderer-config.json (${ parseErr.message })`);
throw new Error(`Could not load product data from "${ url }" — check "productdata.url" in renderer-config.json (${ err?.message || err })`);
}
this.parseProducts(responseData.productdata);