diff --git a/packs/BP/scripts/commands/OptionCommand.js b/packs/BP/scripts/commands/OptionCommand.js new file mode 100644 index 0000000..dba4ef6 --- /dev/null +++ b/packs/BP/scripts/commands/OptionCommand.js @@ -0,0 +1,47 @@ +import { CustomCommandParamType, CustomCommandStatus, system } from '@minecraft/server'; +import { Command } from '../classes/Commands/Command'; +import { PlayerCommandOrigin } from '../classes/Commands/PlayerCommandOrigin'; +import { BuilderOptions } from '../classes/Builder/BuilderOptions'; +import { requirePlayer } from '../classes/Commands/lib/requirePlayer'; +import { commandError } from '../classes/Commands/lib/commandError'; + +export class OptionCommand extends Command { + constructor() { + super({ + name: 'option', + description: 'construct.commands.option', + allowedSources: [PlayerCommandOrigin], + mandatoryParameters: [ + { name: 'optionId', type: CustomCommandParamType.Enum }, + { name: 'state', type: CustomCommandParamType.Boolean } + ], + enums: [ + { name: 'optionId', values: ['easyPlace', 'fastEasyPlace', 'materialGrabber'] } + ], + callback: (source, optionId, state) => this.run(source, optionId, state) + }); + } + + run(source, optionId, state) { + try { + const player = requirePlayer(source); + if (!BuilderOptions.get(optionId)) { + system.run(() => source.sendMessage({ + rawtext: [{ translate: 'construct.commands.option.unknownOption', with: [optionId] }] + })); + return { status: CustomCommandStatus.Failure }; + } + system.run(() => { + BuilderOptions.setValue(optionId, player.id, state); + source.sendMessage({ + rawtext: [{ translate: 'construct.commands.option.success', with: [optionId, String(state)] }] + }); + }); + return { status: CustomCommandStatus.Success }; + } catch (err) { + return commandError(source, err); + } + } +} + +export const optionCommand = new OptionCommand(); diff --git a/packs/BP/scripts/main.js b/packs/BP/scripts/main.js index 160c7f3..d3dfad0 100644 --- a/packs/BP/scripts/main.js +++ b/packs/BP/scripts/main.js @@ -22,6 +22,7 @@ import './commands/LayerCommand'; import './commands/NextLayerCommand'; import './commands/PrevLayerCommand'; import './commands/VerifierCommand'; +import './commands/OptionCommand'; // Other import './classes/BlockInfo'; diff --git a/packs/RP/texts/en_US.lang b/packs/RP/texts/en_US.lang index e831205..12f4d0a 100644 --- a/packs/RP/texts/en_US.lang +++ b/packs/RP/texts/en_US.lang @@ -162,3 +162,8 @@ construct.commands.prevlayer.success=§aInstance "%1" stepped back to layer %2. ## construct:verifier construct.commands.verifier=Toggle block validation overlay for an instance. construct.commands.verifier.success=§aSet instance "%1" verifier=%2. + +## construct:option +construct.commands.option=Toggle a per-player builder option. +construct.commands.option.success=§aSet option "%1" = %2. +construct.commands.option.unknownOption=§cUnknown option "%1". diff --git a/packs/RP/texts/zh_CN.lang b/packs/RP/texts/zh_CN.lang index 80f27d5..ed3e58e 100644 --- a/packs/RP/texts/zh_CN.lang +++ b/packs/RP/texts/zh_CN.lang @@ -162,3 +162,8 @@ construct.commands.prevlayer.success=§aInstance "%1" stepped back to layer %2. ## construct:verifier construct.commands.verifier=Toggle block validation overlay for an instance. construct.commands.verifier.success=§aSet instance "%1" verifier=%2. + +## construct:option +construct.commands.option=Toggle a per-player builder option. +construct.commands.option.success=§aSet option "%1" = %2. +construct.commands.option.unknownOption=§cUnknown option "%1".