DK KITS
1.28DKKITS is a Spigot/Paper 26.1 plugin that lets you create, edit, and deliver kits via GUI, with per-kit permissions and per-player cooldowns.
1.28latestDK KITS 1.28Sep 12, 2026 1.27DK KITS 1.27Sep 1, 2026 1.26Aug 23, 2026 1.0.6DK KITS 1.0.6Aug 23, 2026 1.24DK KITS 1.24Aug 23, 2026 1.23-SNAPSHOTDK KITS 1.23-SNAPSHOTAug 21, 2026 1.22-SNAPSHOTDK KITS 1.22-SNAPSHOTJul 21, 2026 The cause was theapi-version: ‘26.1’: older servers reject plugins that declare a newer API. The reported Folia implements 1.21.11. This corresponds to the behavior documented by PaperMC.1.21-SNAPSHOTDK KITS 1.21-SNAPSHOTJun 12, 2026 Added support for 26.x1.20-SNAPSHOTDK KITS 1.20-SNAPSHOTMay 20, 2026 O problema era: no editor do kit, a ação era decidida pelo material do item clicado. Como o botão de ícone usa o próprio material do ícone atual, quando ele era CHEST caía em “Editar itens”. Agora o editor decide pelo slot fixo do menu.1.19-SNAPSHOTDK KITS 1.19-SNAPSHOTApr 27, 2026 1.18-SNAPSHOTDK KITS 1.18-SNAPSHOTMar 11, 2026 DKKits - Changelog de Atualizações
- Corrigido exploit crítico: Jogadores sem permissãoSegurança
dkkits.adminconseguiam criar kits infinitos clicando na bigorna no/kit- Bigorna de criar kit agora só aparece para quem tem permissãoNovas Funcionalidades
1. Sistema de Páginas no
- Menu de kits agora suporta paginação automática - Configurável no/kitconfig.yml: -gui.kits-per-page- Quantos kits por página (padrão: 45) -gui.previous-page-slot- Posição do botão "Página Anterior" (padrão: 48) -gui.next-page-slot- Posição do botão "Próxima Página" (padrão: 50) - Título mostra número da página: "Kits (1)", "Kits (2)", etc.2. Bigorna Configurável
- Posição da bigorna (botão criar kit) agora é configurável -gui.create-button-slotnoconfig.yml(padrão: 53) - Bigorna só aparece para quem tem permissão de criar kits3. Cooldown Imediato (First Use Delay)
- Nova opção no editor de kits (slot 23) - Quando ativado, jogador precisa esperar o cooldown ANTES de pegar o kit pela primeira vez - Exemplo: Kit com 3600s e cooldown imediato = jogador espera 1 hora antes de pegar pela primeira vez - Perfeito para kits diários/semanais - Ícone: Esmeralda (ativado) / Redstone (desativado)4. Kits Ocultos/Privados
- Nova opção no editor de kits (slot 25) - Kits ocultos NÃO aparecem no/kit(GUI) - Apenas admins podem dar com/dkkit give- Jogadores com permissão podem pegar via/kit <nome>- Ideal para kits VIP que você não quer mostrar publicamente - Ícone: Olho de Ender (oculto) / Pérola de Ender (visível)5. Comando
- Agora/kit <nome>/kitsem argumentos abre a GUI -/kit vippega o kit "vip" diretamente - Funciona com cooldown, permissões e kits ocultos - Cooldown imediato também funciona via comando6. Editor Expandido
- GUI do editor agora tem 36 slots (4 linhas) em vez de 27 - Novos botões: - Slot 23: Cooldown Imediato (toggle) - Slot 25: Kit Oculto (toggle) - Todos os botões antigos mantidos
- Corrigido: Itens da GUI do editor ficavam "pegáveis" após clicar em qualquer botão - Corrigido: Listeners de GUI acumulavam causando conflitos - Corrigido: KitItemsEditorGUI não cancelava eventos corretamente - Melhorado: Sistema de registro/desregistro de listenersCorreções de Bugs
- Todos os novos textos adicionados aos arquivos de mensagens - Suporte completo para português e inglês - Novas chaves: -Internacionalização
editor.first-use-delaye variações -editor.hiddene variações - Todas configuráveis emmessages_pt_br.ymlemessages_en.ymlConfigurações Novas
gui: # Posição do botão de criar kit (bigorna) create-button-slot: 53 # Quantos kits por página kits-per-page: 45 # Posição do botão de página anterior previous-page-slot: 48 # Posição do botão de próxima página next-page-slot: 50
Criar kit VIP oculto com cooldown imediato: 1.Como Usar as Novas Funcionalidades
/dkkit create vip2. Configure nome, permissão, itens 3./dkkit edit vip4. Clique no relógio →86400(24 horas) 5. Clique na Esmeralda/Redstone (slot 23) → Ativa cooldown imediato 6. Clique no Olho de Ender (slot 25) → Ativa kit oculto 7. Pronto! Kit não aparece no/kit, mas jogadores com permissão podem pegar com/kit vipapós esperar 24h Dar kit oculto:/dkkit give <jogador> vip1.17-SNAPSHOTDK KITS 1.17-SNAPSHOTMar 8, 2026 Novidades do DKKits
Novo Comando:
Adicionado o comando/dkkit give/dkkit give <jogador> <kit>(ou/dkkit dar <jogador> <kit>) que permite aos administradores dar kits diretamente para jogadores! Funcionalidades: -Dá qualquer kit para qualquer jogador online -
Verifica automaticamente se o jogador tem espaço no inventário -
Se não couber tudo, dropa os itens extras no chão -
Mensagens de confirmação tanto para quem deu quanto para quem recebeu -
Suporte completo ao PlaceholderAPI - você pode usar placeholders no nome do jogador! Exemplos de uso:
Integração com PlaceholderAPI: O comando agora suporta placeholders do PlaceholderAPI no argumento do jogador. Isso significa que você pode usar este comando em outros plugins (como sistemas de recompensa, quests, etc.) e usar placeholders para definir dinamicamente qual jogador vai receber o kit! Permissão necessária:/dkkit give Steve starter /dkkit dar Alex vip /dkkit give %player_name% iniciante /dkkit give %vault_rank% premiumdkkits.admin(padrão: op) Mensagens de erro: - Avisa se o jogador não está online - Avisa se o kit não existe - Avisa se o jogador não tem espaço no inventário1.16-SNAPSHOTDK KITS 1.16-SNAPSHOTFeb 14, 2026 Bug Crítico Corrigido: Jogadores Sem OP Criando Kits Infinitos Problema: Jogadores sem permissão dkkits.admin conseguiam clicar na bigorna (ANVIL) na interface /kit e criar kits infinitamente, permitindo abuso do sistema. Causa: No KitListGUI.java, a verificação de permissão não estava sendo feita quando o jogador clicava na bigorna.
1.15-SNAPSHOTDK KITS 1.15-SNAPSHOTFeb 5, 2026
O plugin DKKits foi completamente refatorado para funcionar em todas as versões do Minecraft de 1.8.8 até 1.21+, incluindo suporte total para Paper e Folia. As principais mudanças incluem: -Resumo Executivo
Compatibilidade de materiais entre versões -
Sistema de detecção de GUI por estrutura (fallback para títulos null) -
Correção de bugs de duplicação de kits -
Implementação completa do scheduler do Folia -
Sistema de debug configurável -
Separação correta de eventos entre diferentes GUIs ---
Atualizações Técnicas Detalhadas
1. Configuração do Build (build.gradle)
Objetivo: Permitir compilação com Java 8 para compatibilidade máxima Mudanças: - Java alterado de 21 para 8 - API do Spigot alterada de1.21para1.16.5- ConfiguradosourceCompatibilityetargetCompatibilitypara Java 8 - Mantido repositórios Maven para Paper e Spigot Resultado: Plugin compila com Java 8 e gera bytecode compatível com JVM 8+ ---2. Plugin Metadata (plugin.yml)
Objetivo: Declarar compatibilidade correta com versões antigas Mudanças: -api-versionalterado de1.21para1.13-folia-supportedmantido comotrue- Comandos e permissões preservados Resultado: Plugin carrega corretamente em servidores 1.8.8 até 1.21+ ---3. Sistema de Compatibilidade de Inventário (InventoryCompat.java)
Objetivo: Resolver problema de títulos nulos em versões 1.8-1.14 Problema: Em versões antigas (especialmente 1.14.1),getTitle()retornanull, impedindo identificação de GUIs Solução: Criada classe utilitária com múltiplos métodos de fallback Métodos de detecção de título: 1.getTitle()noInventoryView(1.14+) 2.title()com Adventure API (Paper moderno) 3.getTitle()noInventory(algumas versões) 4.getName()noInventory(1.8-1.13) Sistema de detecção por estrutura (quando título é null): KitListGUI: - Detecta por ANVIL no slot 53 - Verifica ausência de BARRIER no slot 45 - Tamanho: 54 slots KitWizardGUI - Tela de Permissão: - Detecta por WOOL nos slots 11 e 15 - Verifica se sessão não tem itens ainda - Tamanho: 27 slots KitWizardGUI - Tela de Itens: - Detecta por BARRIER no slot 45 - Tamanho: 54 slots KitWizardGUI - Tela de Confirmação: - Detecta por WOOL nos slots 11 e 15 - Verifica se sessão já tem itens definidos - Tamanho: 27 slots KitEditorGUI: - Detecta por NAME_TAG no slot 10 - Detecta por CHEST no slot 14 - Detecta por PAPER no slot 20 - Tamanho: 27 slots Resultado: Todas as GUIs funcionam perfeitamente mesmo quandogetTitle()retorna null ---4. Compatibilidade de Materiais
Objetivo: Usar nomes corretos de materiais para cada versão Materiais atualizados: | Material Moderno | Material Legado (1.8) | Uso | |-----------------|----------------------|-----| |REDSTONE_TORCH|REDSTONE_TORCH_ON| Ícone de permissão | |CLOCK|WATCH| Ícone de cooldown | |NAME_TAG|NAME_TAG| Ícone de renomear | Lã colorida (sistema especial): 1.8-1.12: UsaMaterial.WOOLcom data values (durability)
1.13+: Usa tipos específicos// Verde (Lime) ItemStack greenWool = new ItemStack(Material.WOOL, 1, (short) 5); // Vermelho (Red) ItemStack redWool = new ItemStack(Material.WOOL, 1, (short) 14);
Método helper:Material.LIME_WOOL Material.RED_WOOL
Resultado: Todos os itens aparecem corretamente em todas as versões ---private Material getMaterialCompat(String modernName, String legacyName) { try { return Material.valueOf(modernName); } catch (IllegalArgumentException e) { return Material.valueOf(legacyName); } }5. Remoção de APIs Modernas
Objetivo: Eliminar dependências de Java 9+ e Minecraft 1.13+ ItemFlag (não existe em 1.8):
Lambdas convertidos para classes anônimas:// ANTES (não funciona em 1.8) meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); // DEPOIS (com reflexão) try { Class<?> itemFlagClass = Class.forName("org.bukkit.inventory.ItemFlag"); Object hideAttributes = itemFlagClass.getEnumConstants()[0]; meta.getClass().getMethod("addItemFlags", itemFlagClass) .invoke(meta, hideAttributes); } catch (Exception ignored) {}
List.of() substituído (só existe em Java 9+):// ANTES requestText(playerId, input -> { // código }); // DEPOIS requestText(playerId, new java.util.function.Consumer<String>() { public void accept(String input) { // código } });
Enchantment.UNBREAKING:// ANTES List<String> list = List.of("item1", "item2"); // DEPOIS List<String> list = Arrays.asList("item1", "item2"); // ou List<String> list = new ArrayList<>(); list.add("item1"); list.add("item2");
Resultado: Código compila e executa em Java 8 sem erros ---// ANTES (1.13+) Enchantment.UNBREAKING // DEPOIS (1.8) Enchantment.DURABILITY6. Scheduler Folia (Compatibilidade Completa)
Objetivo: Funcionar tanto em Paper/Spigot quanto em Folia Detecção automática:
Implementação com múltiplos fallbacks: 1. EntityScheduler (preferencial para Folia): -public static boolean isFolia() { try { Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); return true; } catch (ClassNotFoundException e) { return false; } }run(plugin, task, null, 0L)- 4 parâmetros -run(plugin, task, null)- 3 parâmetros -run(plugin, task)- 2 parâmetros -execute(plugin, task)- método alternativo 2. GlobalRegionScheduler (fallback): -run(plugin, task)-execute(plugin, task)3. BukkitScheduler (Paper/Spigot): -runTask(plugin, task)-runTaskLater(plugin, task, delay)Métodos implementados:
Resultado: Plugin funciona perfeitamente em Paper, Spigot e Folia ---// Executa tarefa imediatamente runTaskForPlayer(Player player, Runnable task) // Executa com delay runTaskLaterForPlayer(Player player, Runnable task, long delay) // Abre inventário de forma segura openInventoryForPlayer(Player player, Inventory inventory)7. Sistema de Debug Configurável
Objetivo: Permitir debug sem poluir logs em produção Configuração (config.yml):
Implementação:debug: false # Padrão: desativado
Logs de debug incluem: - Detecção de métodos do scheduler Folia - Passos de criação de kits (nome, permissão, itens) - Processamento de eventos de GUI - Detecção de títulos de inventário e fallbacks - Cliques em lã e detecção de data values - Identificação de GUIs por estrutura Resultado: Logs limpos em produção, debug detalhado quando necessário ---public boolean isDebugEnabled() { return getConfig().getBoolean("debug", false); } // Uso if (plugin.isDebugEnabled()) { plugin.getLogger().info("Debug message"); }8. Correção de Bug: Duplicação de Kits
Problema: Kit sendo criado duas vezes ao confirmar wizard - Um kit com nome correto - Um kit com nomenull(falhava) Causa: Double-click processando evento duas vezes Solução:
Resultado: Kits criados apenas uma vez, sem duplicatas ---// Verificar se já está processando if (session.getName() == null) { // Sessão já foi processada e limpa player.closeInventory(); return; } // Processar criação do kit Kit kit = new Kit(kitName); // ... configurar kit ... // Limpar sessão ANTES de fechar inventário plugin.clearCreationSession(player.getUniqueId()); creationSessions.remove(player.getUniqueId()); // Enviar mensagem e fechar player.sendMessage("Kit criado!"); player.closeInventory();9. Correção de Bug: Wizard não Respondia a Cliques em 1.8.8
Problema: Cliques em lã verde/vermelha não faziam nada na tela de permissão Causa:GuiUtil.simpleItem()criava novo ItemStack sem durability, então comparação falhava Solução: ```java // Criar ItemStack com durability diret1.14-SNAPSHOTDK KITS 1.14-SNAPSHOTJan 16, 2026 added support for English and Brazilian Portuguese - version compatible with all versions1.13-SNAPSHOTDK KITS 1.13-SNAPSHOTJan 16, 2026 added support for English and Brazilian Portuguese1.12-SNAPSHOTDK KITS 1.12-SNAPSHOTSep 8, 2025 1.11-SNAPSHOTDK KITS 1.11-SNAPSHOTSep 3, 2025 1.10-SNAPSHOTDK KITS 1.10-SNAPSHOTAug 28, 2025 1.9-SNAPSHOTDK KITS 1.9-SNAPSHOTAug 27, 2025 1.8-SNAPSHOTDK KITS 1.8-SNAPSHOTAug 22, 2025 1.7-SNAPSHOTDK KITS 1.7-SNAPSHOTAug 22, 2025 1.6-SNAPSHOTDK KITS 1.6-SNAPSHOTAug 9, 2025
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.3MSueta
Chunky
Pre-generates chunks, quickly and efficiently
20.8MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta