107 lines
4.2 KiB
JavaScript
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));
|
|
});
|
|
}
|
|
} |