Escolar Documentos
Profissional Documentos
Cultura Documentos
Índice
1. Programação do Pacote de Dados do Minecraft: Introdução
2. Programação do Pacote de Dados do Minecraft: Sintaxe de
Comando 3. Programação do Pacote de Dados do Minecraft: Uso do Placar
Machine Translated by Google
Programação: Introdução
Observação: este guia cobre especificamente a versão Java Edition do Minecraft. A Bedrock
Edition não usa pacotes de dados, mas fornece personalização por meio de complementos.
Uma coisa a observar: embora os pacotes de dados sejam simples de usar e permitam uma
grande quantidade de funcionalidades, eles têm algumas desvantagens. Uma delas é que,
embora os pacotes de dados permitam que a maioria dos recursos do jogo sejam alterados, eles
não permitem que os jogadores adicionem novos recursos ao jogo (embora alguns possam criar
essa ilusão de forma convincente com alguns truques).
Os mods podem executar solicitações HTTP, conversar com outros aplicativos ou usar
qualquer biblioteca compatível com o tempo de execução Java do Minecraft.
Embora os pacotes de dados possam adicionar coisas como mobs ou itens personalizados
por meio de algumas soluções alternativas, sempre há algumas limitações. Os mods podem
adicionar qualquer código ao jogo sem restrições de comportamento.
Obviamente, isso depende de quão bem sua funcionalidade é escrita, mas os mods podem
fornecer um desempenho muito melhor com multithreading, código assíncrono e acesso
geralmente mais rápido aos dados de que precisam.
Em comparação, os pacotes de dados são limitados pelo desempenho dos comandos
disponíveis para eles.
Resumo
Normalmente, prefiro escrever pacotes de dados para a maioria das coisas em que trabalho,
pois os considero mais úteis para um público mais amplo devido ao processo de instalação mais
fácil. Alguns jogadores simplesmente não querem o trabalho de configurar outra pasta de
instalação ou usar um carregador de Minecraft diferente para jogar com um mod específico, e os
pacotes de dados podem funcionar com quase qualquer combinação de outros mods e tecnologia
de servidor.
Com isso dito, os pacotes de dados podem certamente ser tediosos de escrever às vezes -
embora sejam mais fáceis de criar para funcionalidades simples que podem ser invocadas
diretamente por meio de comandos, um comportamento mais complexo pode ser melhor como um mod se
Machine Translated by Google
essas vantagens são mais atraentes. Nada é sem suas desvantagens, e qualquer escolha aqui
é válida.
Os pacotes de dados fazem uso frequente de arquivos .mcfunction , que são arquivos de texto
que contêm uma lista de comandos para execução do Minecraft. Mas como sabemos quais
comandos escrever? Na verdade, podemos testá-los no Minecraft primeiro!
Vamos tentar criar um novo mundo Minecraft; Vou nomear o meu "teste" para que eu possa
encontrá-lo facilmente. Certifique-se de que a opção "Allow Cheats" esteja definida como "ON"
e pressione "Create World".
Se você pressionar "t" para abrir o chat de texto, digite "/s", uma lista de comandos deve
aparecer! Esta lista pode ser navegada com as setas "para cima" e "para baixo"
Machine Translated by Google
teclas e inclui todos os comandos do jogo. Se você começar a digitar um, ele deve solicitar
qualquer sintaxe adicional necessária. Se o comando ficar vermelho, significa que a sintaxe
é inválida.
Vamos tentar fazer uma lista de comandos que podem gerar alguns animais. Os
comandos abaixo devem funcionar quando digitados no chat de texto e convocarão a
entidade no mesmo local que o jogador.
concha /
invocarinvocar
ovelhavaca
2/ 1/
invocarinvocar
cabra 4porco
/invocar
3/
lhama 5
Precisamos criar uma nova pasta para construir nosso pacote de dados — vou nomear o
meu como "1-introdução" para refletir o nome deste artigo. Em seguida, precisamos colocar
um arquivo "pack.mcmeta" dentro desta pasta para descrever nosso pacote.
json
12
3 { "pack":
{ "pack_format": 10,
Machine Translated by Google
"formato_pacote": 10
1.18.2
"formato_pacote": 9
1.18-1.18.1
"formato_pacote": 8
1.17-1.17.1
"formato_pacote": 7
Precisamos então criar uma série de pastas próximas a este arquivo, que devem ser
aninhadas uma dentro da outra da seguinte forma:
1 dados/fennifith/funções/animais/
Nesse caminho, a pasta fennifith/ pode ser chamada de namespace — isso deve ser
exclusivo para evitar possíveis conflitos se alguém tentar usar vários pacotes de dados de
uma só vez; se dois pacotes de dados usarem exatamente o mesmo nome de função, pelo
menos um deles não funcionará como esperado.
O namespace e a pasta animals/ podem ser renomeados como você quiser, mas as pastas
data/ e functions/ devem permanecer as mesmas para que o pacote de dados funcione.
Além disso, é importante que a pasta "funções" esteja exatamente um nível abaixo da pasta
"dados". Por exemplo, data/functions/ ou data/a/b/functions/ não seriam estruturas válidas.
Finalmente, devemos criar nosso arquivo .mcfunction nesta pasta. Vou nomear minha
função spawn.mc:
concha
12 convocar vaca
convocar ovelhas
Machine Translated by Google
3 invocar porco
4 invocar cabra
5 invocar lhama
Observe que, embora seja necessário um / anterior para digitar esses comandos no chat de
texto, ele não deve ser incluído no arquivo .mcfunction .
shell 1
1-introdução/ pack.mcmeta
4 5 funções/
2 3 dados/
animais/
fennifith/
67
spawn.mcfunção
Para transformar esta pasta em um pacote de dados, basta converter a pasta "1-
introdução" em um arquivo zip.
janelas
Isso pode ser feito mantendo pressionada a tecla Shift e selecionando os arquivos
pack.mcmeta e data/ no explorador de arquivos. Em seguida, clique com o botão direito do
mouse e escolha "Enviar para > Pasta compactada (zipada)".
Isso deve criar um arquivo zip no mesmo local - você pode querer renomeá-lo para o nome
do seu pacote de dados. Clique com o botão direito do mouse e copie-o para que possamos
movê-lo para o mundo do Minecraft!
Para encontrar a localização do seu mundo salvo, abra o Minecraft e encontre o mundo
de "teste" que criamos anteriormente. Clique nele, escolha a opção "Editar" e "Abrir pasta do
mundo".
Machine Translated by Google
Na janela do Explorer que se abre, entre na pasta "datapacks". Clique com o botão direito e
cole o arquivo zip aqui.
Mac OS
Isso pode ser feito abrindo seu pacote de dados no Finder e selecionando pack.mcmeta
e data/ arquivos. Clique com a tecla Control pressionada ou toque nos arquivos
selecionados usando dois dedos e escolha "Compactar" no menu de opções.
Agora você deve ter um arquivo chamado "Archive.zip" — você pode querer renomeá-
lo para o nome do seu pacote de dados. Em seguida, copie este arquivo para que
possamos movê-lo para o mundo do Minecraft!
Na janela do Finder que se abre, entre na pasta "datapacks" e cole o arquivo zip dentro
dela.
Linux
Isso pode ser feito usando o comando zip em seu terminal. Depois de fazer o cd na pasta do
pacote de dados, execute o comando abaixo para criar um arquivo zip.
shell
-r 1-introduction.zip
cd 1-introduction/
./*1 2 zip
Então, assumindo que você nomeou seu mundo como "testing", o comando ls
~/.minecraft/saves/testing deve listar os arquivos salvos desse mundo. Execute mv ./1-
introduction.zip ~/.minecraft/saves/testing/datapacks/ para mover o arquivo zip para a
pasta de pacotes de dados do mundo.
Machine Translated by Google
Agora que instalamos o pacote de dados, você poderá entrar no world save novamente
(ou usar o comando /reload se ainda o tiver aberto).
Mas nada acontece!
Isso porque, embora nossa função exista, ela não está conectada a nenhum evento do
jogo — ainda precisamos digitar um comando para realmente executá-la. Veja como deve ser
o comando para minha função:
shell
1 /função fennifith:animais/spawn
Para executar uma função automaticamente, o Minecraft fornece duas tags de função
integradas que rodam durante eventos específicos: load (quando o mundo é aberto) e
tick (cada tick do jogo).
shell
pack.mcmeta
1-introdução/
data/1 23 4
minecraft/ tags/ 5 6
funções/ load.json
7 8 fennifith/
Machine Translated by Google
funções/
9 animais/
10 load.mcfunction
11 12 spawn.mcfunction
Observe que, enquanto estou usando o namespace fennifith/ para minhas funções, o
arquivo de tag fica sob o namespace minecraft/ . Isso ajuda a manter alguns dados
isolados do restante do jogo — quaisquer arquivos na pasta minecraft/ modificam a
funcionalidade do Minecraft, enquanto qualquer coisa em um namespace diferente cria
algo que pertence ao meu pacote de dados.
Dentro do load.json, podemos adicionar um array JSON que contém o nome da nossa
função load da seguinte forma:
json
12
3 { "valores": ["fennifith:animais/carga"] }
shell
dizer Olá, mundo! 1
Para invocar a tag "load" manualmente, você pode usar o comando /reload ou
digitar /function #minecraft:load (observe o símbolo # usado para especificar a tag).
E o evento "tick"...
Machine Translated by Google
Esteja ciente de que ao usar o evento tick, é muito fácil fazer coisas que causam
enormes quantidades de lag em seu jogo. Por exemplo, conectar isso à nossa função
spawn.mc anterior pode ter algumas consequências adversas ao convocar
aproximadamente 100 animais por segundo.
Agora, e se tentarmos adicionar um arquivo para o evento tick com o mesmo conteúdo?
Poderíamos adicionar um arquivo tick.json apontando para uma função fennifith:animals/
tick — e escrever um arquivo tick.mcfunction para que ele seja executado.
A janela de bate-papo se enche de mensagens "Olá, mundo"! Toda vez que a tag de
função tick é invocada (o jogo normalmente roda 20 ticks por segundo), ela adiciona uma nova
mensagem! Isso provavelmente não é algo que queremos fazer.
Poderia haver uma maneira de verificar algum tipo de condição antes de executar nossos
comandos? Por exemplo, se quisermos executar nosso comando say quando o jogador
estiver em um bloco específico...
Tente experimentar! Veja se você consegue encontrar um comando que faça isso — e
confira a próxima postagem desta série para a solução!
Conclusão
Se o seu pacote de dados não funcionou primeiro, tente - não se preocupe! Há muitas
etapas aqui, e o menor erro de digitação ou extravio fará com que o Minecraft ignore
completamente seu código. Se você está preso e não consegue encontrar o problema, a
discórdia Unicorn Utterances é um ótimo lugar para pedir ajuda!
Até agora, cobrimos os fundamentos dos pacotes de dados e como escrevê-los — mas há
muito mais para abordar. Em seguida, começaremos a escrever comportamento condicional
usando posições de bloco e seletores de entidade!
Machine Translated by Google
Eu uso o Visual Studio Code editor com a função language-mc extension by Arcensoth, que
fornece realce de sintaxe e preenchimento automático para meus comandos diretamente no
editor de texto. No entanto, existem muitas extensões semelhantes com recursos diferentes,
e outros editores de texto provavelmente também têm seus próprios plug-ins para fornecer
esse comportamento.
Este comando pode ser usado com um número indefinido de argumentos, o que
pode torná-lo confuso ao ler sua documentação — mas isso significa efetivamente
que você pode adicionar qualquer número de pré-condições a este comando.
Por exemplo:
shell
executar if block ~ ~ ~ air run diga "Você está parado em 1 ar!"
shell
parado
executar
no ar!"
a menos que o bloco ~ ~ ~ air run diga "Você não está 1
Você também pode alterar o identificador de bloco para procurar um tipo diferente
de bloco. Por exemplo, se o bloco ~ ~ ~ água garantiria que o jogador estivesse
na água.
Sintaxe da posição
Então, o que os tils (~ ~ ~) significam no comando anterior? Isso se refere à
posição atual (nos eixos X, Y e Z) do jogador que está executando o comando.
Existem algumas maneiras diferentes de escrever posições como essas no Minecraft,
que explicarei aqui:
Coordenadas absolutas
Coordenadas relativas
Machine Translated by Google
Essas posições também podem ser compensadas por um certo número de blocos
em qualquer direção, adicionando um número após o til. Por exemplo, ~2 ~-4 ~3
moverá 2 blocos horizontalmente a partir do eixo x do jogador, 4 blocos para
baixo no eixo y e 3 blocos horizontalmente no eixo z.
Nas seções a seguir, pode ser útil ter em mente que todo comando tem um
contexto específico no qual é executado. Esse contexto consiste em uma
posição no mundo e uma entidade selecionada que executa o comando.
Quando você digita um comando no chat de texto do Minecraft, a posição é a
sua localização atual no mundo e a entidade selecionada é o seu jogador.
Machine Translated by Google
shell
ancorados
executarposicionados
olhos ancorados
^ ^ ^4executar
executarinvocar
convocar
porco
porco
^^~^421 executar olhos
~~
shell 1
execute os olhos ancorados posicionados ^ ^ ^ 4 execute a função fennifith:animals/spawn
Para alinhar uma posição com a borda de um bloco, podemos usar outro
subcomando: /execute align xyz. Isso alinhará a posição do comando nos eixos
X, Y e Z. Você também pode omitir quaisquer eixos que não precisem de alinhamento,
portanto, alinhar x ou alinhar xz também funcionaria conforme o esperado.
Podemos usar isso para garantir que uma entidade convocada seja sempre
gerada em alinhamento com a grade do bloco e não entre as coordenadas do
bloco:
shell
1 executar alinhar xz executar convocar porco ~ ~ ~
Isso significa que, se você convocar uma entidade em 0 ~ 0, ela acabará no canto
do bloco em (0, 0). Para corrigir isso, você precisará corrigir o deslocamento
movendo-o 0,5 em cada eixo; ou seja, 0,5 ~ 0,5.
Machine Translated by Google
(0, 0)
(0,5, 0,5)
shell
1 execute align xz run summon pig ~0.5 ~ ~0.5
Seletores de entidade
Então descobrimos como usar a posição do jogador, mas como podemos nos referir a
outras entidades no mundo? Se você prestou atenção ao /kill
Machine Translated by Google
Aqui está uma lista de algumas outras variáveis de seletor que podemos usar:
E aqui estão algumas das maneiras pelas quais podemos aplicar os atributos de filtro:
Usando esses seletores, podemos usar @e[type=pig,sort=nearest,limit=3] para referenciar os três porcos
mais próximos do jogador que executa o comando.
E se usarmos /kill @a[type=pig]? Isso não selecionará nada — porque @a seleciona apenas
as entidades do jogador . Da mesma forma, @s[type=pig] também não selecionará nada, porque
@s se refere à entidade que executa o comando — que é você, uma entidade de type=player.
altere a entidade a que @s se refere em tudo o que executa. Vamos usar isso com
nosso comando /kill @e[type=pig] !
shell 1
kill @e[type=pig] execute
como @e[type=pig] execute kill @s 2
Uma observação importante sobre como esse recurso funciona é que, após
o subcomando as @a[type=pig] , ele executará os subcomandos a seguir
uma vez para cada entidade selecionada. Isso significa que ele está
executando individualmente kill @s uma vez para cada entidade do tipo=porco.
shell
executar como @e[type=pig] if block ~ ~ ~ air run kill @s 1
Você notará que isso está realmente afetando todos os porcos do mundo... a menos
que você fique debaixo d'água ou em um bloco de folhagem, caso em que não fará
nada. Isso ocorre porque, embora o comando as <entity> altere a entidade em
execução, ele não afeta a posição de execução do comando — ele ainda está em
execução no seu local.
shell
executar como @e[type=pig] em @s if block ~ ~ ~ air run 1 kill @s
Machine Translated by Google
Este comando primeiro seleciona todas as entidades @e[type=pig] , então - para cada
porco - muda a posição do comando para a posição de @s (a entidade selecionada).
Como resultado, a posição em ~ ~ ~ agora se refere à posição de @s.
Isso também pode ser usado com funções, como antes! No entanto, vou adicionar um
limit=5 ao nosso seletor de entidade aqui — caso contrário, ele pode gerar um número
crescente de entidades cada vez que for executado, o que pode causar lag em seu jogo se
executado repetidamente.
shell
fennifith:animals/spawn
execute como @e[type=pig,limit=5] em @s run function 1
seleção de raio
Os intervalos podem ser especificados colocando dois pontos (..) como o intervalo entre
dois números. Se um dos lados for deixado de fora, o intervalo será interpretado como
aberto e aceitará qualquer número nessa direção. Por si só, .. é um intervalo que inclui
todos os números, 5.. aceita qualquer número acima de 5, ..5 aceita qualquer número
abaixo de 5 e 1..5 aceita qualquer número entre 1 e 5.
Seleção de área
Os atributos [x=], [y=] e [z=] filtrarão as entidades por sua posição exata. No
entanto, como as entidades podem se mover para posições entre os blocos, suas
coordenadas geralmente não são números inteiros — portanto, é improvável que
esses filtros por si só selecionem quaisquer entidades.
No entanto, esses atributos podem ser combinados com [dx=], [dy=] e [dz=] para
selecionar uma faixa de valores nos eixos X, Y e Z. Por exemplo, [y=10,dy=20]
irá filtrar qualquer entidade com uma posição entre Y=10 e Y=30.
O uso de todos esses atributos juntos pode criar uma área de caixa para pesquisar
entidades dentro dela. Por exemplo, @e[x=1,y=2,z=3,dx=10,dy=20,dz=30] está
efetivamente criando uma caixa com 10 blocos de largura, 20 blocos de altura, 30 blocos
de profundidade, começando na posição (1, 2, 3).
(15, 6)
(5, 1)
x=5 x=15
(5, 1)
Solução
Você pode tentar isso com @e[type=pig] para ver quantas vezes ele imprime:
Concha
Machine Translated by Google
Conclusão
Até agora, começamos a usar a lógica condicional e cobrimos a maior parte da sintaxe que
você verá nos comandos do Minecraft.
Armazenando pontuações
Criando um placar
Podemos usar os subcomandos de objetivos /scoreboard para criar e modificar placares em
um mundo. Vamos tentar fazer um placar para rastrear o número de animais que cada
jogador gerou por meio de nosso pacote de dados.
Concha
Machine Translated by Google
O que é um objetivo?
A nomenclatura de "objetivo" e "placar" pode ser um ponto de confusão. Neste artigo, para
simplificar, eles podem ser considerados como dois nomes para a mesma coisa — mesmo
que tenham significados ligeiramente diferentes.
Convenções do placar
Os jogadores geralmente desejam ter vários pacotes de dados instalados em seu mundo
ao mesmo tempo. Como todos os placares operam globalmente no mundo, precisamos
garantir que os nomes de nossos placares não entrem em conflito com nenhum placar usado
por outros pacotes de dados.
Por exemplo, o que pode acontecer se dois pacotes de dados quiserem rastrear blocos
diferentes que o jogador extraiu? O primeiro pode criar um placar para blocksMined que
rastreia pedra, enquanto o segundo pode usar blocksMined para rastrear sujeira. No entanto,
ambos os pacotes de dados farão referência ao mesmo placar de blocksMined no mundo, o
que pode acabar rastreando tanto a pedra quanto a terra, misturando o comportamento de
ambos. Precisamos de uma maneira de separar as pontuações desses pacotes de dados e
evitar que entrem em conflito.
Machine Translated by Google
Para fazer isso, é comum "espaçar" os nomes do placar em seu pacote de dados
adicionando um determinado prefixo. Aqui, comecei meus nomes de placar com
fennifith.animals para indicar que eles pertencem ao meu pacote de dados.
Definindo valores
shell #
jogador
definir
atualnossa
("fennifith")
entrada2 de
# | placar
| modifique
1 # | use
o placar
a entrada
chamado
do
@s fennifith.animals_spawned
3 "fennifith.animals_spawned"
1 Entrada
# | |fennifith.animals_spawned
defina "1" como o valor destafennifith
entrada1 # | | jogadores do placar definidos
4
5 || |
6
shell #
do jogador
adiciona
atual
um2 número
# | | useao
"2"valor
comoatual
número
do placar
para somar
1 # | use
3 #a| entrada
|4
5 Entrada
jogadores
fennifith.animals_spawned
do placar adicionam @sfennifith
fennifith.animals_spawned
3 2
Nota: Tenha cuidado com a diferença entre /scoreboard objectivos add e /scoreboard
players add, pois eles são fáceis de confundir - eu até os confundi algumas vezes
enquanto escrevia este artigo! Os subcomandos de objetivos são usados
exclusivamente para criar ou remover placares inteiros, enquanto os subcomandos
dos jogadores podem modificar entradas específicas em placares existentes para
alterar seus valores.
Em certos casos, queremos armazenar valores que não sejam específicos do jogador,
mas que afetem todo o nosso pacote de dados. Por exemplo, podemos querer rastrear o
número total de animais gerados em nosso mundo, além do número de animais de cada
jogador.
Podemos fazer isso referenciando um jogador inexistente. O placar incluirá uma entrada
para qualquer entidade ou nome, independentemente de ele realmente existir em nosso
mundo — portanto, usando um nome que nunca existirá, podemos referenciá-lo
globalmente de qualquer lugar em nosso código.
$global 4
Machine Translated by Google
Se não incluíssemos o $ antes do nome da variável neste trecho, nosso código ainda
funcionaria! No entanto, o que aconteceria se um jogador registrasse o nome de usuário global
e tentasse usar nosso pacote de dados? A pontuação deles usaria a mesma entrada que
nossa variável global e ambos tentariam armazenar seus valores no mesmo lugar — fazendo
com que qualquer lógica que escrevêssemos parecesse quebrada.
Como o $ é um caractere de nome de usuário inválido, podemos usá-lo com segurança para
valores globais sem essa possibilidade.
O subcomando execute store pode ser usado para designar um local para armazenar esses
valores, como uma entrada no placar.
Por exemplo, este comando irá copiar o valor da nossa variável $global para $global_2...
shell #
coloque-o
armazena
em "$global_2"
o resultado
# do
|34comando
# | executar
1 2 #loja
|
resultado pontuação $global_2 5
fennifith.animals_spawned executar placar
Entradajogadores
fennifith.animals_spawned
| execute
obter um
$global
comando
fennifith.animals_spawned
quefennifith
retorne3o valor de "$global" |
|
$global 4
$global_2 4
Embora este exemplo copie com sucesso nossa variável $global para $global_2,
há uma maneira um pouco mais curta de conseguir isso usando
Machine Translated by Google
operações de placar...
Pode nem sempre ser óbvio qual valor um comando retorna como seu
"resultado", já que às vezes é diferente do que é impresso no chat do jogo.
No entanto, todos os comandos podem ser consultados no wiki do Minecraft para ver
quais valores e comportamento eles devem fornecer.
Operações do placar
Se quisermos definir um valor de placar com base em outra entrada, podemos usar o
subcomando de operação de jogadores de placar para especificar um estado conceitual
de existência entre os dois valores.
Por exemplo, para tornar nossa entrada $global nos exemplos anteriores igual à entrada
fennifith , podemos usar o seguinte comando:
shell 1
# escreve o resultado *na* entrada $global # | definir os placares
placariguais
jogadores
entreoperação
si 2 3 # | |$global
obtenhafennifith.animals_spawned
o valor *de* @s # | | 4 5 =
@s fennifith.animals_spawned
fennifith 3 Entrada fennifith.animals_spawned
|
$global 3
$global_2 4
operações matemáticas
shell #
valor existente
grava o resultado
2 *na* entrada $global 1 # | adicionar ao
Machine Translated by Google
$global 6
$global_2 4
shell #
placardefina
definem
a variável
$ divisor
"$2divisor"
fennifith.animals_spawned
para "2" 1 jogadores2do
$divisor 2
$global 3
$global_2 4
Isso resulta em $global, que anteriormente era 6, sendo dividido por 2 — como
tal, seu valor agora é 3.
Aqui está uma lista de todas as outras operações que podem ser executadas
com este comando. lhs denota o lado esquerdo da operação (a entrada do
placar sendo gravada), enquanto rhs denota o lado direito.
Em rhs, pode ser necessário adicionar um atributo limit=1 para limitar o número de
entidades que ele pode selecionar.
Exibindo pontuações
Para ver quais pontuações são aplicadas a qualquer entidade, existem alguns
métodos de exibição dos valores do placar para os jogadores.
Exibição no jogo
O subcomando setdisplay dos objetivos /scoreboard pode ser usado para definir um placar
específico a ser exibido em parte da IU. Por exemplo, /scoreboard objetivos setdisplay sidebar
fennifith.animals_spawned mostrará todos os jogadores e o número de animais que eles
geraram em uma barra lateral à direita da tela.
lista, que mostra as pontuações ao lado dos nomes dos jogadores no menu de guias (em
Multijogador apenas)
abaixoNome, que exibe a pontuação de um jogador abaixo de sua etiqueta de nome
comando /tellraw
O comando /tellraw pode ser usado para enviar uma mensagem formatada no chat do
jogo. Possui uma ampla variedade de usos e opções de formatação, uma das quais
pode incorporar um valor de placar na mensagem impressa.
/tellraw aceita uma matriz de argumentos que concatena para formar sua mensagem.
Para referenciar uma pontuação neste array, podemos escrever um elemento com a
estrutura {"score":{"name":"<selector>","objective":" <objective>"}}. Por exemplo, aqui está
um comando que imprime o número de animais que o jogador (@s) gerou:
shell
tellraw @s ["Você convocou ",{"pontuação": 1
{"name":"@s","objective":"fennifith.animals_spawned"}}," animais!"]
No artigo anterior, você deve ter notado que /execute tem um subcomando if
score adicional. Podemos usar isso para verificar nossos valores de placar como uma
condição!
Machine Translated by Google
shell
1 2 # |verifica
se a pontuação
uma condição de pontuação...
"fennifith.animals_spawned"
| | é maior que... 3 4 # |do | | ajogador...
pontuação # "fennifith.berries_eaten" do jogador...
frutinhas!"
# | | | 5fennifith.berries_eaten
6 # | | | execute if score run
@stellraw
fennifith.animals_spawned
@s "Você gerou mais > animais
@s 7 do que
shell
para# aseentrada
esta condição
do jogadorde pontuação
atual em 2 for válida... 1 # |
corresponder
"fennifith.animals_spawned"...
a "0"... # | | | envie uma# mensagem
| | se seu valor
ao
jogador! # | | | executar se pontuação @s
3 fennifith.animals_spawned corresponder a 0
4
5 |
6
O que acontece se acessarmos uma entrada do placar que não existe? Normalmente, o
jogo trata entradas de placar inexistentes como "0" — o comando /scoreboard players add ,
por exemplo, aumentará qualquer pontuação inexistente para "1".
shell #
verifique
verifique
se $inexistente
se $inexistente
>= 0 #<= | |0se1 nenhuma
2#|
for verdadeira, a pontuação não pode
# | | execute a menos que marque existir 34
$ inexistente
corresponde
5 fennifith.animals_spawned
aamenos
0 .. execute
que marque
tellraw $@scorresponde
inexistente
"A pontuação
fennifith.animals_spawned
..0 de $ inexistente em
fennifith.animals_spawned
| não existe!"
Machine Translated by Google
Existe outra maneira um pouco mais simples de verificar isso, que aproveita o valor máximo
que o jogo pode armazenar em um placar. Os placares do Minecraft são limitados pelo
tamanho inteiro mínimo/máximo de Java de 32 bits, ou um intervalo de -2147483648 a
2147483647. Podemos escrever isso em uma única condição para verificar se a pontuação
está dentro desse intervalo.
shell #
contrário,
verifica
a pontuação
se a pontuação
não pode
estáexistir
dentro2 dos
# | 3limites
executar,
do inteiro
a menos1 do
que
Java
marque
# | caso
$
inexistente 4 partidas fennifith.animals_spawned -2147483648..2147483647 execute
não existe!"
tellraw @s "A pontuação para $ inexistente em fennifith.animals_spawned
|
Estatísticas de rastreamento
Os placares também podem ser criados para rastrear as estatísticas do jogo, como o número
de blocos minerados ou o número de vezes que um item foi usado. Eles podem ser
encontrados no jogo abrindo o menu de pausa em qualquer mundo ou servidor e clicando no
botão "Estatísticas" - e os nomes usados para fazer referência a eles podem ser encontrados
no wiki do Minecraft.
shell 1
objetivos do placar adicionar fennifith.animals_carrot_stick
minecraft.used:minecraft.carrot_on_a_stick
Embora este placar seja atualizado quando sua estatística mudar, suas entradas também
podem ser alteradas individualmente pelo pacote de dados, portanto, pode não refletir
necessariamente o mesmo valor que a estatística em todos os momentos.
Por exemplo, podemos criar o placar acima para rastrear o número de vezes que uma
"cenoura no palito" foi usada. Se definirmos nossa entrada como 0 nesse placar, seu valor
permanecerá em 0, independentemente da estatística do jogador para esse item. Se o jogador
usar a "Cenoura no Palito" novamente, a estatística e o placar aumentarão em 1.
Podemos usar esse comportamento em nossa função tick.mc (que é executada em todos
os ticks do jogo) para detectar quando um jogador usou a cenoura no palito. Vamos primeiro
definir o valor para todos os jogadores como 0 e, em seguida, verificar o placar em cada tick
para ver se ele aumentou. Em caso afirmativo, sabemos que o item foi usado e podemos
redefini-lo para 0 para detectá-lo novamente.
Para verificar o valor de cada jogador em nosso placar, podemos usar o subcomando /
execute if score junto com um intervalo de números para executar condicionalmente nossa
função se o placar tiver um valor >= 1.
1. Primeiro precisamos criar nosso placar quando nosso pacote de dados for carregado
pelo jogo — então colocaremos a seguinte linha em nossa função load.mc:
shell #
data/fennifith/functions/animals/load.mcfunction 1 2 3
shell #
data/fennifith/functions/animals/tick.mcfunction 1 2 3 4 5 6 7
shell #
placardefine
de jogadores
a pontuação
definido
"carrot_stick"
@a 2 fennifith.animals_carrot_stick
para todos os jogadores como
0 01
Exemplos de
funcionalidade de placar
Aplicando valores únicos a cada entidade em um seletor
Se tivermos um seletor de entidade, como @e[type=pig], podemos atribuir um valor de placar
diferente para cada entidade. Isso pode ser feito de forma concisa usando o subcomando
execute store result ...
shell 1
# cria um objetivo fictício para armazenar IDs exclusivos de entidade de porco 2
3
objetivos do placar adicionar manequim fennifith.animals_id
Machine Translated by Google
Para cada entidade porco, o comando scoreboard add incrementa nossa variável
$counter em 1. Convenientemente, o comando add também retorna o valor total de seu
placar como resultado, então podemos usar isso para armazenar o valor incrementado
como pontuação da entidade porco.
Para fazer isso, podemos usar o seletor @e[type=pig] para selecionar cada entidade
suína do jogo e armazenar o resultado em $max fennifith.animals_id.
Dica
Solução
Conclusão
Este artigo cobriu a maioria dos comandos do placar que podemos usar, mas há muito
mais que pode ser feito com eles. Eles podem ser usados em todas as funções para
escrever praticamente qualquer lógica numérica; tente experimentar para ver o que você
pode realizar!