@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
106 lines (105 loc) • 11.8 kB
JavaScript
"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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