Anston06

AnimatedTab.java

Oct 24th, 2021 (edited)
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.42 KB | None | 0 0
  1. package me.elcorporation.animatedtab;
  2.  
  3. import net.minecraft.network.chat.ChatComponentText;
  4. import net.minecraft.network.protocol.game.PacketPlayOutPlayerListHeaderFooter;
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.ChatColor;
  7. import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
  8. import org.bukkit.entity.Player;
  9.  
  10. import java.lang.reflect.Field;
  11. import java.util.List;
  12. import java.util.ArrayList;
  13.  
  14. public class TabManager {
  15.  
  16.     private List<ChatComponentText> headers = new ArrayList<>();
  17.     private List<ChatComponentText> footers = new ArrayList<>();
  18.     private AnimatedTab plugin;
  19.     public TabManager(AnimatedTab plugin) {
  20.         this.plugin = plugin;
  21.     }
  22.  
  23.     public void showTab() {
  24.         if (headers.isEmpty() && footers.isEmpty())
  25.             return;
  26.         Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
  27.             PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
  28.             int count1 = 0; // Headers
  29.             int count2 = 0; // Footers
  30.  
  31.             @Override
  32.             public void run() {
  33.                 try {
  34.  
  35.                     Field a = packet.getClass().getDeclaredField("header");
  36.                     a.setAccessible(true);
  37.                     Field b = packet.getClass().getDeclaredField("footer");
  38.                     b.setAccessible(true);
  39.  
  40.                     if (count1 >= headers.size())
  41.                         count1 = 0;
  42.                     if (count2 >= footers.size())
  43.                         count2 = 0;
  44.                     a.set(packet, headers.get(count1));
  45.                     b.set(packet, footers.get(count2));
  46.  
  47.                     if (Bukkit.getOnlinePlayers().size() != 0) {
  48.                         for (Player player : Bukkit.getOnlinePlayers())
  49.                             ((CraftPlayer)player).getHandle().b.sendPacket(packet);
  50.  
  51.                     }
  52.  
  53.                     count1++;
  54.                     count2++;
  55.  
  56.                 } catch (Exception e) {
  57.                     e.printStackTrace();
  58.                 }
  59.             }
  60.         }, 10, 40);
  61.     }
  62.     public void addHeader(String header) {
  63.         headers.add(new ChatComponentText(format(header)));
  64.     }
  65.     public void addFooter(String footer) {
  66.         footers.add(new ChatComponentText(format(footer)));
  67.     }
  68.     private String format(String msg) {
  69.         return ChatColor.translateAlternateColorCodes('&', msg);
  70.     }
  71.  }
  72.  
Add Comment
Please, Sign In to add comment