feat: add Habboon, Leet and Hubbly furni import sources

Add verified retro-hotel sources to the studio furni clone list. All
endpoints (furnidata JSON, .nitro bundles, icons, SWF) were probed and
verified reachable (HTTP 200), and Leet/Hubbly nitro bundles parse with
parseNitroBundle.

Also allow source-specific SWF downloads without a revision path segment
(/hof_furni/{classname}.swf), which Leet and Habboon use.
This commit is contained in:
openhands committed 2026-08-20 15:38:50 +02:00
1 parent 56bfa164a1
commit 01369d8943
2 files changed
+38

No files matched your search

+33
View File
@@ -148,6 +148,39 @@ export const DEFAULT_SOURCES: CloneSource[] = [
hotel: "com",
sourceSwfBaseUrl: "https://virtualc.nl/dcr",
},
{
id: "default-habboon",
name: "Habboon",
furnidataUrl: "https://assets.habboon.pw/nitro/gamedata/FurnitureData.json",
nitroBaseUrl: "https://assets.habboon.pw/nitro/bundled/furniture",
iconBaseUrl: "",
hotel: "com",
// Habboon serves SWFs at /dcr/hof_furni/{classname}.swf (no revision
// segment) — the import service also tries that variant.
sourceSwfBaseUrl: "https://assets.habboon.pw/dcr",
},
{
id: "default-leet",
name: "Leet",
furnidataUrl:
"https://images.leet.city/leet-asset-bundles/gamedata/leet_furni.json?v=7ce4b1ce",
nitroBaseUrl:
"https://images.leet.city/leet-asset-bundles/libraries/furniture_new2",
iconBaseUrl: "https://images.leet.city/library/hof_furni/icons",
hotel: "com",
// Leet serves SWFs at /library/hof_furni/{classname}.swf (no revision
// segment) — the import service tries both with- and without-revision.
sourceSwfBaseUrl: "https://images.leet.city/library",
},
{
id: "default-hubbly",
name: "Hubbly",
furnidataUrl: "https://hubbly.pw/nitro/gamedata/hubbly_furni.json",
nitroBaseUrl: "https://hubbly.pw/nitro/furniture",
iconBaseUrl: "https://hubbly.pw/swf/dcr/hof_furni/icons",
hotel: "com",
// Hubbly serves no standalone SWFs — the .nitro bundles are used.
},
];
export const DEFAULT_ICON_SOURCES: CloneSource[] = DEFAULT_SOURCES.filter(
+5
View File
@@ -689,6 +689,11 @@ export async function importSingleFurni(params: {
swfUrls.push(
`${sourceSwfBaseUrl}/hof_furni/${rev}/${encodeURIComponent(safeSwfName)}.swf`,
);
// Some retros (e.g. Leet, Habboon) serve SWFs without a revision
// segment: /hof_furni/{classname}.swf
swfUrls.push(
`${sourceSwfBaseUrl}/hof_furni/${encodeURIComponent(safeSwfName)}.swf`,
);
}
// Official Habbo CDN fallbacks