Pular para o conteúdo principal

Machine

Máquinas orientadas a dados para as ilhas do BTC Sky: receitas, rede de energia, níveis, módulos de melhoria e hologramas.

Privadasv0.1.1Economia e criação
RequerTypeWriter0.9.0-beta-177 (BTC build)Quest extensionRPG Bundle (RPG Core)BTC SkyBTCMobsGUI extension (GuiAndDialogs)CraftEngineopcionalMiniPlaceholdersopcional

Criada para a rede BornToCraft. Esta extensão é documentada como referência e não é distribuída.

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​

  1. Instale o TypeWriter com a build BTC (BTC Core no Paper ou Folia).
  2. Instale as extensões de que o Machine depende: Quest, RPGBundle (RPG Core), BTC Sky, BTCMobs e GuiAndDialogs (a camada compartilhada de GUI).
  3. Opcional: instale o CraftEngine se uma definição usar o visual FURNITURE ou CUSTOM_BLOCK e o MiniPlaceholders para usar os placeholders.
  4. Coloque o JAR do Machine em plugins/Typewriter/extensions/ e reinicie o servidor.
  5. 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:

  1. 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 artifactId depois, ou as máquinas salvas serão perdidas.
  2. Na mesma página, adicione uma Machine Definition. Dê a ela um name e mantenha processingType em SMELTING.
  3. Defina storageRef com o artifact da etapa 1.
  4. Em recipes, adicione uma receita: inputMaterial IRON_ORE, outputMaterial IRON_INGOT, outputAmount 1, cookTime 200 (ticks, ou seja, 10 segundos). Deixe fuelCost em 1 ou mais se a máquina precisar queimar combustível.
  5. Em fuelTypes, adicione COAL com um burnTime e um fuelValue.
  6. Defina spawnItem com o item que os jogadores colocam para criar a máquina. Uma definição precisa de um spawnItem ou de um vanillaBlock, caso contrário é rejeitada na publicação.
  7. Opcionalmente, defina perIslandLimit para limitar o número de cópias por ilha.
  8. Publique. Coloque o item na sua própria ilha: a máquina aparece com seu holograma, e um clique direito abre seu menu.
Convertendo um bloco vanilla

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:

GrupoCamposO que controla
TipoprocessingType, behaviorsO que a máquina faz. behaviors é opcional e derivado do tipo quando vazio.
SlotsinputSlots, outputSlots, hasFuelSlot, upgradeSlots, essenceSlots, filterSlots, shearsSlots, maxPerSlotO layout do inventário. O layout de uma máquina é limitado a 54 slots.
Receitas e combustívelrecipes, fuelTypesO que entra e o que sai, quanto tempo leva e quanto custa.
Energia e líquidosenergyCapacity, energyGenerationPerTick, liquidTankCapacity, liquidFuelNameContribuição ao pool e manuseio de líquidos.
Progressãotiers, allowedUpgrades, upgradeSpecsTiers permanentes e módulos removíveis.
AparênciaspawnItem, visualType, furnitureId, customBlockId, alignWithPlayerYaw, hologram*Item, modelo e holograma.
ColocaçãomachineLimit, perIslandLimit, islandLimitUpgradeKey, dimensionScope, vanillaBlockQuem pode colocá-la, onde e quantas.
AutomaçãohopperInterval, hopperTransferAmount, redstoneMode, ejectWhenPowered, redstoneComparatorOutput, redstonePulseOnComplete, redstonePulseTicksFunis e redstone.
PersistênciastorageRef, guiStorageRefOnde as instances e o conteúdo de STORAGE são salvos.

Tipos de processamento​

FamíliaTipos
Máquinas de receitas, conduzidas por recipesSMELTING, LIQUID_SMELTING, MULTI_SMELTING, GRINDING, SAWING, MIXING, COMPACTING, ENRICHING, RECYCLING, BREWING, AUTO_CRAFTING, INDUSTRIAL, GENERIC
ProduçãoGENERATOR (sem entrada: produz as saídas da receita ao longo do tempo, com custo de energia opcional)
Armazenamento e logísticaSTORAGE, SORTING (cada slot de filtro reivindica um lado), CONVEYOR (esteira direcional)
Máquinas de áreaVACUUM (vacuumRange), SHEARING (shearRange, shearInterval, shearsSlots)
EnergiaENERGY_CELL, ENERGY_GENERATOR, CHARGING (chargeables, chargeRatePerSecond)
EntidadesASSEMBLER (assemblerMode SPAWN ou COLLECT, assemblerEntityType, assemblerMobId, assemblerIngredients, assemblerEnergyCost, assemblerInterval, assemblerRange, spawnerUpgrades), MOB_GRINDING (campos grinder*), EXPERIENCE_TANK (experienceCapacity)
EspeciaisCONTROL_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 com researchNode em branco é rejeitado.
  • Um módulo de upgrade (upgradeSpecs) é um item colocado em um slot de upgrade. itemId é o id de item da BTC (recomendado) e material é uma alternativa. Seu type (SPEED, YIELD, ENERGY_EFFICIENCY, FORTUNE, RANGE, FILTER, CAPACITY, LIQUID_FUEL) só conta se estiver listado em allowedUpgrades.
  • O tier e os módulos se multiplicam entre si.

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ãoEfeito
MACHINE_OPEN, MACHINE_SMELT, MACHINE_COLLECT, MACHINE_STATUS, MACHINE_FUELActions padrão da máquina e exibição de status.
MACHINE_LINKVincula a máquina à rede de sua dimensão ou a desvincula.
MACHINE_PICKUPRemove a máquina aberta e a devolve como item.
NAV_BACK, NAV_CLOSEVoltar ou fechar.
MACHINE_GRID_INFOResumo da dimensão: contagem de máquinas, energia armazenada, capacidade, produzida, consumida e saldo.
MACHINE_ENTRYUma 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_ARROWSeta 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​

ComandoDescrição
/typewriter machine giveLista 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 liquideMostra 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:

ComandoDescrição
/<commandName> scroll <delta>, resetRola a lista do dashboard ou a rebobina. Nome padrão machines.
/<commandName> dashboardAbre 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 CommandDispara seus triggers, se os criteria corresponderem. Nome padrão machine-test.
/<commandName>, clear, bench do Machine Test Platform CommandConstroem uma vitrine de máquinas onde você está, a removem ou provisionam mundos loadbench_*. Nome padrão machine-test-platform.

Permissões​

PermissãoConcede
machine.adminOs comandos /typewriter machine.
machine.protection.bypassColocar, 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).

PlaceholderRetorna
<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
Comandos3
Variáveis1
Artefatos1
Manifestos2
Outras entradas1

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.