Solved Hide players from another world and see players from the same world

Discussion in 'Plugin Development' started by LyFlow, Aug 30, 2020.

Thread Status:
Not open for further replies.
  1. Offline

    LyFlow

    Hello, i've make a plugin for hide players from another world and see players from the same world.
    Exemple : if a player is in the nether, then all player in the overworld don't see the player in the nether in tablist, and the player in the nether can just see the players in the same world

    But i have problem with this, Let's imagine : 2 players on the same world, they see each other, one changes world and the 2 don't see each other anymore ! The other decides to join him then he changes world to go to see him except that when he joins him the 2 players do not see each other or sometimes one sees him and not the other!

    I am on 1.8.8

    Code:
    public class Main extends JavaPlugin implements Listener {
    
        @Override
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this, this);
        }
    
        @Override
        public void onDisable(){
        }
    
        @EventHandler
        public void onPlayerChangeWorld(PlayerChangedWorldEvent event){
            Player player = event.getPlayer();
    
            player.sendMessage("CHANGE WORLD EVENT !");
    
            for (World world : Bukkit.getWorlds()) {
                if(world.getName().equalsIgnoreCase(player.getWorld().getName())){
                    PlayerHideAndSeeUtils.playerSeeOtherPlayers(player, world.getPlayers());
                    continue;
                }
                PlayerHideAndSeeUtils.playerHideOtherPlayers(player, world.getPlayers());
            }
    
        }
    
        @EventHandler
        public void onInteractEvent(PlayerInteractEvent event){
            Player player = event.getPlayer();
    
            if(event.getClickedBlock() != null){
    
                player.teleport(Bukkit.getWorld("MineNote").getSpawnLocation());
    
            }
    
        }
    
    }
    Code:
    public class PlayerHideAndSeeUtils {
    
        public static void playerHideOtherPlayers(Player player, List<Player> players){
            for (Player playersHide : players) {
    
                if(playersHide.getUniqueId().equals(player.getUniqueId())) continue;
    
                playersHide.hidePlayer(player);
    
                player.hidePlayer(playersHide);
                //REMOVE PLAYERS OF THE OTHER WORLD AND REMOVE THE PLAYER FOR THE OTHER PLAYERS
                // ((CraftPlayer) player).getHandle().playerConnection.sendPacket(
                //       new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, ((CraftPlayer) playersHide).getHandle()));
    
                System.out.println(player.getName()+" hide "+playersHide.getName());
    
                //((CraftPlayer) playersHide).getHandle().playerConnection.sendPacket(
                //        new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, ((CraftPlayer) player).getHandle()));
    
                System.out.println(playersHide.getName()+" hide "+player.getName());
    
            }
        }
    
        public static void playerSeeOtherPlayers(Player player, List<Player> players){
            for (Player playersSee : players) {
    
                if(playersSee.getUniqueId().equals(player.getUniqueId())) continue;
    
                playersSee.canSee(player);
    
                player.canSee(playersSee);
    
                //SEE PLAYERS IN THE SAME WORLD AND SEE THE PLAYER FOR THE OTHER PLAYERS
                //((CraftPlayer) player).getHandle().playerConnection.sendPacket(
                //       new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, ((CraftPlayer) playersSee).getHandle()));
    
                System.out.println(player.getName()+" see "+playersSee.getName());
    
                // ((CraftPlayer) playersSee).getHandle().playerConnection.sendPacket(
                //       new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, ((CraftPlayer) player).getHandle()));
    
                System.out.println(playersSee.getName()+" see "+player.getName());
    
            }
        }
    
    }
     
  2. Offline

    LyFlow

Thread Status:
Not open for further replies.

Share This Page