import { BuilderOptions } from "./BuilderOptions"; import { world } from "@minecraft/server"; const DP_NAMESPACE = "builderOptions"; export class BuilderOption { identifier; displayName; description; howToUse; #onEnable; #onDisable; constructor({ identifier, displayName, description, howToUse, onEnableCallback = () => {}, onDisableCallback = () => {} }) { this.identifier = identifier; this.displayName = displayName; this.description = description; this.howToUse = howToUse; this.#onEnable = onEnableCallback; this.#onDisable = onDisableCallback; BuilderOptions.add(this); } dynamicPropertyKey(playerId) { return `${DP_NAMESPACE}:${playerId}:${this.identifier}`; } isEnabled(playerId) { return world.getDynamicProperty(this.dynamicPropertyKey(playerId)) === true; } getValue(playerId) { return this.isEnabled(playerId); } setValue(playerId, value) { if (this.isEnabled(playerId) !== value) { this.save(playerId, value); if (value) this.#onEnable(playerId); else this.#onDisable(playerId); return value; } this.save(playerId, value); return void 0; } save(playerId, value) { world.setDynamicProperty(this.dynamicPropertyKey(playerId), value); } addControlTo(form, playerId) { form.toggle(this.displayName, { defaultValue: this.isEnabled(playerId), tooltip: this.description }); } applyFormValue(playerId, formValue) { const changedToValue = this.setValue(playerId, formValue); if (changedToValue === void 0) return void 0; if (changedToValue) return { rawtext: [ { text: `§a` }, this.displayName, { translate: 'construct.option.enabled' }, { text: `§7 ` }, this.howToUse ]}; return { rawtext: [ { text: `§c` }, this.displayName, { translate: 'construct.option.disabled' } ]}; } }