LogoyStore

Hologramas

Aprenda a criar e gerenciar hologramas pela HologramFactory do yPlugins.

A biblioteca de hologramas do yPlugins oferece uma interface comum para criar textos e itens flutuantes. O acesso é feito pela HologramFactory, e cada holograma criado é manipulado pela interface Hologram.

As interfaces públicas estão no pacote:

br.com.ystoreplugins.lib.helper.entity.hologram

Preparação

Adicione o yPlugins ao seu projeto conforme o guia de API dos Plugins. Se o seu plugin é carregado pelo loader, consulte também Desenvolva com o yPlugins.

Obtendo a factory

A instância é disponibilizada pelo BukkitBootstrap:

import br.com.ystoreplugins.bootstrap.BukkitBootstrap;
import br.com.ystoreplugins.lib.helper.entity.hologram.HologramFactory;

HologramFactory factory = BukkitBootstrap.get().getHologramFactory();

if (factory == null) {
    // A factory ainda não está disponível. Adie a criação dos hologramas.
    return;
}

Dentro de uma classe que estende BukkitPlugin, o acesso também pode ser feito por getLoader():

HologramFactory factory = getLoader().getHologramFactory();

A inicialização das factories é agendada para 1 tick após o onEnable() do yPlugins. Obtenha a factory após essa etapa e verifique se ela está disponível antes de criar hologramas.

Métodos da HologramFactory

MétodoRetornoDescrição
getHolograms()List<Hologram>Consulta os hologramas registrados na factory.
spawnHologram(Plugin plugin, Location location)HologramCria um holograma na localização informada. As linhas são adicionadas ao objeto retornado.
close(Plugin plugin)voidExecuta a limpeza dos hologramas gerenciados pela factory.

O parâmetro plugin deve ser uma instância de org.bukkit.plugin.Plugin. Para plugins que estendem BukkitPlugin, passe getLoader().

Criando um holograma

O exemplo abaixo recebe a factory já obtida, o plugin Bukkit e a localização de criação:

import br.com.ystoreplugins.lib.helper.entity.hologram.Hologram;
import br.com.ystoreplugins.lib.helper.entity.hologram.HologramFactory;
import org.bukkit.Location;
import org.bukkit.plugin.Plugin;

import java.util.Arrays;
import java.util.HashMap;

public Hologram criarHolograma(HologramFactory factory, Plugin plugin, Location location) {
    Hologram hologram = factory.spawnHologram(plugin, location.clone());

    HashMap<String, String> substituicoes = new HashMap<>();
    substituicoes.put("{servidor}", "Survival");
    substituicoes.put("{online}", "10");

    hologram.setLines(Arrays.asList(
        "§6Bem-vindo ao {servidor}!",
        "§7Jogadores online: §f{online}"
    ), substituicoes);

    return hologram;
}

Em um BukkitPlugin, a chamada fica assim:

Hologram hologram = criarHolograma(factory, getLoader(), location);

Guarde a referência retornada para atualizar ou remover esse holograma posteriormente.

Linhas de texto e itens

Definindo e atualizando linhas

Os métodos recebem uma lista de linhas e um HashMap<String, String> com as substituições de texto. Use um mapa vazio quando não houver substituições.

void setLines(List<String> lines, HashMap<String, String> toReplace);

void updateLines(List<String> lines, HashMap<String, String> toReplace);

void setLines(List<String> lines, HashMap<String, String> toReplace,
              HashMap<String, ItemStack> toReplaceItem);

void updateLines(List<String> lines, HashMap<String, String> toReplace,
                 HashMap<String, ItemStack> toReplaceItem);

Use setLines(...) na montagem inicial e updateLines(...) para atualizar as linhas existentes. Para manter a compatibilidade entre os provedores, atualize preservando a quantidade e o tipo das linhas.

Exemplo de atualização do holograma anterior:

HashMap<String, String> substituicoes = new HashMap<>();
substituicoes.put("{servidor}", "Survival");
substituicoes.put("{online}", "25");

hologram.updateLines(Arrays.asList(
    "§6Bem-vindo ao {servidor}!",
    "§7Jogadores online: §f{online}"
), substituicoes);

As substituições são aplicadas ao chamar o método. Para refletir novos valores, chame updateLines(...) novamente com os dados atualizados.

Linhas especiais

Além do texto comum, as listas de linhas aceitam estes prefixos:

FormatoDescrição
[item]DIAMONDExibe um item pelo material informado.
[item]premioUsa o ItemStack da chave premio no mapa toReplaceItem.
[head]texturaExibe uma cabeça com a textura informada no lugar de textura.

Exemplo de montagem de um novo holograma com um item personalizado:

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

Hologram hologramPremio = factory.spawnHologram(plugin, location.clone());

HashMap<String, String> substituicoes = new HashMap<>();
substituicoes.put("{premio}", "Diamante");

HashMap<String, ItemStack> itens = new HashMap<>();
itens.put("premio", new ItemStack(Material.DIAMOND));

hologramPremio.setLines(Arrays.asList(
    "§ePrêmio: §f{premio}",
    "[item]premio"
), substituicoes, itens);

Para adicionar linhas individualmente, use:

hologram.appendTextLine("§aClique no NPC para continuar!");
hologram.appendItemLine(new ItemStack(Material.EMERALD));

Métodos do Hologram

Além das sobrecargas de setLines(...) e updateLines(...), a interface oferece:

MétodoRetornoDescrição
appendTextLine(String line)voidAdiciona uma linha de texto.
appendItemLine(ItemStack line)voidAdiciona uma linha de item.
setVisibileByDefault(boolean visible)voidDefine a visibilidade padrão do holograma.
showTo(Player player)voidExibe o holograma para o jogador informado.
isDeleted()booleanInforma se o holograma foi removido.
delete()voidRemove o holograma.
getLocation()LocationRetorna a localização atual.
teleport(Location location)voidMove o holograma para outra localização.
getInitialSpawn()LocationRetorna a localização de criação.

Visibilidade

hologram.setVisibileByDefault(false);
hologram.showTo(player);

O nome do método na API é setVisibileByDefault, com essa grafia.

Localização

Location atual = hologram.getLocation();
Location origem = hologram.getInitialSpawn().clone();

hologram.teleport(atual.clone().add(0, 1, 0));

Remoção e ciclo de vida

Remova os hologramas criados pelo seu plugin quando eles deixarem de ser necessários ou durante o onDisable():

if (hologram != null && !hologram.isDeleted()) {
    hologram.delete();
    hologram = null;
}

getHolograms() consulta a factory compartilhada e não representa apenas os hologramas do seu plugin. Para gerenciar seus próprios hologramas, mantenha as referências retornadas por spawnHologram(...) e consulte isDeleted() quando necessário.

O loader chama close(Plugin) no seu encerramento. Essa operação pode remover os hologramas da factory inteira; para a limpeza de um plugin individual, use delete() nas referências que ele criou.

Nesta página