Ir para conteúdo

SkyCrates - Caixas


zAth

Posts Recomendados

Info

 

» SkyCrates é o plugin de caixas mais fácil de configurar que tem por ai, só pode ser configurado in-game;

» Broadcast configurável do prémio com json;

» Pode criar quantos tipos de caixas quiser, quantas caixas quiser e quantas animações quiser porém prémios só 28 por caixa;

» Possibilidade de criarem vossas próprias animações SE souberem mexer com bukkit (tutorial em baixo);

 

» Para apagar uma CAIXA, destrua segurando uma blaze rod, para apagar um TIPO DE CAIXA edite a caixa e clique no item para destruir;

 

Comandos

 

» /crate create - skycrates.command.create cria um tipo de caixa.

 

» /crate edit - skycrates.command.edit edita um tipo de caixa.

 

» /crate give - skycrates.command.give da uma chave.

 

» /crate locations -skycrates.command.locations vê as localizações de todas as caixas e o seu tipo.

 

» /crate set - skycrates.command.set seta um bloco como caixa.

 

» /crate reload- skycrates.command.reload recarrega as configurações.

 

» skycrates.admin - editar e apagar uma caixa ao clicar com blaze rod.

 

Imagens

 

https://streamable.com/kehku

https://streamable.com/kjvbu

https://streamable.com/kiwbc

https://streamable.com/45nty

https://streamable.com/yrn76

 

Dependências

» Spigot 1.8 ( feito nessa versão, outras poderão, ou não funcionar )

» ProtocolLib

 

DOWNLOAD

 

SOURCE

 

Atualizações

 

 

 

 

 

» Adicionado comando para recarregar as configurações

» Caixas que não precisam de chave

» Arrumado bug ao alterar o comando de um prémio

» Agora os blocos não irão ser alterados para enderchest ao serem setados como caixa

» Adicionado broadcast com json

» Arrumado bug onde os jogadores podiam dropar as caixas ao as abrir para que não as perdessem, obrigado por reportar [member=SaitO_M]

 


 
 

TODO

» Hologramas nas caixas - ?;

 

Dev

 

 

 

 


» Eventos

 

 


 



@EventHandler
    public void onCrateOpen(CrateOpenEvent event) {
        Crate crate = event.getCrate(); // caixa
        boolean isOpening = crate.isOccupied(); // esta sendo aberta
        Location location = crate.getLocation(); // loc da caixa

        if (isOpening) {
            AbstractAnimation abstractAnimation = crate.getAnimation(); // animação
            abstractAnimation.end(); // finaliza a abertura da caixa
        }
    }

    @EventHandler
    public void onCrateWin(CrateWinEvent event) {
        Prize prize = event.getPrize(); // prêmio
        ItemStack itemStack = prize.getItemStack(); // item que representa o premio
        String cmd = prize.getCmd(); // comando do premio

        if(prize.getType() == Prize.TYPE.ITEM)
            System.out.println("Ganhou item " + itemStack.toString());
        else
            System.out.println("Ganhou comando " + cmd);
    }

 
 


 

» Própria animação
 

 


» Main
 



package me.zath.skycratesquickanimation;
/*
 * MC 
 * Created by zAth
 */

import me.zath.skycrates.SkyCrates;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class SkyCratesQuickAnimation extends JavaPlugin implements Listener {

    private static SkyCratesQuickAnimation skyCratesQuickAnimation; // instanciando a main

    @Override
    public void onEnable() {
        skyCratesQuickAnimation = this;

        if (getServer().getPluginManager().getPlugin("SkyCrates") == null) {
            Bukkit.getLogger().severe("SkyCrates não foi encontrado.");
            return;
        }

        SkyCrates.getSkyCrates().getCrateManager().registerAnimation(QuickAnimation.class); // registrando a animação
        getServer().getPluginManager().registerEvents(this, this);

        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        Bukkit.getConsoleSender().sendMessage("§6" + getDescription().getName() + " §8v.§6" + getDescription().getVersion() + " §8de§6 "
            + getDescription().getAuthors() + " §2Ativado");
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
    }

    @Override
    public void onDisable() {
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        Bukkit.getConsoleSender().sendMessage("§6" + getDescription().getName() + " §8v.§6" + getDescription().getVersion() + " §8de§6 "
            + getDescription().getAuthors() + " §4Desativado");
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        HandlerList.unregisterAll();
    }

    public static SkyCratesQuickAnimation getSkyCratesQuickAnimation() {
        return skyCratesQuickAnimation;
    }

    @EventHandler
    public void onItemPickup(PlayerPickupItemEvent event) { // cancelando o evento
        // nossa animação vai dropar o prémio, para que não seja roubado temos que cancelar o evento
        // para sabermos que é um prémio iremos usar a metadata dele
        if (event.getItem().hasMetadata("quickcrate"))
            event.setCancelled(true);
    }

}

» Animação

 

 

 

 

 

 

 

 

 

 

 



package me.zath.skycratesquickanimation;
/*
 * MC 
 * Created by zAth
 */

import me.zath.skycrates.SkyCrates;
import me.zath.skycrates.objects.Crate;
import me.zath.skycrates.objects.animations.AbstractAnimation;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;

public class QuickAnimation extends AbstractAnimation { // toda animação precisa extender AbstractAnimation

    public QuickAnimation(Crate crate) { // precisa ter um constructor, deixe ele somente com super(crate)
        super(crate);
    }

    @Override
    public void start() { // este método será chamado quando a animação começar
        prize = crate.getCrateType().getRandomPrize(); // pegando um prémio randômico

        Entity entity = null;
        if (!crate.getCrateType().isVirtual()) { // se a caixa necessita de uma chave
            String itemStackName = prize.getItemStack().hasItemMeta() && prize.getItemStack().getItemMeta().hasDisplayName()
                ? prize.getItemStack().getItemMeta().getDisplayName() : SkyCrates.getSkyCrates().getUtils().prettifyText(prize.getItemStack().getType().name());
            // pegando o nome do item se o tiver, se não usaremos uma versão mais bonita do nome do material

            entity = crate.getLocation().getWorld().dropItem(crate.getLocation().clone().add(0.5, 1, 0.5), prize.getItemStack());
            // spawnamos o prémio em cima da caixa            
            entity.setVelocity(new Vector(0, 0.2, 0));
            // jogamos ela um pouco para cima para a animar
            entity.setCustomName(itemStackName);
            entity.setCustomNameVisible(true);
            // setamos e deixamos o nome do prémio visivel
            entity.setMetadata("quickcrate", new FixedMetadataValue(SkyCratesQuickAnimation.getSkyCratesQuickAnimation(), true));
            // aqui adicionamos a metadata "quickcrate" para que ninguém possa apanhar o item
            if (crate.getLocation().getBlock().getType() == Material.CHEST || crate.getLocation().getBlock().getType() == Material.ENDER_CHEST
                || crate.getLocation().getBlock().getType() == Material.TRAPPED_CHEST) {
                // verificamos se é algum tipo de bau, para abrirmos o baú
                SkyCrates.getSkyCrates().getUtils().changeChestState(crate.getLocation(), true);
            }
        }

        final Entity finalEntity = entity;
        new BukkitRunnable() {
            @Override
            public void run() {
                // passado 5 segundos
                if (!crate.getCrateType().isVirtual()) { // se a caixa necessita de uma chave
                    if (finalEntity != null) { // se existe um item
                        finalEntity.remove(); // removemos o item
                    }

                    if (crate.getLocation().getBlock().getType() == Material.CHEST || crate.getLocation().getBlock().getType() == Material.ENDER_CHEST
                        || crate.getLocation().getBlock().getType() == Material.TRAPPED_CHEST) {
                        // verificamos se é algum tipo de bau, para fecharmos o baú
                        SkyCrates.getSkyCrates().getUtils().changeChestState(crate.getLocation(), false);
                    }
                }
                end(); // terminamos a animação, TODA animação precisa chamar o end() no término da mesma
            }
        }.runTaskLater(SkyCratesQuickAnimation.getSkyCratesQuickAnimation(), 5 * 20);
    }

    @Override
    public void run() { // este método será chamado em um timer, não iremos usar nenhum nesta animação
        ;
    }

}

» Plugin.yml

 

 

 

 

 

 

 

 

 



name: SkyCratesQuickAnimation
version: 1.0.0
author: zAth
main: me.zath.skycratesquickanimation.SkyCratesQuickAnimation
softdepend: [SkyCrates] # IMPORTANTE, precisa colocar isso para que a sua animação carregue DEPOIS do SkyCrates

» Resultado - https://streamable.com/cf744
» Download - http://www.mediafire.com/file/5cnnyu6y4jcnqcl/SkyCratesQuickAnimation.jar

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

 

1 sem -qq

 

@topic 

parabens carai top 

 

Kct mlk rápido :o

 

 

Nice esse plugin que eu precisava pra usar no meu sv

 

Cara Muito bom irei usar 

 

Ótimo plugin, irei usar hehe

 

Belo plugin ...

Boa sorte com o projeto ta foda d+

 

Aí sim, parabéns!

 

Ótimo plugin

 

Bom plugin, como sempre free.

Parabéns.

Obrigado a todos :D

 

 

Esse plugin, me lembra do CrazyCrates, é igual

Afinal, é um plugin de caixa né xD esse é mais fácil de configurar e facilmente se faz addons para ter mais animações, eu depois mostro como.

 

 

Muito bom plugin, muitos parabéns! Tenho uma sugestão: Adicionar o bloco da crate. 

 

 Plugin está excelente. Obrigado por partilhar até a source o.O

Como assim bloco da crate?

Vlw kkj

 

 

Eu to vendo mal ou isso é free?

 

AAAAAA

é isso mesmo :D

 

@edit

» Arrumado bug ao alterar o comando de um prémio
» Agora os blocos não irão ser alterados para enderchest ao serem setados como caixa
» Adicionado broadcast com json
 
Editado por zAth
Link para o comentário
Compartilhar em outros sites

acho que os comandos poderiam ser br mais assim tbm server muito top parabéns 

Eu não gosto de misturar br no java porque ele é todo inglês ae não faz muito sentido e quem sabe algum dia eu posto o plugin no spigot rsrs

 

 

 

Caraca mano, muito topzão, estou já baixando e.e

 

e.e :D

 

 

AI sim, namoral, curti, parabéns, fodaun

QUE mike curtiu meu pl *-*

 

 

@topic

Começei trabalhando em caixas que não precisa de chave, tipo caixa misteriosa de muitos servers que tem ae.

Coloquei no tópico como criar vossas próprias animações SE souberem programar como também uma animação de exemplo, depois eu colocarei a animação para baixarem. https://streamable.com/cf744

 

Dev

 

 

» Eventos

 

 

 

@EventHandler
    public void onCrateOpen(CrateOpenEvent event) {
        Crate crate = event.getCrate(); // caixa
        boolean isOpening = crate.isOccupied(); // esta sendo aberta
        Location location = crate.getLocation(); // loc da caixa, null se for caixa virtual (WIP)

        if (isOpening && location != null) {
            AbstractAnimation abstractAnimation = crate.getAnimation(); // animação
            abstractAnimation.end(); // finaliza a abertura da caixa
        }
    }

    @EventHandler
    public void onCrateWin(CrateWinEvent event) {
        Prize prize = event.getPrize(); // prêmio
        ItemStack itemStack = prize.getItemStack(); // item que representa o premio
        String cmd = prize.getCmd(); // comando do premio

        if(prize.getType() == Prize.TYPE.ITEM)
            System.out.println("Ganhou item " + itemStack.toString());
        else
            System.out.println("Ganhou comando " + cmd);
    }

 

 

 

 

 

 

» Própria animação

 

 

 

» Main

 

package me.zath.skycratesquickanimation;
/*
 * MC 
 * Created by zAth
 */

import me.zath.skycrates.SkyCrates;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class SkyCratesQuickAnimation extends JavaPlugin implements Listener {

    private static SkyCratesQuickAnimation skyCratesQuickAnimation; // instanciando a main

    @Override
    public void onEnable() {
        skyCratesQuickAnimation = this;

        if (getServer().getPluginManager().getPlugin("SkyCrates") == null) {
            Bukkit.getLogger().severe("SkyCrates não foi encontrado.");
            return;
        }

        SkyCrates.getSkyCrates().getCrateManager().registerAnimation(QuickAnimation.class); // registrando a animação
        getServer().getPluginManager().registerEvents(this, this);

        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        Bukkit.getConsoleSender().sendMessage("§6" + getDescription().getName() + " §8v.§6" + getDescription().getVersion() + " §8de§6 "
            + getDescription().getAuthors() + " §2Ativado");
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
    }

    @Override
    public void onDisable() {
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        Bukkit.getConsoleSender().sendMessage("§6" + getDescription().getName() + " §8v.§6" + getDescription().getVersion() + " §8de§6 "
            + getDescription().getAuthors() + " §4Desativado");
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        HandlerList.unregisterAll();
    }

    public static SkyCratesQuickAnimation getSkyCratesQuickAnimation() {
        return skyCratesQuickAnimation;
    }

    @EventHandler
    public void onItemPickup(PlayerPickupItemEvent event) { // cancelando o evento
        // nossa animação vai dropar o prémio, para que não seja roubado temos que cancelar o evento
        // para sabermos que é um prémio iremos usar a metadata dele
        if (event.getItem().hasMetadata("quickcrate"))
            event.setCancelled(true);
    }

}

» Animação

 

 

 

 

package me.zath.skycratesquickanimation;
/*
 * MC 
 * Created by zAth
 */

import me.zath.skycrates.SkyCrates;
import me.zath.skycrates.objects.Crate;
import me.zath.skycrates.objects.animations.AbstractAnimation;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;

public class QuickAnimation extends AbstractAnimation { // toda animação precisa extender AbstractAnimation

    public QuickAnimation(Crate crate) { // precisa ter um constructor, deixe ele somente com super(crate)
        super(crate);
    }

    @Override
    public void start() { // este método será chamado quando a animação começar
        prize = crate.getCrateType().getRandomPrize(); // pegando um prémio randômico

        Entity entity = null;
        if (!crate.getCrateType().isVirtual()) { // se a caixa necessita de uma chave
            String itemStackName = prize.getItemStack().hasItemMeta() && prize.getItemStack().getItemMeta().hasDisplayName()
                ? prize.getItemStack().getItemMeta().getDisplayName() : SkyCrates.getSkyCrates().getUtils().prettifyText(prize.getItemStack().getType().name());
            // pegando o nome do item se o tiver, se não usaremos uma versão mais bonita do nome do material

            entity = crate.getLocation().getWorld().dropItem(crate.getLocation().clone().add(0.5, 1, 0.5), prize.getItemStack());
            // spawnamos o prémio em cima da caixa            
            entity.setVelocity(new Vector(0, 0.2, 0));
            // jogamos ela um pouco para cima para a animar
            entity.setCustomName(itemStackName);
            entity.setCustomNameVisible(true);
            // setamos e deixamos o nome do prémio visivel
            entity.setMetadata("quickcrate", new FixedMetadataValue(SkyCratesQuickAnimation.getSkyCratesQuickAnimation(), true));
            // aqui adicionamos a metadata "quickcrate" para que ninguém possa apanhar o item
            if (crate.getLocation().getBlock().getType() == Material.CHEST || crate.getLocation().getBlock().getType() == Material.ENDER_CHEST
                || crate.getLocation().getBlock().getType() == Material.TRAPPED_CHEST) {
                // verificamos se é algum tipo de bau, para abrirmos o baú
                SkyCrates.getSkyCrates().getUtils().changeChestState(crate.getLocation(), true);
            }
        }

        final Entity finalEntity = entity;
        new BukkitRunnable() {
            @Override
            public void run() {
                // passado 5 segundos
                if (!crate.getCrateType().isVirtual()) { // se a caixa necessita de uma chave
                    if (finalEntity != null) { // se existe um item
                        finalEntity.remove(); // removemos o item
                    }

                    if (crate.getLocation().getBlock().getType() == Material.CHEST || crate.getLocation().getBlock().getType() == Material.ENDER_CHEST
                        || crate.getLocation().getBlock().getType() == Material.TRAPPED_CHEST) {
                        // verificamos se é algum tipo de bau, para fecharmos o baú
                        SkyCrates.getSkyCrates().getUtils().changeChestState(crate.getLocation(), false);
                    }
                }
                end(); // terminamos a animação, TODA animação precisa chamar o end() no término da mesma
            }
        }.runTaskLater(SkyCratesQuickAnimation.getSkyCratesQuickAnimation(), 5 * 20);
    }

    @Override
    public void run() { // este método será chamado em um timer, não iremos usar nenhum nesta animação
        ;
    }

}

» Plugin.yml

 

 

 

name: SkyCratesQuickAnimation
version: 1.0.0
author: zAth
main: me.zath.skycratesquickanimation.SkyCratesQuickAnimation
softdepend: [SkyCrates] # IMPORTANTE, precisa colocar isso para que a sua animação carregue DEPOIS do SkyCrates

» Resultado - https://streamable.com/cf744

» Download - http://www.mediafire.com/file/5cnnyu6y4jcnqcl/SkyCratesQuickAnimation.jar

 

 

 

 

 

 

@edit

Atualizações

» Caixas que não precisam de chave

https://streamable.com/yrn76

Editado por zAth
Link para o comentário
Compartilhar em outros sites

Eu não gosto de misturar br no java porque ele é todo inglês ae não faz muito sentido e quem sabe algum dia eu posto o plugin no spigot rsrs

 

 

e.e :D

 

 

QUE mike curtiu meu pl *-*

 

 

@topic

Começei trabalhando em caixas que não precisa de chave, tipo caixa misteriosa de muitos servers que tem ae.

Coloquei no tópico como criar vossas próprias animações SE souberem programar como também uma animação de exemplo, depois eu colocarei a animação para baixarem. https://streamable.com/cf744

 

Dev

 

 

» Eventos

 

 

 

@EventHandler
    public void onCrateOpen(CrateOpenEvent event) {
        Crate crate = event.getCrate(); // caixa
        boolean isOpening = crate.isOccupied(); // esta sendo aberta
        Location location = crate.getLocation(); // loc da caixa, null se for caixa virtual (WIP)

        if (isOpening && location != null) {
            AbstractAnimation abstractAnimation = crate.getAnimation(); // animação
            abstractAnimation.end(); // finaliza a abertura da caixa
        }
    }

    @EventHandler
    public void onCrateWin(CrateWinEvent event) {
        Prize prize = event.getPrize(); // prêmio
        ItemStack itemStack = prize.getItemStack(); // item que representa o premio
        String cmd = prize.getCmd(); // comando do premio

        if(prize.getType() == Prize.TYPE.ITEM)
            System.out.println("Ganhou item " + itemStack.toString());
        else
            System.out.println("Ganhou comando " + cmd);
    }

 

 

 

 

 

 

» Própria animação

 

 

 

» Main

 

package me.zath.skycratesquickanimation;
/*
 * MC 
 * Created by zAth
 */

import me.zath.skycrates.SkyCrates;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class SkyCratesQuickAnimation extends JavaPlugin implements Listener {

    private static SkyCratesQuickAnimation skyCratesQuickAnimation; // instanciando a main

    @Override
    public void onEnable() {
        skyCratesQuickAnimation = this;

        if (getServer().getPluginManager().getPlugin("SkyCrates") == null) {
            Bukkit.getLogger().severe("SkyCrates não foi encontrado.");
            return;
        }

        SkyCrates.getSkyCrates().getCrateManager().registerAnimation(QuickAnimation.class); // registrando a animação
        getServer().getPluginManager().registerEvents(this, this);

        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        Bukkit.getConsoleSender().sendMessage("§6" + getDescription().getName() + " §8v.§6" + getDescription().getVersion() + " §8de§6 "
            + getDescription().getAuthors() + " §2Ativado");
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
    }

    @Override
    public void onDisable() {
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        Bukkit.getConsoleSender().sendMessage("§6" + getDescription().getName() + " §8v.§6" + getDescription().getVersion() + " §8de§6 "
            + getDescription().getAuthors() + " §4Desativado");
        Bukkit.getConsoleSender().sendMessage("§6<§8-----------------------------§6>");
        HandlerList.unregisterAll();
    }

    public static SkyCratesQuickAnimation getSkyCratesQuickAnimation() {
        return skyCratesQuickAnimation;
    }

    @EventHandler
    public void onItemPickup(PlayerPickupItemEvent event) { // cancelando o evento
        // nossa animação vai dropar o prémio, para que não seja roubado temos que cancelar o evento
        // para sabermos que é um prémio iremos usar a metadata dele
        if (event.getItem().hasMetadata("quickcrate"))
            event.setCancelled(true);
    }

}

» Animação

 

 

 

 

package me.zath.skycratesquickanimation;
/*
 * MC 
 * Created by zAth
 */

import me.zath.skycrates.SkyCrates;
import me.zath.skycrates.objects.Crate;
import me.zath.skycrates.objects.animations.AbstractAnimation;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;

public class QuickAnimation extends AbstractAnimation { // toda animação precisa extender AbstractAnimation

    public QuickAnimation(Crate crate) { // precisa ter um constructor, deixe ele somente com super(crate)
        super(crate);
    }

    @Override
    public void start() { // este método será chamado quando a animação começar
        prize = crate.getCrateType().getRandomPrize(); // pegando um prémio randômico

        Entity entity = null;
        if (!crate.getCrateType().isVirtual()) { // se a caixa necessita de uma chave
            String itemStackName = prize.getItemStack().hasItemMeta() && prize.getItemStack().getItemMeta().hasDisplayName()
                ? prize.getItemStack().getItemMeta().getDisplayName() : SkyCrates.getSkyCrates().getUtils().prettifyText(prize.getItemStack().getType().name());
            // pegando o nome do item se o tiver, se não usaremos uma versão mais bonita do nome do material

            entity = crate.getLocation().getWorld().dropItem(crate.getLocation().clone().add(0.5, 1, 0.5), prize.getItemStack());
            // spawnamos o prémio em cima da caixa            
            entity.setVelocity(new Vector(0, 0.2, 0));
            // jogamos ela um pouco para cima para a animar
            entity.setCustomName(itemStackName);
            entity.setCustomNameVisible(true);
            // setamos e deixamos o nome do prémio visivel
            entity.setMetadata("quickcrate", new FixedMetadataValue(SkyCratesQuickAnimation.getSkyCratesQuickAnimation(), true));
            // aqui adicionamos a metadata "quickcrate" para que ninguém possa apanhar o item
            if (crate.getLocation().getBlock().getType() == Material.CHEST || crate.getLocation().getBlock().getType() == Material.ENDER_CHEST
                || crate.getLocation().getBlock().getType() == Material.TRAPPED_CHEST) {
                // verificamos se é algum tipo de bau, para abrirmos o baú
                SkyCrates.getSkyCrates().getUtils().changeChestState(crate.getLocation(), true);
            }
        }

        final Entity finalEntity = entity;
        new BukkitRunnable() {
            @Override
            public void run() {
                // passado 5 segundos
                if (!crate.getCrateType().isVirtual()) { // se a caixa necessita de uma chave
                    if (finalEntity != null) { // se existe um item
                        finalEntity.remove(); // removemos o item
                    }

                    if (crate.getLocation().getBlock().getType() == Material.CHEST || crate.getLocation().getBlock().getType() == Material.ENDER_CHEST
                        || crate.getLocation().getBlock().getType() == Material.TRAPPED_CHEST) {
                        // verificamos se é algum tipo de bau, para fecharmos o baú
                        SkyCrates.getSkyCrates().getUtils().changeChestState(crate.getLocation(), false);
                    }
                }
                end(); // terminamos a animação, TODA animação precisa chamar o end() no término da mesma
            }
        }.runTaskLater(SkyCratesQuickAnimation.getSkyCratesQuickAnimation(), 5 * 20);
    }

    @Override
    public void run() { // este método será chamado em um timer, não iremos usar nenhum nesta animação
        ;
    }

}

» Plugin.yml

 

 

 

name: SkyCratesQuickAnimation
version: 1.0.0
author: zAth
main: me.zath.skycratesquickanimation.SkyCratesQuickAnimation
softdepend: [SkyCrates] # IMPORTANTE, precisa colocar isso para que a sua animação carregue DEPOIS do SkyCrates

» Resultado - https://streamable.com/cf744

» Download - http://www.mediafire.com/file/5cnnyu6y4jcnqcl/SkyCratesQuickAnimation.jar

 

 

 

 

 

 

@edit

Atualizações

» Caixas que não precisam de chave

https://streamable.com/yrn76

carai, ai sim, foda mesmo haha, isso sim é um bom projeto

Link para o comentário
Compartilhar em outros sites

no meu não tem o lugar de digitar... ai não da para colocar a chance ;-;

Não tem lugar de digitar tipo.. não aparece item no gui ou não aparece a tableta?

Tem o protocollib?

 

 

se vc colocar a crate em modo caixa para abir sem chave tem como dupar................

E como que alcança tal proeza? 

Link para o comentário
Compartilhar em outros sites

Não tem lugar de digitar tipo.. não aparece item no gui ou não aparece a tableta?

Tem o protocollib?

 

 

E como que alcança tal proeza? 

é so vc colocar a crate para abrir sem key e quando ir abrir vai dar aquela tela de aceitar e cancelar, ai é so vc aperta para abrir e dropar a caixa no msm tempo ai vai ficar com o menu de aceitar, ai vc aceita e a caixa abre sem ter caixa, dps é so pegar a caixa do chão e fazer isso de novo.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...