Files
Construct-CN/StrucTool [BP]/scripts/commands/struct.js
T
ForestOfLight 6a0f2ba376 Prep for RP
2025-04-15 09:14:10 -07:00

115 lines
3.7 KiB
JavaScript

import { Command } from '../lib/canopy/CanopyExtension';
import { extension } from '../config';
import { structureCollection } from '../classes/StructureCollection';
import { MaterialCounter } from '../classes/MaterialCounter';
const structCmd = new Command({
name: 'struct',
description: { text: 'Manages current StrucTool structures.' },
usage: 'struct <name> <add/remove/place/layer/info> [args...]',
callback: structCommand,
args: [
{ type: 'string', name: 'name' },
{ type: 'string', name: 'option' },
{ type: 'string|number', name: 'arg3' }
]
});
extension.addCommand(structCmd);
function structCommand(sender, args) {
const { name, option, arg3 } = args;
switch (option) {
case 'add':
addStructure(sender, name);
break;
case 'remove':
removeStructure(sender, name);
break;
case 'place':
placeStructure(sender, name);
break;
case 'layer':
setLayer(sender, name, arg3);
break;
case 'info':
printInfo(sender, name);
break;
default:
structCmd.sendUsage(sender);
}
}
function addStructure(sender, name) {
try {
structureCollection.add(name, name);
} catch (e) {
if (e.message.includes('already exists')) {
sender.sendMessage({ text: `§cStructure '${name}' already exists.` });
return;
} else {
sender.sendMessage({ text: `§cFailed to add structure '${name}'.` });
throw e;
}
}
sender.sendMessage({ text: `§7Added structure '${name}'` });
}
function removeStructure(sender, name) {
try {
structureCollection.remove(name);
} catch (e) {
sender.sendMessage({ text: `§cStructure '${name}' not found.` });
return;
}
sender.sendMessage({ text: `Removed structure '${name}'` });
}
function placeStructure(sender, name) {
let structure;
try {
structure = structureCollection.get(name);
} catch (e) {
try {
structure = structureCollection.add(name, name);
} catch (e) {
if (e.message.includes('already exists')) {
sender.sendMessage({ text: `§cStructure '${name}' already exists.` });
return;
} else if (e.message.includes('not found')) {
sender.sendMessage({ text: `§cStructure '${name}' not found.` });
return;
} else {
sender.sendMessage({ text: `§cFailed to place structure '${name}'.` });
throw e;
}
}
}
structure.place(sender.dimension.id, sender.location);
sender.sendMessage({ text: `§7Placed structure '${name}'.` });
}
function setLayer(sender, name, layer) {
let structure;
try {
structure = structureCollection.get(name);
} catch (e) {
sender.sendMessage({ text: `§cStructure '${name}' not found.` });
return;
}
structure.setLayer(layer);
sender.sendMessage({ text: `§7Set layer of structure '${name}' to ${layer}.` });
}
function printInfo(sender, name) {
let structure;
try {
structure = structureCollection.get(name);
} catch (e) {
sender.sendMessage({ text: `§cStructure '${name}' not found.` });
return;
}
const { dimensionId, location } = structure.getLocation();
sender.sendMessage({ text: `§7Structure '${name}' at [${location.x} ${location.y} ${location.z}] in '${dimensionId}'` });
sender.sendMessage({ text: `§7Current Layer: ${structure.getLayer()}` });
sender.sendMessage({ text: `§7Materials: ${MaterialCounter.getPrintable(name)}` });
}