UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

106 lines (105 loc) 11.8 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const require_network_NetworkUtil = require("../network/NetworkUtil.cjs.cjs"); //#region src/world/GameruleManager.ts var GameRules = { CommandBlockOutput: "commandblockoutput", DoDayLightCycle: "dodaylightcycle", DoEntityDrops: "doentitydrops", DoFireTick: "dofiretick", DoMobLoot: "domobloot", DoMobSpawning: "domobspawning", DoTileDrops: "dotiledrops", DoWeatherCycle: "doweathercycle", DrowingDamage: "drowningdamage", FallDamage: "falldamage", FireDamage: "firedamage", KeepInventory: "keepinventory", MobGriefing: "mobgriefing", NaturalRegeneration: "naturalregeneration", PVP: "pvp", ShowCoordinates: "showcoordinates", RandomTickSpeed: "randomtickspeed", TNTExplodes: "tntexplodes", sendCommandFeedback: "sendcommandfeedback" }; var GameruleManager = class { server; rules = /* @__PURE__ */ new Map(); constructor(server) { this.server = server; this.setGamerule("CommandBlockOutput", true, true); this.setGamerule("DoDayLightCycle", true, true); this.setGamerule("DoEntityDrops", true, true); this.setGamerule("DoFireTick", true, true); this.setGamerule("DoMobLoot", true, true); this.setGamerule("DoMobSpawning", true, true); this.setGamerule("DoTileDrops", true, true); this.setGamerule("DoWeatherCycle", true, true); this.setGamerule("DrowningDamage", true, true); this.setGamerule("FallDamage", true, true); this.setGamerule("FireDamage", true, true); this.setGamerule("KeepInventory", false, true); this.setGamerule("MobGriefing", true, true); this.setGamerule("NaturalRegeneration", true, true); this.setGamerule("PVP", true, true); this.setGamerule("ShowCoordinates", false, true); this.setGamerule("RandomTickSpeed", 3, true); this.setGamerule("TNTExplodes", true, true); this.setGamerule("sendCommandFeedback", true, true); } /** * Sets a game rule. * @param {string} name - the gamerule's name. * @param {boolean | number} value - the value, boolean OR number. * @param {boolean} editable - if the gamerule is editable. * @TODO: notify clients about gamerule change. */ setGamerule(name, value, editable) { this.rules.set(name.toLowerCase(), [value, editable]); } /** * Returns the gamerule value. * @param {string} name - the gamerule's name. */ getGamerule(name) { if (!Object.values(GameRules).includes(name.toLowerCase())) this.server.getLogger().error(`Unknown Gamerule with name ${name}`); return this.rules.get(name.toLowerCase()) ?? null; } getGamerules() { return this.rules; } networkSerialize(stream) { const isInt = (n) => { return n % 1 === 0; }; stream.writeUnsignedVarInt(this.getGamerules().size); for (const [name, [value, editable]] of this.getGamerules()) { require_network_NetworkUtil.NetworkUtil.writeString(stream, name.toLowerCase()); stream.writeBoolean(editable); switch (typeof value) { case "boolean": stream.writeByte(1); stream.writeBoolean(value); break; case "number": if (isInt(value)) { stream.writeByte(2); stream.writeUnsignedVarInt(value); } else { stream.writeByte(3); stream.writeFloatLE(value); } break; default: this.server.getLogger().error("Gamerule format not implemented"); } } } }; //#endregion exports.GameRules = GameRules; exports.default = GameruleManager; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXJ1bGVNYW5hZ2VyLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmxkL0dhbWVydWxlTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgdHlwZSBTZXJ2ZXIgZnJvbSAnLi4vU2VydmVyJztcbmltcG9ydCB7IE5ldHdvcmtVdGlsIH0gZnJvbSAnLi4vbmV0d29yay9OZXR3b3JrVXRpbCc7XG5cbmV4cG9ydCBjb25zdCBHYW1lUnVsZXMgPSB7XG4gICAgQ29tbWFuZEJsb2NrT3V0cHV0OiAnY29tbWFuZGJsb2Nrb3V0cHV0JyxcbiAgICBEb0RheUxpZ2h0Q3ljbGU6ICdkb2RheWxpZ2h0Y3ljbGUnLFxuICAgIERvRW50aXR5RHJvcHM6ICdkb2VudGl0eWRyb3BzJyxcbiAgICBEb0ZpcmVUaWNrOiAnZG9maXJldGljaycsXG4gICAgRG9Nb2JMb290OiAnZG9tb2Jsb290JyxcbiAgICBEb01vYlNwYXduaW5nOiAnZG9tb2JzcGF3bmluZycsXG4gICAgRG9UaWxlRHJvcHM6ICdkb3RpbGVkcm9wcycsXG4gICAgRG9XZWF0aGVyQ3ljbGU6ICdkb3dlYXRoZXJjeWNsZScsXG4gICAgRHJvd2luZ0RhbWFnZTogJ2Ryb3duaW5nZGFtYWdlJyxcbiAgICBGYWxsRGFtYWdlOiAnZmFsbGRhbWFnZScsXG4gICAgRmlyZURhbWFnZTogJ2ZpcmVkYW1hZ2UnLFxuICAgIEtlZXBJbnZlbnRvcnk6ICdrZWVwaW52ZW50b3J5JyxcbiAgICBNb2JHcmllZmluZzogJ21vYmdyaWVmaW5nJyxcbiAgICBOYXR1cmFsUmVnZW5lcmF0aW9uOiAnbmF0dXJhbHJlZ2VuZXJhdGlvbicsXG4gICAgUFZQOiAncHZwJyxcbiAgICBTaG93Q29vcmRpbmF0ZXM6ICdzaG93Y29vcmRpbmF0ZXMnLCAvLyBCb29sXG4gICAgUmFuZG9tVGlja1NwZWVkOiAncmFuZG9tdGlja3NwZWVkJyxcbiAgICBUTlRFeHBsb2RlczogJ3RudGV4cGxvZGVzJyxcbiAgICBzZW5kQ29tbWFuZEZlZWRiYWNrOiAnc2VuZGNvbW1hbmRmZWVkYmFjaydcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVydWxlTWFuYWdlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2ZXI6IFNlcnZlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJ1bGVzOiBNYXA8c3RyaW5nLCBbYm9vbGVhbiB8IG51bWJlciwgYm9vbGVhbl0+ID0gbmV3IE1hcCgpIGFzIE1hcDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBbYm9vbGVhbiB8IG51bWJlciwgYm9vbGVhbl1cbiAgICA+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNlcnZlcjogU2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuXG4gICAgICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlc1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdDb21tYW5kQmxvY2tPdXRwdXQnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnRG9EYXlMaWdodEN5Y2xlJywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0R2FtZXJ1bGUoJ0RvRW50aXR5RHJvcHMnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnRG9GaXJlVGljaycsIHRydWUsIHRydWUpO1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdEb01vYkxvb3QnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnRG9Nb2JTcGF3bmluZycsIHRydWUsIHRydWUpO1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdEb1RpbGVEcm9wcycsIHRydWUsIHRydWUpO1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdEb1dlYXRoZXJDeWNsZScsIHRydWUsIHRydWUpO1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdEcm93bmluZ0RhbWFnZScsIHRydWUsIHRydWUpO1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdGYWxsRGFtYWdlJywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0R2FtZXJ1bGUoJ0ZpcmVEYW1hZ2UnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnS2VlcEludmVudG9yeScsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnTW9iR3JpZWZpbmcnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnTmF0dXJhbFJlZ2VuZXJhdGlvbicsIHRydWUsIHRydWUpO1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdQVlAnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnU2hvd0Nvb3JkaW5hdGVzJywgZmFsc2UsIHRydWUpO1xuICAgICAgICB0aGlzLnNldEdhbWVydWxlKCdSYW5kb21UaWNrU3BlZWQnLCAzLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnVE5URXhwbG9kZXMnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRHYW1lcnVsZSgnc2VuZENvbW1hbmRGZWVkYmFjaycsIHRydWUsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBnYW1lIHJ1bGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSB0aGUgZ2FtZXJ1bGUncyBuYW1lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbiB8IG51bWJlcn0gdmFsdWUgLSB0aGUgdmFsdWUsIGJvb2xlYW4gT1IgbnVtYmVyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZWRpdGFibGUgLSBpZiB0aGUgZ2FtZXJ1bGUgaXMgZWRpdGFibGUuXG4gICAgICogQFRPRE86IG5vdGlmeSBjbGllbnRzIGFib3V0IGdhbWVydWxlIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0R2FtZXJ1bGUobmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbiB8IG51bWJlciwgZWRpdGFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ydWxlcy5zZXQobmFtZS50b0xvd2VyQ2FzZSgpLCBbdmFsdWUsIGVkaXRhYmxlXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2FtZXJ1bGUgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSB0aGUgZ2FtZXJ1bGUncyBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRHYW1lcnVsZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEdhbWVSdWxlcykuaW5jbHVkZXMobmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkuZXJyb3IoYFVua25vd24gR2FtZXJ1bGUgd2l0aCBuYW1lICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bGVzLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEdhbWVydWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVsZXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5ldHdvcmtTZXJpYWxpemUoc3RyZWFtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNJbnQgPSAobjogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbiAlIDEgPT09IDA7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5nZXRHYW1lcnVsZXMoKS5zaXplKTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgW3ZhbHVlLCBlZGl0YWJsZV1dIG9mIHRoaXMuZ2V0R2FtZXJ1bGVzKCkpIHtcbiAgICAgICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHN0cmVhbSwgbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIHN0cmVhbS53cml0ZUJvb2xlYW4oZWRpdGFibGUpO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSgxKTsgLy8gTWF5YmUgdmFsdWUgdHlwZSA/P1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGVCb29sZWFuKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSgyKTsgLy8gTWF5YmUgdmFsdWUgdHlwZSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSgzKTsgLy8gTWF5YmUgdmFsdWUgdHlwZSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkuZXJyb3IoJ0dhbWVydWxlIGZvcm1hdCBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLElBQWEsWUFB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