Craft Engine
Visão geral
O Craft Engine conecta o CraftEngine ao TypeWriter. Seus blocos, móveis e itens personalizados passam a ser coisas às quais uma quest pode reagir: eventos quando um jogador os quebra, coloca ou clica neles, objectives que os contam, facts e variáveis que leem o que um jogador segura ou observa, e actions que os colocam, substituem ou removem.
A segunda metade da extensão é a quest zone. Uma quest zone dá a cada jogador a sua própria versão de uma área. O que um jogador quebra, coloca ou altera é registrado apenas para ele, enviado a ele como pacotes e devolvido quando ele retorna. O mundo real nunca é gravado, então sair de uma zona não custa nada e nada fica pela metade se o servidor parar no meio de uma quest. Uma zona também pode ser compartilhada por um grupo, para que uma party limpe uma sala em conjunto.
A extensão é escrita para Paper e Folia: toda alteração de mundo ou de inventário é executada na região que a contém.
Recursos
- Eventos de blocos e móveis — reaja a blocos e móveis personalizados sendo quebrados, colocados, interagidos ou atingidos, inclusive colocações recusadas.
- Regras de colocação — recuse uma colocação ou um golpe a menos que o jogador tenha uma permissão ou corresponda a criteria.
- Objectives de contagem — quebre, coloque ou substitua blocos e móveis personalizados como objective de quest; cada posição conta uma vez por jogador.
- Actions de mundo — coloque, remova ou substitua um bloco ou um móvel e armazene seus próprios dados em móveis colocados.
- Quest zones — uma visão por jogador (ou por grupo) de blocos e móveis, lembrada entre as visitas.
- Troca de inventário — retire o inventário inteiro de um jogador, ou apenas itens escolhidos, ao entrar em uma zona e devolva-o ao sair.
- Audience de blocos falsos — mostre um conjunto fixo de blocos e móveis a uma audience sem registrar nada.
- Ferramentas de itens — dê ou remova itens do CraftEngine por id e reaja a pegá-los, soltá-los ou comê-los.
- Facts, variáveis e audiences — leia o item na mão, o bloco ou móvel observado, cooldowns e agrupe jogadores pelo que seguram ou em que estão sentados.
Instalação
- Instale o CraftEngine no seu servidor. A extensão é compilada contra o CraftEngine 26.8.
- Confirme que a extensão Quest do TypeWriter está instalada. Ela fornece as entries de quest e de objective usadas pelos objectives.
- Baixe a extensão nas lojas (veja os botões no painel acima) e coloque o JAR em
plugins/Typewriter/extensions/. - Reinicie o servidor. No log você deve ver
[CraftEngine] CraftEngineExtension initialized successfully.
Primeiros passos
Este passo a passo dá a cada jogador o seu próprio selo quebrável em uma sala de puzzle.
- No painel web, abra uma página de manifest e adicione um Quest State Artifact. Deixe
artifactIdcomo gerado. - Adicione uma Quest Zone Audience e defina
artifactcom o artifact que você acabou de criar. DeixezoneIdvazio para usar o id da entry e mantenhatrackBlocksativado. - Aninhe a zone audience sob a audience que decide quem está na sala (por exemplo, uma audience de área ou de quest). Os jogadores que entram recebem sua própria visão.
- Em uma página de sequence, adicione um evento On Block Interact para o seu bloco de selo. Ele dispara uma action Set Quest Block.
- Na action, defina
artifactezoneIdcom os mesmos valores da zona (copie o id da entry da zona), associelocationà posição do evento e definablockIdcomo o selo quebrado (namespace:broken_seal). Deixe vazio para mostrar ar. - Adicione uma action Clear Quest State onde a quest termina, para que a sala possa ser resolvida novamente.
- Clique em Publish e verifique com dois jogadores: cada um abre o seu próprio selo e o outro continua vendo o seu intacto.
Para uma tarefa simples de contagem, você não precisa de uma zona: adicione um objective Break Block, preencha item com o id do bloco e defina amount.
Como funciona
Uma alteração feita em uma zona é um desvio: um bloco enviado a um jogador por cima do real, uma peça de móvel do mundo ocultada de um jogador, ou um fantasma, uma peça de móvel que existe apenas para aquele jogador. Um fantasma pode ser clicado com o botão direito e quebrado por quem o vê, mas não tem colisão para ninguém.
A colisão sempre segue o mundo. Um bloco que um jogador quebrou ainda o bloqueia, um bloco que ele colocou pode ser atravessado e um móvel do mundo ocultado ainda impede o jogador que não consegue vê-lo. Construa zonas em que a alteração seja algo para ver e usar, não algo para pisar.
O estado é gravado no artifact alguns segundos após a última alteração, e imediatamente quando um jogador sai de uma zona ou o servidor para. Um servidor que é encerrado à força em vez de parado pode perder os últimos segundos.
Configuração
A extensão não tem arquivo de configuração. O texto das linhas de objective pode ser alterado com snippets do TypeWriter:
| Snippet | Padrão |
|---|---|
craftengine.objective.display | <display> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>) |
craftengine.objective.completed | <green>✔</green> <st><display></st> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>) |
Entries
49 entradas, geradas a partir do código-fonte da extensão.
Ações10
- Craftengine Clear Quest StateDrop a player's own state for a quest zone
- Craftengine Give Item ActionGive a CraftEngine item to the player
- Craftengine Remove Item ActionRemove a CraftEngine item from the player
- Craftengine Set Quest BlockChange what one player sees at a spot, inside a quest zone — a block or a piece of furniture
- Craftengine Set Quest FurnitureHide or show one piece of the world's furniture, for one player, inside a quest zone
- Place Craftengine BlockPlace a CraftEngine block at a location
- Place Craftengine FurniturePlace a CraftEngine furniture at a location
- Remove Craftengine BlockRemove the CraftEngine block at a location
- Remove Craftengine FurnitureRemove the CraftEngine furniture at a location
- Replace Craftengine BlockReplace the block or furniture at a location with another one
Eventos13
- Craftengine on Item Consume EventTriggers when the player consumes a CraftEngine item
- Craftengine on Item Drop EventTriggers when the player drops a CraftEngine item
- Craftengine on Item Pickup EventTriggers when the player picks up a CraftEngine item
- On Craftengine Block Attempt Place EventTriggers when a player attempts to place a CraftEngine block
- On Craftengine Block Break EventTriggers when a CraftEngine custom block is broken
- On Craftengine Block Interact EventTriggers when a CraftEngine custom block is interacted with
- On Craftengine Block Place EventTriggers when a CraftEngine custom block is placed
- On Craftengine Dispense Projectile EventTriggers when a dispenser shoots a CraftEngine projectile
- On Craftengine Furniture Attempt Place EventTriggers when a player attempts to place CraftEngine furniture
- On Craftengine Furniture Break EventTriggers when a CraftEngine furniture is broken
- On Craftengine Furniture Hit EventTriggers when a player hits CraftEngine furniture
- On Craftengine Furniture Interact EventTriggers when a CraftEngine furniture is interacted with
- On Craftengine Furniture Place EventTriggers when a CraftEngine furniture is placed
Objetivos5
- Break Craftengine Block ObjectiveAn objective to break CraftEngine custom blocks
- Break Craftengine Furniture ObjectiveAn objective to break CraftEngine furniture
- Place Craftengine Block ObjectiveAn objective to place CraftEngine custom blocks
- Place Craftengine Furniture ObjectiveAn objective to place CraftEngine furniture
- Replace Craftengine Block ObjectiveAn objective to replace a block with another one
Fatos8
- Craftengine Cooldown Active FactWhether a CraftEngine cooldown is currently running
- Craftengine Cooldown Remaining FactSeconds left on a CraftEngine cooldown
- Craftengine Holding Item FactWhether the player is holding a CraftEngine item
- Craftengine Item Cooldown FactTicks left on the vanilla use cooldown of an item
- Craftengine Item Count FactHow many of a CraftEngine item the player carries
- Craftengine Looking at Block FactWhether the player is looking at a CraftEngine block
- Craftengine Looking at Furniture FactWhether the player is looking at CraftEngine furniture
- Craftengine Standing on Block FactWhether the player is standing on a CraftEngine block
Audiências5
- Craftengine Fake Block AudienceShow blocks and furniture to this audience alone
- Craftengine Furniture Proximity AudienceIn audience while near a CraftEngine furniture
- Craftengine Holding Item AudienceIn audience while holding a CraftEngine item
- Craftengine Quest Zone AudienceKeep a player's own block, furniture and item state for a quest zone
- Craftengine Sitting on Furniture AudienceIn audience while sitting on a CraftEngine furniture
Variáveis6
- Craftengine Item in Hand ID VariableThe CraftEngine ID of the item the player holds
- Craftengine Item Property VariableA property of the CraftEngine item the player holds
- Craftengine Looking at Block ID VariableThe CraftEngine ID of the block the player is looking at
- Craftengine Looking at Furniture ID VariableThe CraftEngine ID of the furniture the player is looking at
- Craftengine Registry Ids VariableThe list of IDs CraftEngine has loaded
- Craftengine Standing on Block ID VariableThe CraftEngine ID of the block the player stands on
Sons1
- Craftengine SoundCraftEngine Sound
Artefatos1
- Craftengine Quest State ArtifactArtifact storing per-player quest block and item state
Solução de problemas
Uma quest zone não mostra nada e nenhum erro aparece. As actions e a audience devem indicar o mesmo artifact, zoneId e group. Uma alteração registrada sob outro nome é gravada corretamente, mas ninguém a lê. Quando zoneId está vazio na audience, é o id da própria entry da audience que você deve copiar.
O Set Quest Block não faz nada e o log diz "has no zone configured". zoneId está vazio na action. Defina-o. O mesmo vale para o Set Quest Furniture.
O log diz "cannot resolve" um id. O blockId não é um bloco do CraftEngine, um móvel do CraftEngine nem um material vanilla. Verifique o id com Registry IDs. Com kind definido como FURNITURE, um id que não é de móvel é recusado em vez de ser exibido como bloco.
Todos na zona veem a mesma alteração. A action gravou o mundo. As actions Place e Remove, e o Replace Block definido como WORLD, alteram o bloco real. Dentro de uma zona, use Set Quest Block, Set Quest Furniture ou Replace Block com audience em AUTO ou QUEST_ZONE.
O Replace Block não faz nada para um jogador em duas zonas. Com várias zonas sobrepostas e sem zoneId, a action recusa e escreve uma linha no log. Defina zoneId com a zona que você quer dizer.
Uma alteração volta a piscar após uma longa caminhada. Um cliente que recarrega um chunk recebe novamente o mundo real, e a zona reenvia sua visão a cada refreshInterval ticks dentro de refreshRadius blocos. Reduza refreshInterval ou aumente refreshRadius.
Os eventos de bloco não disparam para um bloco quebrado em uma zona. Com trackBlocks ativado, a zona assume a ação: a quebra ou a colocação é cancelada e registrada como um desvio. Avance a quest a partir dos eventos de interação ou do Set Quest Block.
Extensões relacionadas
- Nexo e ItemsAdder — o mesmo tipo de integração para os outros plugins de conteúdo personalizado.