Files
Construct/scripts/classes/InstanceEditForm.js
T

107 lines
4.2 KiB
JavaScript

import { structureCollection } from './StructureCollection';
import { MenuForm } from '../classes/MenuForm';
import { ActionFormData } from '@minecraft/server-ui';
import { InstanceEditOptions } from './InstanceEditOptions';
import { InstanceEditFormBuilder } from './InstanceEditFormBuilder';
export class InstanceEditForm {
instanceName;
options = {
isPlaced: [
InstanceEditOptions.NextLayer,
InstanceEditOptions.PreviousLayer,
InstanceEditOptions.SetLayer,
InstanceEditOptions.Move,
InstanceEditOptions.Rotate,
InstanceEditOptions.Mirror,
InstanceEditOptions.RemovePlacement,
],
notPlaced: [
InstanceEditOptions.PlaceInstance
],
common: [
InstanceEditOptions.MaterialsList,
InstanceEditOptions.RenameInstance,
InstanceEditOptions.DeleteInstance,
InstanceEditOptions.MainMenu
]
}
constructor(player, instanceName) {
this.player = player;
this.instanceName = instanceName;
this.instance = structureCollection.get(this.instanceName);
this.show();
}
show() {
const currentOptions = this.instance.isPlaced() ? this.options.isPlaced : this.options.notPlaced;
InstanceEditFormBuilder.buildInstance(this.instanceName, currentOptions, this.options.common).show(this.player).then((response) => {
if (response.canceled) return;
let selectedOption;
if (this.instance.isPlaced())
selectedOption = this.options.isPlaced[response.selection] || this.options.common[response.selection-this.options.isPlaced.length];
else
selectedOption = this.options.notPlaced[response.selection] || this.options.common[response.selection-this.options.notPlaced.length];
this.handleOption(selectedOption);
});
}
handleOption(option) {
switch (option) {
case InstanceEditOptions.PlaceInstance:
this.instance.place(this.player.dimension.id, this.player.location);
break;
case InstanceEditOptions.RemovePlacement:
this.instance.removePlacement();
break;
case InstanceEditOptions.RenameInstance:
this.renameInstanceForm();
break;
case InstanceEditOptions.DeleteInstance:
this.structureCollection.remove(this.instanceName);
break;
case InstanceEditOptions.NextLayer:
this.instance.setLayer(this.instance.getLayer() + 1);
new InstanceEditForm(this.player, this.instanceName);
break;
case InstanceEditOptions.PreviousLayer:
this.instance.setLayer(this.instance.getLayer() - 1);
new InstanceEditForm(this.player, this.instanceName);
break;
case InstanceEditOptions.SetLayer:
this.setLayerForm();
break;
case InstanceEditOptions.Rotate:
this.player.sendMessage('§cRotating not implemented yet.');
break;
case InstanceEditOptions.Mirror:
this.player.sendMessage('§cMirroring not implemented yet.');
break;
case InstanceEditOptions.Move:
this.instance.move(this.player.dimension.id, this.player.location);
break;
case InstanceEditOptions.MaterialsList:
this.player.sendMessage('§cMaterial list not implemented yet.');
break;
case InstanceEditOptions.MainMenu:
new MenuForm(this.player);
break;
default:
this.player.sendMessage(`§cUnknown option: ${option}`);
break;
}
}
renameInstanceForm() {
}
setLayerForm() {
InstanceEditFormBuilder.buildSetLayer(this.instance.getBounds().max.y, this.instance.getLayer()).show(this.player).then((response) => {
if (response.canceled) return;
const selectedLayer = response.formValues[0];
this.instance.setLayer(parseInt(selectedLayer));
});
}
}