
Nesta aula, faço uma introdução básica do curso, ensino a baixar e instalar o cliente do Minecraft, e o servidor oficial vanilla; além de falar sobre a diferença entre vanilla, craftbukkit, spigot e paper.
Aqui, instalamos o mod optifine para melhor desempenho ao executar o jogo, instalamos também o Git e obtemos o Spigot através de sua BuildTools; por fim baixamos e configuramos o paper para ser o servidor de desenvolvimento definitivo até o final do curso.
Mostro nessa aula como escolher, baixar e instalar a melhor IDE para desenvolver em Java, além de mostrar como configurar do zero, o projeto de um plugin spigot, utilizando sua api servidor.
Começamos aqui a ver mais detalhadamente as instruções que podemos usar para programar nosso primeiro plugin.
Nesta aula aprendemos sobre Player, Entity e eventos como: PlayerJoinEvent e BlockBreakEvent.
Nesta aula apresento o inventário do player e pilha de itens, além de instalarmos um plugin do IntellijIDEA que possibilita apresentar a atividade da IDE no discord.
Apresento comandos do Minecraft, implementamos CommandExecutor para criarmos um comando personalizado; definimos que nosso comando irá localizar baús.
Nesta aula vimos o básico de chunks, blockstate, e aprendemos como podemos utilizar a documentação do Spigot API quando temos dúvida sobre os objetos Java, Interfaces, Sub Interfaces e outros.
Nesta aula mostro como utilizar comandos com argumentos, lógica e solução de problemas que podem aparecer no código.
Vemos sobre a Interface TabCompleter, para nos auxiliar nos argumentos de nossos comando.
Nesta aula é apresentado como podemos identificar um BlockState como sendo um Chest através do polimorfismo, expliquei também que uma interface pode estender outras interfaces sem problemas, mas não é permitido que uma interface implemente uma outra interface.
Concluímos nesta aula a filtragem de Chests entre BlockStates, além de filtrar para que o comando retorne apenas a localização de baús, e a prioridade é manter a localização de baús não vazios e mais próximos do jogador, fizemos isso usando a ordenação da lista comparando o conteúdo do inventário do baú (vazio ou não) e comparando com a distancia do baú até o jogador.
Fazemos aqui alguns ajustes para nosso comando, dessa forma o complete retornará as opções de acordo com as letras que estamos digitando para esse argumento.
Nesta aula, apresento o arquivo de configuração config.yml do nosso PrimeiroPlugin, além de falar sobre algumas regras para definição dos dados no arquivo YAML.
Aqui, mostro como podemos criar um placeholder o qual irá armazenar um dado variável, podemos utilizar esse dado nas mensagens do plugin; criamos um apelido para nosso comando chestlocate.
Nesta vídeo-aula, serializamos alguns objetos no arquivo config.yml, posteriormente desserializamos e adicionamos os objetos ao inventário do jogador.
Nesta aula, mostro-lhes como criar pastas e arquivos para serem utilizados no nosso plugin, utilizando código Java.
Nesta vídeo-aula, fizemos de nossos arquivos e pastas personalizados, arquivos de configuração do nosso spigot plugin PrimeiroPlugin, além de implementarmos uma lógica simples para alternar o idioma do plugin em suas mensagens.
Nesta aula, vimos como usar diferentes arquivos de configuração para disponibilizar mensagens em diferentes idiomas no plugin.
Aqui, aprendemos que não é preciso recarregar o servidor todo para que mudanças no nosso plugin entrem em vigor, então criamos um comando reload o qual recarrega os arquivos do plugin.
Vimos que as vezes não queremos dar para todos os jogadores todas permissões, então fizemos uma introdução sobre como validar se determinado jogador tem a permissão necessária para fazer algo, vimos também como adicionar tal permissão ao jogador.
Nesta aula aprendemos como as permissões são atribuídas aos jogadores através do PermissionAttachment, fizemos nosso próprio plugin de permissões, para adicionar ou remover permissões através do arquivo de permissões o qual criamos com CustomConfig.
Renomeamos a classe Reload para Commands e adicionamos dois novos comandos ao prefixo pp, definir jogadores para o grupo dado e definir permissões para o mesmo; tarefa do aluno é implementar tabcomplete para estes comandos, testá-lo e descobrir possíveis erros, como por exemplo: argumento nulo, e corrigi-lo, além de criar as devidas mensagens nos arquivos de localization.
Nesta aula baixamos e instalamos o LuckPerms, este plugin de permissões amplamente utilizado pela comunidade bukkit/spigot, vimos como criar grupos, permissões e adicioná-los aos jogadores.
Aqui, mostro-lhes como utilizar o Scoreboard e Teams, para exibir informações de estatísticas dos jogadores no tablist e sidebar.
Nesta aula mostro o funcionamento de uma BukkitRunnable para criarmos um sidebar que atualiza os dados em um período de tempo fixo.
Nesta aula criamos um loop for para inserir todas as linhas no Sidebar, e definimos um tipo de dado para cada uma delas a serem exibidos no Scoreboard do jogador.
Nesta aula mostro como criar um arquivo para nele passarmos os dados que queremos mostrar no scoreboard do player no display sidebar; criação de placeholders para nosso plugin.
Aprendemos fazer a instalação do java 8 e do Tlauncher, para ser possível abrir mais de uma instância do Minecraft ao mesmo tempo, isso vai nos ajudar a desenvolver e depurar nosso código de forma mais precisa.
Nesta aula, fizemos uma melhoria ao rodarmos apenas 1 tarefa (BukkitRunnable) para atualizar os dados dos sidebars em todos os scoreboards de todos os jogadores online.
Aqui, mostro como usar o PlaceholderAPI para buscarmos dados relacionados aos jogadores ou não, também aprendemos como criar um placeholder personalizado, o qual retornará um dado específico quando requerido.
Nesta aula, complementamos nosso placeholder personalizado o qual exibe a fase da lua no mundo atual do jogador.
Nesta aula, criamos um objetivo o qual irá armazenar a latência do jogador no Tablist de todos os jogadores, sendo possível ver o ping de todos os jogadores que estão no servidor.
Aqui, aprendemos como utilizar um Writer e escrever nos arquivos .yml do nosso plugin, passando para o writer o conteúdo em string e configurando para a codificação UTF-8.
Nesta aula criamos um método para facilitar a cópia do conteúdo de arquivos no projeto para os arquivos .yml do nosso plugin no servidor.
Aqui, melhoramos o método responsável pela criação e escrita de arquivos utilizando um vetor.
Nesta aula mostro como restringir de outros jogadores o acesso a seus baús, gravando em arquivo as informações dos mesmos.
Continuamos aqui com a segunda parte o sistema de proteção de baús, fizemos algumas correções e alterações no código baseado na convenção Java.
Aqui mostro como utilizar uma classe para representar nosso objeto proteção, podendo assim criar os atributos que quisermos e serializar esses objetos para quando reiniciarmos o servidor sermos capazes de recuperá-los.
Estamos implementado a lógica para permitir dar acesso às nossas proteções para outro jogadores de nossa confiança e tratar possíveis erros e exceções.
Nesta aula explico como aplicar nossa proteção não apenas em baús, mas em todos os blocos que forem um contêiner.
Aqui mostro como podemos revogar a permissão de um jogador em nossa proteção.
Nesta aula mostro como atualizar as versões do cliente e servidor de Minecraft além de baixarmos a api do spigot na versão mais recente e utilizá-la como dependência.
Aqui vimos como baixar e instalar optifine e shaders no Minecraft.
Desafio do aluno é implementar uma adição ao sistema e proteção de contêiners à evitar que seja possível a extração de itens desde o contêiner para um funil e assim previnir o furto de itens por jogadores mau-intencionados.
Aqui vemos como usar o spawn de entidade para criar um holograma.
Nesta aula, mostro como usar comando para criar um holograma personalizado na coordenada fornecida pelo jogador.
Apresento nessa aula os títulos; mensagens grandes na tela do jogador, consiste em título e subtítulo, os quais podem enviar informações para os jogadores que estão online.
Nesta vídeo aula mostro como manipular o título e criar uma mensagem de boas vindas para todos que entrarem no servidor.
Nesta vídeo aula criamos um projeto de plugin utilizando o gerenciador de dependência Apache Maven.
Dicas sobre como utilizar plugins no maven a fim de dar um build no projeto e criar o artefato contendo as dependências ou não.
Nesta vídeo aula criamos um projeto de plugin utilizando o gerenciador de dependência Gradle, o qual eu recomendo usar em seus projetos Java.
Como utilizar o plugin shadowJar para fazer um build no projeto criando um artefato que contém as dependências, alterar nome do artefato, alterar local de saída do artefato.
Nesta aula vamos ter uma introdução de como é feita a ofuscação de código, para dificultar o processo de engenharia reversa.
Nesta aula exploramos mais opções do proguard.
Nesta aula você vai aprender uma dica de como usar caracteres de outros alfabetos para que seja possível gerarmos arquivos ofuscados com o "mesmo" nome, bem como nomes de classes, métodos, campos e pacotes "idênticos".
Neste curso de criação de plugins de Minecraft Java edition, explico desde a mais básica tarefa de como instalar o jogo, até como depurar o servidor de Minecraft, usar maven e/ou gradle, git e github; o aluno aprenderá passo à passo e detalhadamente todos os procedimentos para se criar um plugin de Minecraft completo, com banco de dados, arquivos de configuração, comandos, permissões, etc; além de aprender toda a parte relacionada à api do Bukkit/Spigot, aqueles mais iniciantes não terão muitos problemas pois é explicado também a parte da linguagem de programação Java, relacionamento entre objetos, interfaces, banco de dados, os porquês serão respondidos conforme forem aparecendo. Disponibilizo um servidor do discord dedicado ao saneamento de dúvidas, críticas, sugestões e ajuda.
Requisitos mínimos:
Saber o básico da linguagem Java
Ter acesso a internet no computador durante o curso
É recomendado utilizar um computador com no mínimo 8GB de memória ram
Ter ou adquirir o jogo Minecraft Java Edition
Ao término do curso o aluno estará apto a criar seus próprios plugins e além disso não terá dificuldade em manter ou estender outros plugins; poderá solicitar uma prova prática onde eu irei esboçar um projeto, o qual o aluno implementará com o conhecimento adquirido no curso. (Opcional)