BlackFloyd Postado Julho 14, 2019 Denunciar Compartilhar Postado Julho 14, 2019 (editado) Boa noite, estou trabalhando com a versão 1.6.4 do Bukkit (Triste...) e preciso criar um broadcast através daquela bossbar do ender dragon, que fica na parte superior da tela. Eu sei que tem um jeito de fazer na mão, já que eu ja vi gente fazendo numa equipe que trabalhava (Se eu tivesse contato deles ainda...). Sim, existem algumas API's que podem me ajudar, mas estou trabalhando com o Cauldron **houston, we have a problem** e o maldito cauldron não funciona bem com nenhuma dessas API's ou plugins que ja fornecem essas utilidades. Eu queria saber se alguma alma abençoada sabe fazer isso hand-made, pois ja fiquei horas procurando no forum do bukkit e spigot mas não achei nada e acredito que não acharei, afinal, 1.6.4... Ficaria muito agradecido, thanks ❤️ Editado Julho 14, 2019 por BlackFloyd Link para o comentário Compartilhar em outros sites More sharing options...
Zeuss Postado Julho 14, 2019 Denunciar Compartilhar Postado Julho 14, 2019 9 horas atrás, BlackFloyd disse: Boa noite, estou trabalhando com a versão 1.6.4 do Bukkit (Triste...) e preciso criar um broadcast através daquela bossbar do ender dragon, que fica na parte superior da tela. Eu sei que tem um jeito de fazer na mão, já que eu ja vi gente fazendo numa equipe que trabalhava (Se eu tivesse contato deles ainda...). Sim, existem algumas API's que podem me ajudar, mas estou trabalhando com o Cauldron **houston, we have a problem** e o maldito cauldron não funciona bem com nenhuma dessas API's ou plugins que ja fornecem essas utilidades. Eu queria saber se alguma alma abençoada sabe fazer isso hand-made, pois ja fiquei horas procurando no forum do bukkit e spigot mas não achei nada e acredito que não acharei, afinal, 1.6.4... Ficaria muito agradecido, thanks ❤️ my friend cauldron realmente é um problema. creio que não tenha como fazer isso nele, pois quase todos os packets nessa bagaça não funciona direito, creio que se tiver como a forma mais fácil seria usando o protocollib talvez. Link para o comentário Compartilhar em outros sites More sharing options...
Zeuss Postado Julho 14, 2019 Denunciar Compartilhar Postado Julho 14, 2019 1 minuto atrás, Zeuss disse: my friend cauldron realmente é um problema. creio que não tenha como fazer isso nele, pois quase todos os packets nessa bagaça não funciona direito, creio que se tiver como a forma mais fácil seria usando o protocollib talvez. package me.libraryaddict.boss; import java.lang.reflect.Field; import java.util.HashMap; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitRunnable; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.wrappers.WrappedDataWatcher; public class BossBarApi { private static int enderdragonId; private static Plugin plugin = Bukkit.getPluginManager().getPlugins()[0]; private static HashMap<String, BukkitRunnable> toHide = new HashMap<String, BukkitRunnable>(); static { try { Field field = Class.forName( "net.minecraft.server." + Bukkit.getServer().getClass().getName().split("\\.")[3] + ".Entity") .getDeclaredField("entityCount"); field.setAccessible(true); enderdragonId = field.getInt(null); field.set(null, enderdragonId + 1); } catch (Exception ex) { ex.printStackTrace(); } } public static void removeBar(Player player) { removeBar(player, 2); } public static void removeBar(final Player player, int afterTicks) { if (player.hasMetadata("SeesEnderdragon") && !toHide.containsKey(player.getName())) { BukkitRunnable runnable = new BukkitRunnable() { @Override public void run() { player.removeMetadata("SeesEnderdragon", plugin); sendRemovePacket(player); toHide.remove(player.getName()); } }; runnable.runTaskLater(plugin, afterTicks); toHide.put(player.getName(), runnable); } } private static void sendRemovePacket(Player player) { try { PacketContainer spawnPacket = new PacketContainer(PacketType.Play.Server.ENTITY_DESTROY); spawnPacket.getIntegerArrays().write(0, new int[] { enderdragonId }); ProtocolLibrary.getProtocolManager().sendServerPacket(player, spawnPacket, false); } catch (Exception ex) { ex.printStackTrace(); } } private static void sendSpawnPacket(Player player, String message, float health) throws Exception { PacketContainer spawnPacket = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING); StructureModifier<Object> spawnPacketModifier = spawnPacket.getModifier(); Location toSpawn = player.getEyeLocation().add(player.getEyeLocation().getDirection().normalize().multiply(23)); spawnPacketModifier.write(0, enderdragonId); spawnPacketModifier.write(1, (byte) 64); // EntityID of wither spawnPacketModifier.write(2, toSpawn.getBlockX() * 32); spawnPacketModifier.write(3, toSpawn.getBlockY() * 32); spawnPacketModifier.write(4, toSpawn.getBlockZ() * 32); // Make the datawatcher that turns it invisible WrappedDataWatcher watcher = new WrappedDataWatcher(); watcher.setObject(0, (byte) 32); watcher.setObject(2, message); watcher.setObject(6, health, true); // Set health watcher.setObject(10, message); watcher.setObject(20, 881); spawnPacket.getDataWatcherModifier().write(0, watcher); ProtocolLibrary.getProtocolManager().sendServerPacket(player, spawnPacket, false); } public static void setName(Player player, String message, float health) { try { if (!player.hasMetadata("SeesEnderdragon")) { player.setMetadata("SeesEnderdragon", new FixedMetadataValue(plugin, true)); } if (toHide.containsKey(player.getName())) { toHide.remove(player.getName()).cancel(); } sendSpawnPacket(player, message, health); } catch (Exception ex) { ex.printStackTrace(); } } } Código não é meu Link para o código Link para o comentário Compartilhar em outros sites More sharing options...
Jota ♨️ Postado Julho 19, 2019 Denunciar Compartilhar Postado Julho 19, 2019 Sua dúvida foi marcada como resolvida pela nossa equipe. Caso sua dúvida não tenha sido sanada, crie outro tópico. OBS: Essa mensagem é automática. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados