UNPKG

grow-items

Version:

A standalone items.dat parser for Growtopia

1 lines 32.8 kB
{"version":3,"sources":["../lib/Collection.ts","../lib/ExtendBuffer.ts","../lib/Items.ts"],"sourcesContent":["// Credits https://github.com/OceanicJS/Oceanic/blob/dev/lib/util/Collection.ts\n\n/** A {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map | Map} with some Array-like additions. */\nexport class Collection<K, V> extends Map<K, V> {\n /** If this collection is empty. */\n get empty(): boolean {\n return this.size === 0;\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every | Array#every } */\n every<T extends V, ThisArg = Collection<K, V>>(\n predicate: (value: V, index: number, array: Array<V>) => value is T,\n thisArg?: ThisArg\n ): this is Array<T>;\n every<ThisArg = Collection<K, V>>(predicate: (value: V, index: number, array: Array<V>) => unknown, thisArg?: ThisArg): boolean;\n every(predicate: (value: V, index: number, array: Array<V>) => unknown, thisArg?: unknown): boolean {\n return this.toArray().every(predicate, thisArg);\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter | Array#filter } */\n filter<S extends V, ThisArg = Collection<K, V>>(\n predicate: (this: ThisArg, value: V, index: number, array: Array<V>) => value is S,\n thisArg?: ThisArg\n ): Array<S>;\n filter<ThisArg = Collection<K, V>>(predicate: (this: ThisArg, value: V, index: number, array: Array<V>) => unknown, thisArg?: ThisArg): Array<V>;\n filter(predicate: (value: V, index: number, array: Array<V>) => unknown, thisArg?: unknown): Array<V> {\n return this.toArray().filter(predicate, thisArg);\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find | Array#find } */\n find<S extends V, ThisArg = Collection<K, V>>(\n predicate: (this: ThisArg, value: V, index: number, obj: Array<V>) => value is S,\n thisArg?: ThisArg\n ): S | undefined;\n find<ThisArg = Collection<K, V>>(predicate: (this: ThisArg, value: V, index: number, obj: Array<V>) => unknown, thisArg?: ThisArg): V | undefined;\n find(predicate: (value: V, index: number, obj: Array<V>) => unknown, thisArg?: unknown): V | undefined {\n return this.toArray().find(predicate, thisArg);\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex | Array#findIndex } */\n findIndex(predicate: (value: V, index: number, obj: Array<V>) => unknown, thisArg?: unknown): number {\n return this.toArray().findIndex(predicate, thisArg);\n }\n\n /**\n * Get the first element, or first X elements if a number is provided.\n * @param amount The amount of elements to get.\n */\n first(): V | undefined;\n first(amount: number): Array<V>;\n first(amount?: number): V | Array<V> | undefined {\n if (amount === undefined) {\n const iterable = this.values();\n return iterable.next().value as V;\n }\n\n if (amount < 0) {\n return this.last(amount * -1);\n }\n amount = Math.min(amount, this.size);\n\n const iterable = this.values();\n return Array.from({ length: amount }, () => iterable.next().value as V);\n }\n\n /**\n * Get the last element, or last X elements if a number is provided.\n * @param amount The amount of elements to get.\n */\n last(): V | undefined;\n last(amount: number): Array<V>;\n last(amount?: number): V | Array<V> | undefined {\n const iterator = Array.from(this.values());\n if (amount === undefined) {\n return iterator.at(-1);\n }\n if (amount < 0) {\n return this.first(amount * -1);\n }\n if (!amount) {\n return [];\n }\n\n return iterator.slice(-amount);\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map | Array#map } */\n map<T>(predicate: (value: V, index: number, obj: Array<V>) => T, thisArg?: unknown): Array<T> {\n return this.toArray().map(predicate, thisArg);\n }\n\n /**\n * Pick a random element from the collection, or undefined if the collection is empty.\n */\n random(): V | undefined {\n if (this.empty) {\n return undefined;\n }\n const iterable = Array.from(this.values());\n\n return iterable[Math.floor(Math.random() * iterable.length)];\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce | Array#reduce } */\n reduce(predicate: (previousValue: V, currentValue: V, currentIndex: number, array: Array<V>) => V): V;\n reduce(predicate: (previousValue: V, currentValue: V, currentIndex: number, array: Array<V>) => V, initialValue: V): V;\n reduce<T>(predicate: (previousValue: T, currentValue: V, currentIndex: number, array: Array<V>) => T, initialValue: T): T;\n reduce<T>(predicate: (previousValue: T, currentValue: V, currentIndex: number, array: Array<V>) => T, initialValue?: T): T {\n return this.toArray().reduce(predicate, initialValue!);\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight | Array#reduceRight } */\n reduceRight(predicate: (previousValue: V, currentValue: V, currentIndex: number, array: Array<V>) => V): V;\n reduceRight(predicate: (previousValue: V, currentValue: V, currentIndex: number, array: Array<V>) => V, initialValue: V): V;\n reduceRight<T>(predicate: (previousValue: T, currentValue: V, currentIndex: number, array: Array<V>) => T, initialValue: T): T;\n reduceRight<T>(predicate: (previousValue: T, currentValue: V, currentIndex: number, array: Array<V>) => T, initialValue?: T): T {\n return this.toArray().reduceRight(predicate, initialValue!);\n }\n\n /** See: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some | Array#some } */\n some<ThisArg = Collection<K, V>>(predicate: (value: V, index: number, array: Array<V>) => unknown, thisArg?: ThisArg): boolean {\n return this.toArray().some(predicate, thisArg);\n }\n\n /** Get the values of this collection as an array. */\n toArray(): Array<V> {\n return Array.from(this.values());\n }\n}\n","export class ExtendBuffer {\n public data: number[];\n\n constructor(data: number[] | number, public mempos = 0) {\n this.data = Array.isArray(data) ? data : new Array(data).fill(0);\n }\n\n private read(size: number): number {\n let value = 0;\n for (let i = 0; i < size; i++) {\n value |= this.data[this.mempos + i] << (i * 8);\n }\n this.mempos += size;\n return value >>> 0;\n }\n\n private readSigned(size: number): number {\n return this.read(size) << 0;\n }\n\n private write(value: number, size: number): void {\n for (let i = 0; i < size; i++) {\n this.data[this.mempos + i] = (value >> (i * 8)) & 0xff;\n }\n this.mempos += size;\n }\n\n public readU8 = () => this.read(1);\n public readU16 = (be = false) => (be ? this.readBE(2) : this.read(2));\n public readU32 = (be = false) => (be ? this.readBE(4) : this.read(4));\n\n public readI8 = () => this.readSigned(1);\n public readI16 = (be = false) => (be ? this.readSignedBE(2) : this.readSigned(2));\n public readI32 = (be = false) => (be ? this.readSignedBE(4) : this.readSigned(4));\n\n private readBE(size: number): number {\n let value = 0;\n for (let i = 0; i < size; i++) {\n value = (value << 8) | this.data[this.mempos + i];\n }\n this.mempos += size;\n return value >>> 0;\n }\n\n private readSignedBE(size: number): number {\n return this.readBE(size) << 0;\n }\n\n public writeU8 = (value: number) => this.write(value, 1);\n public writeU16 = (value: number, be = false) => (be ? this.writeBE(value, 2) : this.write(value, 2));\n public writeU32 = (value: number, be = false) => (be ? this.writeBE(value, 4) : this.write(value, 4));\n\n public writeI8 = (value: number) => this.write(value, 1);\n public writeI16 = (value: number, be = false) => (be ? this.writeBE(value, 2) : this.write(value, 2));\n public writeI32 = (value: number, be = false) => (be ? this.writeBE(value, 4) : this.write(value, 4));\n\n private writeBE(value: number, size: number): void {\n for (let i = 0; i < size; i++) {\n this.data[this.mempos + i] = (value >> ((size - 1 - i) * 8)) & 0xff;\n }\n this.mempos += size;\n }\n\n public writeU = (size: number, value: number, be = false) => {\n const methods = { 1: this.writeU8, 2: this.writeU16, 4: this.writeU32 };\n methods[size as 1 | 2 | 4](value, be);\n };\n\n public writeI = (size: number, value: number, be = false) => {\n const methods = { 1: this.writeI8, 2: this.writeI16, 4: this.writeI32 };\n methods[size as 1 | 2 | 4](value, be);\n };\n\n public async readString(be = false) {\n const len = be ? this.readBE(2) : this.read(2);\n const chars = this.data.slice(this.mempos, this.mempos + len);\n this.mempos += len;\n return String.fromCharCode(...chars);\n }\n\n public async writeString(str: string, be = false) {\n const bytes = str.split(\"\").map((char) => char.charCodeAt(0));\n be ? this.writeBE(str.length, 2) : this.write(str.length, 2);\n for (const byte of bytes) {\n this.data[this.mempos++] = byte;\n }\n }\n}\n","import type { ItemDefinition, ItemsDatMeta, StringOptions } from \"../types\";\nimport { Collection } from \"./Collection\";\nimport { ExtendBuffer } from \"./ExtendBuffer\";\n\nexport class ItemsDat {\n public buffer: ExtendBuffer;\n private key: string = \"PBG892FXX982ABC*\";\n private stringFields: string[] = [\n \"name\",\n \"texture\",\n \"extraFile\",\n \"petName\",\n \"petPrefix\",\n \"petSuffix\",\n \"petAbility\",\n \"extraOptions\",\n \"texture2\",\n \"extraOptions2\",\n \"punchOptions\",\n \"chairTexture\",\n \"itemRenderer\",\n \"info\",\n ];\n\n public meta: ItemsDatMeta = {\n items: new Collection(),\n itemCount: 0,\n version: 0,\n };\n\n constructor(data: number[] | number) {\n this.buffer = new ExtendBuffer(data);\n }\n\n public getWriteSize() {\n let size = 134 * this.meta.items.size;\n\n this.meta.items.forEach((item) => {\n const keys = Object.keys(item);\n\n for (const key of keys) {\n const strValue = item[key] as unknown as string;\n if (this.stringFields.includes(key) && typeof strValue === \"string\") {\n size += strValue.length + 2;\n }\n if (typeof item[key] === \"object\") {\n const numArray = item[key] as unknown as number[];\n size += numArray.length;\n }\n }\n });\n\n return size + 4 + 2;\n }\n\n public async decode() {\n this.buffer.mempos = 0;\n this.meta.version = this.buffer.readU16();\n this.meta.itemCount = this.buffer.readI32();\n\n for (let i = 0; i < this.meta.itemCount; i++) {\n const item: ItemDefinition = {};\n\n item.id = this.buffer.readI32();\n item.flags = this.buffer.readU16();\n item.type = this.buffer.readU8();\n item.materialType = this.buffer.readU8();\n\n item.name = await this.readString({ id: item.id, encoded: true });\n item.texture = await this.readString({ id: item.id });\n\n item.textureHash = this.buffer.readI32();\n item.visualEffectType = this.buffer.readU8();\n item.cookingTime = this.buffer.readI32();\n\n item.textureX = this.buffer.readU8();\n item.textureY = this.buffer.readU8();\n item.storageType = this.buffer.readU8();\n item.isStripeyWallpaper = this.buffer.readU8();\n item.collisionType = this.buffer.readU8();\n item.breakHits = this.buffer.readU8() / 6;\n\n item.resetStateAfter = this.buffer.readI32();\n item.bodyPartType = this.buffer.readU8();\n item.rarity = this.buffer.readI16();\n item.maxAmount = this.buffer.readU8();\n\n item.extraFile = await this.readString({ id: item.id });\n item.extraFileHash = this.buffer.readI32();\n item.audioVolume = this.buffer.readI32();\n\n item.petName = await this.readString({ id: item.id });\n item.petPrefix = await this.readString({ id: item.id });\n item.petSuffix = await this.readString({ id: item.id });\n item.petAbility = await this.readString({ id: item.id });\n\n item.seedBase = this.buffer.readU8();\n item.seedOverlay = this.buffer.readU8();\n item.treeBase = this.buffer.readU8();\n item.treeLeaves = this.buffer.readU8();\n\n item.seedColor = this.buffer.readI32();\n item.seedOverlayColor = this.buffer.readI32();\n item.ingredient = this.buffer.readI32();\n item.growTime = this.buffer.readI32();\n\n item.fxFlags = this.buffer.readI32();\n\n item.extraOptions = await this.readString({ id: item.id });\n item.texture2 = await this.readString({ id: item.id });\n item.extraOptions2 = await this.readString({ id: item.id });\n\n item.unknownInt1 = this.buffer.readI32();\n item.unknownInt2 = this.buffer.readI32();\n item.flags2 = this.buffer.readI32();\n\n item.extraBytes = this.buffer.data.slice(\n this.buffer.mempos,\n (this.buffer.mempos += 60),\n );\n\n item.tileRange = this.buffer.readI32();\n item.vaultCapacity = this.buffer.readI32();\n\n if (this.meta.version >= 11) {\n item.punchOptions = await this.readString({ id: item.id });\n\n if (this.meta.version >= 12) {\n item.flags3 = this.buffer.readI32();\n item.bodyPart = this.buffer.data.slice(\n this.buffer.mempos,\n (this.buffer.mempos += 9),\n );\n }\n if (this.meta.version >= 13) item.lightRange = this.buffer.readI32();\n if (this.meta.version >= 14) item.unknownInt3 = this.buffer.readI32();\n if (this.meta.version >= 15) {\n item.canSit = this.buffer.readU8();\n item.playerOffsetX = this.buffer.readI32();\n item.playerOffsetY = this.buffer.readI32();\n\n item.chairTextureX = this.buffer.readI32();\n item.chairTextureY = this.buffer.readI32();\n\n item.chairLegOffsetX = this.buffer.readI32();\n item.chairLegOffsetY = this.buffer.readI32();\n\n item.chairTexture = await this.readString({ id: item.id });\n }\n\n if (this.meta.version >= 16)\n item.itemRenderer = await this.readString({ id: item.id });\n\n if (this.meta.version >= 17) item.extraFlags1 = this.buffer.readI32();\n\n if (this.meta.version >= 18)\n item.itemRendererHash = this.buffer.readI32();\n\n if (this.meta.version >= 19)\n item.unknownBytes2 = this.buffer.data.slice(\n this.buffer.mempos,\n (this.buffer.mempos += 9),\n );\n\n if (this.meta.version >= 21) item.unknownShort1 = this.buffer.readI16();\n\n if (this.meta.version >= 22)\n item.info = await this.readString({ id: item.id });\n\n if (this.meta.version >= 23) {\n item.recipe = [];\n for (let i = 0; i <= 1; i++) {\n const data = this.buffer.readU16();\n if (data) item.recipe[i] = data;\n }\n }\n if (this.meta.version >= 24) {\n item.unknownByte1 = this.buffer.readI8();\n }\n }\n\n this.meta.items.set(item.id, item);\n }\n }\n\n public async encode() {\n this.buffer.mempos = 0;\n const size = this.getWriteSize();\n\n this.buffer = new ExtendBuffer(size);\n this.buffer.writeI16(this.meta.version!);\n this.buffer.writeI32(this.meta.items.size);\n\n for (const item of this.meta.items.values()) {\n this.buffer.writeI32(item.id!);\n this.buffer.writeU16(item.flags!);\n this.buffer.writeU8(item.type!);\n this.buffer.writeU8(item.materialType!);\n\n await this.writeString(item.name!, item.id!, true);\n await this.writeString(item.texture!, item.id!);\n\n this.buffer.writeI32(item.textureHash!);\n this.buffer.writeU8(item.visualEffectType!);\n this.buffer.writeI32(item.cookingTime!);\n\n this.buffer.writeU8(item.textureX!);\n this.buffer.writeU8(item.textureY!);\n this.buffer.writeU8(item.storageType!);\n this.buffer.writeU8(item.isStripeyWallpaper!);\n this.buffer.writeU8(item.collisionType!);\n this.buffer.writeU8(item.breakHits! * 6);\n\n this.buffer.writeI32(item.resetStateAfter!);\n this.buffer.writeU8(item.bodyPartType!);\n this.buffer.writeI16(item.rarity!);\n this.buffer.writeU8(item.maxAmount!);\n\n await this.writeString(item.extraFile!, item.id!);\n this.buffer.writeI32(item.extraFileHash!);\n this.buffer.writeI32(item.audioVolume!);\n\n await this.writeString(item.petName!, item.id!);\n await this.writeString(item.petPrefix!, item.id!);\n await this.writeString(item.petSuffix!, item.id!);\n await this.writeString(item.petAbility!, item.id!);\n\n this.buffer.writeU8(item.seedBase!);\n this.buffer.writeU8(item.seedOverlay!);\n this.buffer.writeU8(item.treeBase!);\n this.buffer.writeU8(item.treeLeaves!);\n\n this.buffer.writeI32(item.seedColor!);\n this.buffer.writeI32(item.seedOverlayColor!);\n this.buffer.writeI32(item.ingredient!);\n this.buffer.writeI32(item.growTime!);\n\n this.buffer.writeI32(item.fxFlags!);\n\n await this.writeString(item.extraOptions!, item.id!);\n await this.writeString(item.texture2!, item.id!);\n await this.writeString(item.extraOptions2!, item.id!);\n\n this.buffer.writeI32(item.unknownInt1!);\n this.buffer.writeI32(item.unknownInt2!);\n this.buffer.writeI32(item.flags2!);\n\n if (item.extraBytes) {\n for (const byte of item.extraBytes) {\n this.buffer.writeU8(byte);\n }\n }\n\n this.buffer.writeI32(item.tileRange!);\n this.buffer.writeI32(item.vaultCapacity!);\n\n if (this.meta.version! >= 11) {\n await this.writeString(item.punchOptions || \"\", item.id!);\n\n if (this.meta.version! >= 12) {\n this.buffer.writeI32(item.flags3!);\n if (item.bodyPart) {\n for (const byte of item.bodyPart) {\n this.buffer.writeU8(byte);\n }\n }\n }\n if (this.meta.version! >= 13) this.buffer.writeI32(item.lightRange!);\n if (this.meta.version! >= 14) this.buffer.writeI32(item.unknownInt3!);\n if (this.meta.version! >= 15) {\n this.buffer.writeU8(item.canSit!);\n this.buffer.writeI32(item.playerOffsetX!);\n this.buffer.writeI32(item.playerOffsetY!);\n\n this.buffer.writeI32(item.chairTextureX!);\n this.buffer.writeI32(item.chairTextureY!);\n\n this.buffer.writeI32(item.chairLegOffsetX!);\n this.buffer.writeI32(item.chairLegOffsetY!);\n\n await this.writeString(item.chairTexture || \"\", item.id!);\n }\n if (this.meta.version! >= 16) {\n await this.writeString(item.itemRenderer || \"\", item.id!);\n }\n if (this.meta.version! >= 17) this.buffer.writeI32(item.extraFlags1!);\n if (this.meta.version! >= 18)\n this.buffer.writeI32(item.itemRendererHash!);\n if (this.meta.version! >= 19) {\n if (item.unknownBytes2) {\n for (const byte of item.unknownBytes2) {\n this.buffer.writeU8(byte);\n }\n }\n }\n if (this.meta.version! >= 21) this.buffer.writeI16(item.unknownShort1!);\n if (this.meta.version! >= 22) this.writeString(item.info!, item.id!);\n if (this.meta.version! >= 23) {\n this.buffer.writeU16(item.recipe?.[0] ?? 0);\n this.buffer.writeU16(item.recipe?.[1] ?? 0);\n }\n if (this.meta.version! >= 24) {\n this.buffer.writeI8(item.unknownByte1!);\n }\n }\n }\n }\n\n private async readString(\n opts: StringOptions = { encoded: false },\n ): Promise<string> {\n const len = this.buffer.readI16();\n\n if (!opts.encoded) {\n const chars = [];\n for (let i = 0; i < len; i++) {\n chars.push(String.fromCharCode(this.buffer.data[this.buffer.mempos++]));\n }\n return chars.join(\"\");\n } else {\n const chars = [];\n for (let i = 0; i < len; i++) {\n chars.push(\n String.fromCharCode(\n this.buffer.data[this.buffer.mempos] ^\n this.key.charCodeAt((opts.id! + i) % this.key.length),\n ),\n );\n this.buffer.mempos++;\n }\n return chars.join(\"\");\n }\n }\n\n private async writeString(\n str: string,\n id: number,\n encoded: boolean = false,\n ): Promise<void> {\n this.buffer.writeI16(str.length);\n\n if (!encoded) {\n for (let i = 0; i < str.length; i++) {\n this.buffer.writeU8(str.charCodeAt(i));\n }\n } else {\n for (let i = 0; i < str.length; i++) {\n const char =\n str.charCodeAt(i) ^ this.key.charCodeAt((i + id) % this.key.length);\n this.buffer.writeU8(char);\n }\n }\n }\n}\n"],"mappings":"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","names":["Collection","predicate","thisArg","amount","iterable","iterator","initialValue","ExtendBuffer","data","mempos","size","value","i","be","len","chars","str","bytes","char","byte","ItemsDat","Collection","data","ExtendBuffer","size","item","keys","key","strValue","numArray","i","byte","opts","len","chars","str","id","encoded","char"]}