Machine
Visão geral
O Machine transforma o design de máquinas em configuração. Uma entry Machine Definition descreve um tipo de máquina: quantos slots de entrada, saída, combustível e upgrade ela tem, o que ela processa, quanto custa em combustível e energia, qual é sua aparência, o que seu holograma diz e quantas cópias um jogador ou uma ilha pode colocar. A extensão lê a definição e executa cada cópia colocada. Uma fornalha, um moedor, um gerador de pedra ou um moedor de mobs é uma entry, não código.
As máquinas pertencem às ilhas do BTC Sky. Uma máquina só pode ser colocada na ilha do próprio jogador, é limitada por tetos por jogador e por ilha, e seu tier é desbloqueado pela árvore de pesquisa da ilha. A energia e os líquidos são compartilhados em uma dimensão da ilha: geradores e células formam um pool, e toda máquina vinculada dessa dimensão tira dele.
Esta é uma extensão privada da build BTC do TypeWriter (BTC Core, Paper ou Folia), documentada como referência. O runtime é seguro para Folia: os slots ficam em cache na memória e são salvos de forma assíncrona.
Recursos
- Uma entry por máquina — slots, receitas, combustível, energia, visuais, holograma, limites e automação ficam em uma única Machine Definition.
- 27 tipos de processamento — máquinas de receitas (fundição, moagem, serragem, mistura, poções…), armazenamento, logística, máquinas de área, máquinas de energia, spawners, moedores e mais.
- Receitas com várias entradas e aleatórias — entradas e saídas extras, saídas baseadas em chance, entradas e saídas de líquidos, itens de catálogo e poções vanilla.
- Rede de energia e tanques de líquidos compartilhados — células, geradores e tanques formam um pool por dimensão da ilha; uma máquina pode ser desvinculada da rede.
- Tiers e módulos de upgrade — tiers permanentes desbloqueados pela pesquisa do BTC Sky, além de módulos removíveis (velocidade, rendimento, fortuna, alcance, filtro, capacidade, combustível líquido) que se acumulam com eles.
- Proteção de ilha e limites — colocação na própria ilha, flag de construção, tetos por jogador, por ilha e por dimensão.
- Redstone e funis — modo redstone, ejeção, saída de comparador e pulsos de conclusão, transferências por funil.
- Hologramas — um texto de status com barra de progresso acima de cada máquina, totalmente formatado em MiniMessage.
- Menu de dashboard — um menu que lista todas as máquinas da dimensão com seu estado, energia e situação de vínculo.
- Persistência — as máquinas colocadas, os inventários, a energia e o progresso são salvos em um Machine Data Artifact.
Instalação
- Instale o TypeWriter com a build BTC (BTC Core no Paper ou Folia).
- Instale as extensões de que o Machine depende: Quest, RPGBundle (RPG Core), BTC Sky, BTCMobs e GuiAndDialogs (a camada compartilhada de GUI).
- Opcional: instale o CraftEngine se uma definição usar o visual
FURNITUREouCUSTOM_BLOCKe o MiniPlaceholders para usar os placeholders. - Coloque o JAR do Machine em
plugins/Typewriter/extensions/e reinicie o servidor. - A saída de comparador de redstone e os pulsos de conclusão só funcionam quando o BTC Core fornece emissão de redstone.
Primeiros passos
Crie uma fornalha que funde minério de ferro em lingotes:
- No painel web do TypeWriter, abra uma página static e adicione um Machine Data Artifact. Ele armazena todas as máquinas colocadas. Não altere seu
artifactIddepois, ou as máquinas salvas serão perdidas. - Na mesma página, adicione uma Machine Definition. Dê a ela um
namee mantenhaprocessingTypeemSMELTING. - Defina
storageRefcom o artifact da etapa 1. - Em
recipes, adicione uma receita:inputMaterialIRON_ORE,outputMaterialIRON_INGOT,outputAmount1,cookTime200(ticks, ou seja, 10 segundos). DeixefuelCostem1ou mais se a máquina precisar queimar combustível. - Em
fuelTypes, adicioneCOALcom umburnTimee umfuelValue. - Defina
spawnItemcom o item que os jogadores colocam para criar a máquina. Uma definição precisa de umspawnItemou de umvanillaBlock, caso contrário é rejeitada na publicação. - Opcionalmente, defina
perIslandLimitpara limitar o número de cópias por ilha. - Publique. Coloque o item na sua própria ilha: a máquina aparece com seu holograma, e um clique direito abre seu menu.
vanillaBlock (por exemplo BREWING_STAND) faz a definição assumir esse bloco vanilla: colocá-lo cria a máquina. As conversões de blocos vanilla não são limitadas pelo aviso do limite de colocação, pois um teto também limitaria o bloco vanilla.
Como funciona
Uma máquina é uma definition (a entry) mais instances (as cópias colocadas no mundo). A definition nunca muda em tempo de execução; cada instance mantém seu próprio inventário, carga de energia e progresso.
O modelo da definição
Cada campo de Machine Definition pertence a um destes grupos:
| Grupo | Campos | O que controla |
|---|---|---|
| Tipo | processingType, behaviors | O que a máquina faz. behaviors é opcional e derivado do tipo quando vazio. |
| Slots | inputSlots, outputSlots, hasFuelSlot, upgradeSlots, essenceSlots, filterSlots, shearsSlots, maxPerSlot | O layout do inventário. O layout de uma máquina é limitado a 54 slots. |
| Receitas e combustível | recipes, fuelTypes | O que entra e o que sai, quanto tempo leva e quanto custa. |
| Energia e líquidos | energyCapacity, energyGenerationPerTick, liquidTankCapacity, liquidFuelName | Contribuição ao pool e manuseio de líquidos. |
| Progressão | tiers, allowedUpgrades, upgradeSpecs | Tiers permanentes e módulos removíveis. |
| Aparência | spawnItem, visualType, furnitureId, customBlockId, alignWithPlayerYaw, hologram* | Item, modelo e holograma. |
| Colocação | machineLimit, perIslandLimit, islandLimitUpgradeKey, dimensionScope, vanillaBlock | Quem pode colocá-la, onde e quantas. |
| Automação | hopperInterval, hopperTransferAmount, redstoneMode, ejectWhenPowered, redstoneComparatorOutput, redstonePulseOnComplete, redstonePulseTicks | Funis e redstone. |
| Persistência | storageRef, guiStorageRef | Onde as instances e o conteúdo de STORAGE são salvos. |
Tipos de processamento
| Família | Tipos |
|---|---|
Máquinas de receitas, conduzidas por recipes | SMELTING, LIQUID_SMELTING, MULTI_SMELTING, GRINDING, SAWING, MIXING, COMPACTING, ENRICHING, RECYCLING, BREWING, AUTO_CRAFTING, INDUSTRIAL, GENERIC |
| Produção | GENERATOR (sem entrada: produz as saídas da receita ao longo do tempo, com custo de energia opcional) |
| Armazenamento e logística | STORAGE, SORTING (cada slot de filtro reivindica um lado), CONVEYOR (esteira direcional) |
| Máquinas de área | VACUUM (vacuumRange), SHEARING (shearRange, shearInterval, shearsSlots) |
| Energia | ENERGY_CELL, ENERGY_GENERATOR, CHARGING (chargeables, chargeRatePerSecond) |
| Entidades | ASSEMBLER (assemblerMode SPAWN ou COLLECT, assemblerEntityType, assemblerMobId, assemblerIngredients, assemblerEnergyCost, assemblerInterval, assemblerRange, spawnerUpgrades), MOB_GRINDING (campos grinder*), EXPERIENCE_TANK (experienceCapacity) |
| Especiais | CONTROL_PANEL (executa panelOpenCommand / panelAltCommand, não pode ser recolhido), TRANSMUTATION (move o maior encantamento de um item para um livro em troca de garrafas de experiência) |
SMELTING e AUTO_CRAFTING recorrem às receitas vanilla quando nenhuma receita é declarada. Todas as outras máquinas de receitas com zero receitas aceitam itens e permanecem ociosas para sempre; a extensão registra um aviso na publicação.
Energia e líquidos
A energia é armazenada em máquinas ENERGY_CELL. O pool da dimensão da ilha é a soma de suas células vinculadas. As máquinas ENERGY_GENERATOR o alimentam, e os consumidores tiram dele. Uma máquina entra na rede de sua dimensão assim que é colocada; o botão Machine Link (ou o dashboard) a retira e a coloca de volta. Uma célula no Overworld nunca alimenta uma máquina no Nether.
Os tanques de líquidos funcionam da mesma forma: uma máquina vinculada alcança todos os tanques de sua dimensão, uma desvinculada vê apenas o seu. Uma receita consome ou produz líquidos com liquidInputName/liquidInputAmount e liquidOutputName/liquidOutputAmount.
Tiers e módulos de upgrade
- Um tier (
tiers) é permanente. Cada tier indica o nó de pesquisa do BTC Sky (researchNode) que o desbloqueia e define multiplicadores de velocidade, rendimento e energia, uma chance de fortuna e slots extras. Liste os tiers em ordem crescente: o mais alto desbloqueado se aplica a todas as cópias da máquina na ilha. Um tier comresearchNodeem branco é rejeitado. - Um módulo de upgrade (
upgradeSpecs) é um item colocado em um slot de upgrade.itemIdé o id de item da BTC (recomendado) ematerialé uma alternativa. Seutype(SPEED,YIELD,ENERGY_EFFICIENCY,FORTUNE,RANGE,FILTER,CAPACITY,LIQUID_FUEL) só conta se estiver listado emallowedUpgrades. - O tier e os módulos se multiplicam entre si.
Menus
O Machine Menu é um GUI construído a partir de layouts da extensão GUI compartilhada (layoutPool, mainLayoutId, inventoryRows). Os itens do layout cujo buttonType é um botão do Machine são preenchidos com dados ao vivo:
| Tipo de botão | Efeito |
|---|---|
MACHINE_OPEN, MACHINE_SMELT, MACHINE_COLLECT, MACHINE_STATUS, MACHINE_FUEL | Actions padrão da máquina e exibição de status. |
MACHINE_LINK | Vincula a máquina à rede de sua dimensão ou a desvincula. |
MACHINE_PICKUP | Remove a máquina aberta e a devolve como item. |
NAV_BACK, NAV_CLOSE | Voltar ou fechar. |
MACHINE_GRID_INFO | Resumo da dimensão: contagem de máquinas, energia armazenada, capacidade, produzida, consumida e saldo. |
MACHINE_ENTRY | Uma máquina da dimensão por slot marcado. O clique esquerdo alterna seu holograma, o clique direito alterna seu vínculo com a rede. |
MACHINE_LIST_ARROW | Seta de rolagem da lista de máquinas, com o contador de páginas. |
Mais duas entries completam o conjunto. O Open Machine GUI vincula uma definição a um título e tamanho de menu, mas sua action não faz nada quando disparada no código atual: as máquinas abrem seu menu com o clique direito. A Machine Position Variable retorna a posição da máquina do próprio espectador de uma determinada definição em sua dimensão, para que uma única entry de NPC possa seguir a máquina de cada ilha.
Os rótulos exibidos pelo dashboard (estados, vínculo, holograma) vêm de Machine Dashboard Wording. A rolagem e o comando de abertura vêm de Machine Dashboard Command.
Comandos
| Comando | Descrição |
|---|---|
/typewriter machine give | Lista todas as máquinas registradas. |
/typewriter machine give <machine> | Entrega a si mesmo o item de uma máquina, por id ou por parte de seu nome (acentos e maiúsculas são ignorados). |
/typewriter machine liquide | Mostra os líquidos contidos na máquina para a qual você está olhando (a até 6 blocos). |
/typewriter machine liquide <liquid> <millibuckets> | Despeja um líquido na máquina alvo. Uma ferramenta de teste: nenhum gesto do jogador enche um tanque. |
A árvore /machine é registrada sob o comando do TypeWriter, então é digitada /typewriter machine … (alias /tw machine …). Tudo isso exige machine.admin. As entries podem registrar mais comandos, como comandos de nível superior:
| Comando | Descrição |
|---|---|
/<commandName> scroll <delta>, reset | Rola a lista do dashboard ou a rebobina. Nome padrão machines. |
/<commandName> dashboard | Abre o menu indicado em dashboardMenuId. |
/<commandName> link <instanceId>, hologram <instanceId> | Alterna o vínculo com a rede ou o holograma de uma máquina. Usado pelos slots do dashboard. |
/<commandName> do Machine Test Command | Dispara seus triggers, se os criteria corresponderem. Nome padrão machine-test. |
/<commandName>, clear, bench do Machine Test Platform Command | Constroem uma vitrine de máquinas onde você está, a removem ou provisionam mundos loadbench_*. Nome padrão machine-test-platform. |
Permissões
| Permissão | Concede |
|---|---|
machine.admin | Os comandos /typewriter machine. |
machine.protection.bypass | Colocar, quebrar e interagir com máquinas em qualquer lugar, ignorando a propriedade da ilha, a flag de construção e os limites. |
Placeholders
Tags MiniPlaceholders da expansão machine, fornecidas por meio do TypeWriter. <instance> é o id de uma máquina colocada e <slot> o índice do slot lógico (padrão 0).
| Placeholder | Retorna |
|---|---|
<machine_input:instance:slot> | true se o slot de entrada contém um item. |
<machine_input_name:instance:slot> | Nome do material do item de entrada. |
<machine_input_amount:instance:slot> | Quantidade no slot de entrada. |
<machine_output:instance:slot> | true se o slot de saída contém um item. |
<machine_output_name:instance:slot> | Nome do material do item de saída. |
<machine_output_amount:instance:slot> | Quantidade no slot de saída. |
<machine_tier:instance> | Nome do tier ativo. |
<machine_dimension> | Nome legível da dimensão em que o jogador está. |
<machine_grid_count>, <machine_grid_active>, <machine_grid_stalled> | Máquinas na dimensão, ativas e paradas. |
<machine_energy_stored>, <machine_energy_capacity> | Energia armazenada e capacidade total da dimensão. |
<machine_energy_produced>, <machine_energy_consumed>, <machine_energy_balance> | Energia por segundo produzida, consumida e líquida. |
Os placeholders de jogador retornam um valor vazio sem um jogador (console).
As mensagens de holograma aceitam %machine%, %tier%, %energy%, %bar%, %percent% e %time_left%.
Entries
10 entradas, geradas a partir do código-fonte da extensão.
Ações2
- Machine MenuMachine Menu
- Open Machine GUIOpen Machine GUI
Comandos3
- Machine Dashboard CommandMachine dashboard commands
- Machine Test CommandRegister a Machine test command
- Machine Test Platform CommandProvision the Machine BTC test platform
Variáveis1
- Machine Position VariablePosition of the viewer's machine of a given definition
Artefatos1
- Machine Data ArtifactStores machine runtime state (placed instances, energy, progress) as JSON data
Manifestos2
- Machine Dashboard ConfigMachine Dashboard Wording
- Machine Protection ConfigMachines : messages de protection
Outras entradas1
- Machine DefinitionMachine Definition
Solução de problemas
A definição é rejeitada na publicação. Verifique o log do servidor: no way to obtain this machine significa que nem spawnItem nem vanillaBlock está definido; tier[n].researchNode is blank significa que um tier não tem nó de pesquisa; the machine layout needs N slots, maximum is 54 significa slots demais.
Uma máquina aceita itens e nunca funciona. Uma máquina de receitas (por exemplo MIXING, GRINDING, BREWING) com uma lista recipes vazia não tem alternativa vanilla. Apenas SMELTING e AUTO_CRAFTING usam receitas vanilla.
A colocação é recusada. As mensagens vêm de Machine Protection Config: a máquina deve estar na sua própria ilha do BTC Sky, você precisa da flag de construção, e os limites de jogador, ilha e dimensão e dimensionScope se aplicam. Um CONTROL_PANEL precisa de um cristal de estabilização na dimensão. A staff com machine.protection.bypass ignora todas as verificações.
A máquina diz que não está vinculada ou que não tem energia. Ela precisa de máquinas ENERGY_CELL e ENERGY_GENERATOR na mesma dimensão e deve estar vinculada (use o botão de vínculo). O pool nunca atravessa dimensões.
Um módulo de upgrade não muda nada. Seu type deve estar em allowedUpgrades, e CAPACITY só funciona em STORAGE, EXPERIENCE_TANK e ENERGY_CELL. LIQUID_FUEL precisa de um liquidFuelName.
Um tier nunca é aplicado. O researchNode deve corresponder a um id de nó de pesquisa do BTC Sky, e a ilha deve tê-lo desbloqueado.
O menu abre vazio ou não abre. Verifique mainLayoutId em relação aos ids em layoutPool; o log informa os ids do pool quando não há correspondência.
Os visuais de móvel ou bloco personalizado falham. FURNITURE e CUSTOM_BLOCK precisam do CraftEngine e de um furnitureId ou customBlockId existente.
Extensões relacionadas
- BTC Sky — ilhas, propriedade, pesquisa e dimensões em que as máquinas se apoiam.