mirror of
https://github.com/tobspr/shapez.io.git
synced 2026-03-02 03:39:21 +00:00
Modloader custom items fix (#1369)
* Added item register and resolver for savegames * Changed new item type example to register * Fixed typings
This commit is contained in:
@@ -15,7 +15,7 @@ export class BaseItem extends BasicSerializableObject {
|
||||
return "base_item";
|
||||
}
|
||||
|
||||
/** @returns {object} */
|
||||
/** @returns {import("../savegame/serialization").Schema} */
|
||||
static getSchema() {
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ import { BooleanItem, BOOL_TRUE_SINGLETON, BOOL_FALSE_SINGLETON } from "./items/
|
||||
import { ShapeItem } from "./items/shape_item";
|
||||
import { ColorItem, COLOR_ITEM_SINGLETONS } from "./items/color_item";
|
||||
|
||||
export const MODS_ADDITIONAL_ITEMS = {};
|
||||
|
||||
/**
|
||||
* Resolves items so we share instances
|
||||
* @param {import("../savegame/savegame_serializer").GameRoot} root
|
||||
@@ -13,6 +15,10 @@ export function itemResolverSingleton(root, data) {
|
||||
const itemType = data.$;
|
||||
const itemData = data.data;
|
||||
|
||||
if (MODS_ADDITIONAL_ITEMS[itemType]) {
|
||||
return MODS_ADDITIONAL_ITEMS[itemType](itemData);
|
||||
}
|
||||
|
||||
switch (itemType) {
|
||||
case BooleanItem.getId(): {
|
||||
return itemData ? BOOL_TRUE_SINGLETON : BOOL_FALSE_SINGLETON;
|
||||
|
||||
@@ -17,7 +17,7 @@ import { Loader } from "../core/loader";
|
||||
import { LANGUAGES } from "../languages";
|
||||
import { matchDataRecursive, T } from "../translations";
|
||||
import { gBuildingVariants, registerBuildingVariant } from "../game/building_codes";
|
||||
import { gComponentRegistry, gMetaBuildingRegistry } from "../core/global_registries";
|
||||
import { gComponentRegistry, gItemRegistry, gMetaBuildingRegistry } from "../core/global_registries";
|
||||
import { MODS_ADDITIONAL_SHAPE_MAP_WEIGHTS } from "../game/map_chunk";
|
||||
import { MODS_ADDITIONAL_SYSTEMS } from "../game/game_system_manager";
|
||||
import { MOD_CHUNK_DRAW_HOOKS } from "../game/map_chunk_view";
|
||||
@@ -28,6 +28,8 @@ import { ModMetaBuilding } from "./mod_meta_building";
|
||||
import { BaseHUDPart } from "../game/hud/base_hud_part";
|
||||
import { Vector } from "../core/vector";
|
||||
import { GameRoot } from "../game/root";
|
||||
import { BaseItem } from "../game/base_item";
|
||||
import { MODS_ADDITIONAL_ITEMS } from "../game/item_resolver";
|
||||
|
||||
/**
|
||||
* @typedef {{new(...args: any[]): any, prototype: any}} constructable
|
||||
@@ -190,6 +192,15 @@ export class ModInterface {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {typeof BaseItem} item
|
||||
* @param {(itemData: any) => BaseItem} resolver
|
||||
*/
|
||||
registerItem(item, resolver) {
|
||||
gItemRegistry.register(item);
|
||||
MODS_ADDITIONAL_ITEMS[item.getId()] = resolver;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {typeof Component} component
|
||||
|
||||
@@ -192,7 +192,7 @@ export class BasicSerializableObject {
|
||||
return schema;
|
||||
}
|
||||
|
||||
/** @returns {object} */
|
||||
/** @returns {object | string | number} */
|
||||
serialize() {
|
||||
return serializeSchema(
|
||||
this,
|
||||
|
||||
Reference in New Issue
Block a user