From 61586092d12fcd7ae18e47270e5f2fe5333bc479 Mon Sep 17 00:00:00 2001 From: Holly Date: Fri, 16 Feb 2024 09:34:02 +0000 Subject: [PATCH] Add Item and Vector type implementations to MetadataWriter --- server/MetadataWriter.ts | 23 +++++++++++++++++++++-- server/Vec3.ts | 4 ++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/server/MetadataWriter.ts b/server/MetadataWriter.ts index ae0d5af..65a8235 100644 --- a/server/MetadataWriter.ts +++ b/server/MetadataWriter.ts @@ -1,12 +1,14 @@ import { createWriter, Endian } from "bufferstuff"; import { FunkyArray } from "../funkyArray"; import { MetadataFieldType } from "./enums/MetadataFieldType"; +import Vec3 from "./Vec3"; +import { ItemStack } from "./inventories/ItemStack"; export class MetadataEntry { public type:MetadataFieldType; - public value:number|string; + public value:number|string|Vec3|ItemStack; - public constructor(type:MetadataFieldType, value:number|string) { + public constructor(type:MetadataFieldType, value:number|string|Vec3|ItemStack) { this.type = type; this.value = value; } @@ -38,6 +40,18 @@ export class MetadataWriter { } else { throw "Non-string value assigned to a String MetadataEntry"; } + case MetadataFieldType.Item: + if (entry.value instanceof ItemStack) { + size += 5; + } else { + throw "Non-ItemStack value assigned to an ItemStack MetadataEntry"; + } + case MetadataFieldType.Vector: + if (entry.value instanceof Vec3) { + size += 12; + } else { + throw "Non-Vec3 value assigned to an Vec3 MetadataEntry"; + } } }) @@ -59,6 +73,11 @@ export class MetadataWriter { } } else if (typeof(entry.value) === "string") { writer.writeString16(entry.value); + } else if (entry.value instanceof ItemStack) { + writer.writeShort(entry.value.itemID).writeByte(entry.value.size).writeShort(entry.value.damage); + } else if (entry.value instanceof Vec3) { + const absVec = entry.value.toAbs(); + writer.writeInt(absVec.x).writeInt(absVec.y).writeInt(absVec.z); } } } diff --git a/server/Vec3.ts b/server/Vec3.ts index cc4eae2..74f172d 100644 --- a/server/Vec3.ts +++ b/server/Vec3.ts @@ -68,4 +68,8 @@ export default class Vec3 { throw new Error(`Invalid arguments for Vec3.mult : ${typeof(x)}, ${typeof(y)}, ${typeof(z)}`); } } + + toAbs() { + return new Vec3(Math.round(this.x * 32), Math.round(this.y * 32), Math.round(this.z * 32)); + } } \ No newline at end of file