Delay tab removal to hopefully prevent skins not loading on login
This commit is contained in:
		| @@ -318,20 +318,22 @@ public class DisguiseListener implements Listener { | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onLogin(PlayerRegisterChannelEvent event) { | ||||
|         Player player = event.getPlayer(); | ||||
|  | ||||
|         // If it's not a forge handshake, or we didn't register it | ||||
|         if (!event.getChannel().equals("fml:handshake") || | ||||
|                 !Bukkit.getMessenger().isOutgoingChannelRegistered(LibsDisguises.getInstance(), "fml:handshake")) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         event.getPlayer() | ||||
|                 .sendPluginMessage(LibsDisguises.getInstance(), "fml:handshake", ModdedManager.getFmlHandshake()); | ||||
|         player.sendPluginMessage(LibsDisguises.getInstance(), "fml:handshake", ModdedManager.getFmlHandshake()); | ||||
|     } | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onJoin(PlayerJoinEvent event) { | ||||
|         Player p = event.getPlayer(); | ||||
|  | ||||
|         p.removeMetadata("ld_loggedin", LibsDisguises.getInstance()); | ||||
|         plugin.getUpdateChecker().notifyUpdate(p); | ||||
|  | ||||
|         if (DisguiseConfig.isSaveGameProfiles() && DisguiseConfig.isUpdateGameProfiles() && | ||||
|   | ||||
| @@ -37,6 +37,7 @@ public class PacketsManager { | ||||
|  | ||||
|         ProtocolLibrary.getProtocolManager().addPacketListener(clientInteractEntityListener); | ||||
|         ProtocolLibrary.getProtocolManager().addPacketListener(tabListListener); | ||||
|         ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListenerChannelRegister()); | ||||
|  | ||||
|         // Now I call this and the main listener is registered! | ||||
|         setupMainPacketsListener(); | ||||
|   | ||||
| @@ -8,6 +8,7 @@ import com.comphenix.protocol.wrappers.WrappedAttribute; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher; | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
| import me.libraryaddict.disguise.DisguiseConfig; | ||||
| import me.libraryaddict.disguise.LibsDisguises; | ||||
| import me.libraryaddict.disguise.disguisetypes.*; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; | ||||
| @@ -28,6 +29,7 @@ import org.bukkit.entity.EntityType; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.inventory.EquipmentSlot; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| import org.bukkit.metadata.FixedMetadataValue; | ||||
| import org.bukkit.util.Vector; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| @@ -178,9 +180,24 @@ public class PacketHandlerSpawn implements IPacketHandler { | ||||
|  | ||||
|                 if (LibsPremium.getPaidInformation() == null || | ||||
|                         LibsPremium.getPaidInformation().getBuildNumber().matches("#[0-9]+")) { | ||||
|                     if (!observer.hasMetadata("ld_loggedin")) { | ||||
|                         ArrayList<PacketContainer> toSend; | ||||
|  | ||||
|                         if (observer.hasMetadata("ld_tabsend") && !observer.getMetadata("ld_tabsend").isEmpty()) { | ||||
|                             toSend = (ArrayList<PacketContainer>) observer.getMetadata("ld_tabsend").get(0).value(); | ||||
|                         } else { | ||||
|                             toSend = new ArrayList<>(); | ||||
|  | ||||
|                             observer.setMetadata("ld_tabsend", | ||||
|                                     new FixedMetadataValue(LibsDisguises.getInstance(), toSend)); | ||||
|                         } | ||||
|  | ||||
|                         toSend.add(deleteTab); | ||||
|                     } else { | ||||
|                         packets.addDelayedPacket(deleteTab, DisguiseConfig.getTablistRemoveDelay()); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // Spawn the player | ||||
|             PacketContainer spawnPlayer = new PacketContainer(PacketType.Play.Server.NAMED_ENTITY_SPAWN); | ||||
|   | ||||
| @@ -0,0 +1,59 @@ | ||||
| package me.libraryaddict.disguise.utilities.packets.packetlisteners; | ||||
|  | ||||
| import com.comphenix.protocol.PacketType; | ||||
| import com.comphenix.protocol.ProtocolLibrary; | ||||
| import com.comphenix.protocol.events.PacketAdapter; | ||||
| import com.comphenix.protocol.events.PacketContainer; | ||||
| import com.comphenix.protocol.events.PacketEvent; | ||||
| import me.libraryaddict.disguise.LibsDisguises; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.metadata.FixedMetadataValue; | ||||
| import org.bukkit.scheduler.BukkitRunnable; | ||||
|  | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 21/05/2020. | ||||
|  */ | ||||
| public class PacketListenerChannelRegister extends PacketAdapter { | ||||
|     public PacketListenerChannelRegister() { | ||||
|         super(LibsDisguises.getInstance(), PacketType.Play.Client.CUSTOM_PAYLOAD); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onPacketReceiving(PacketEvent event) { | ||||
|         if (!event.getPacket().getMinecraftKeys().read(0).getFullKey().equals("minecraft:brand")) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         new BukkitRunnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 Player player = event.getPlayer(); | ||||
|  | ||||
|                 if (player.hasMetadata("ld_loggedin")) { | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 if (player.hasMetadata("ld_tabsend") && !player.getMetadata("ld_tabsend").isEmpty()) { | ||||
|                     ArrayList<PacketContainer> packets = (ArrayList<PacketContainer>) player.getMetadata("ld_tabsend") | ||||
|                             .get(0).value(); | ||||
|  | ||||
|                     player.removeMetadata("ld_tabsend", LibsDisguises.getInstance()); | ||||
|  | ||||
|                     try { | ||||
|                         for (PacketContainer packet : packets) { | ||||
|                             ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false); | ||||
|                         } | ||||
|                     } | ||||
|                     catch (InvocationTargetException e) { | ||||
|                         e.printStackTrace(); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 player.setMetadata("ld_loggedin", new FixedMetadataValue(LibsDisguises.getInstance(), true)); | ||||
|             } | ||||
|         }.runTaskLater(LibsDisguises.getInstance(), 5); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user