NEZNAMY / TAB

"That" TAB plugin.
Apache License 2.0
896 stars 243 forks source link

Per World Playerlist join issue #1200

Closed freddycor closed 10 months ago

freddycor commented 10 months ago

Server version

1.8.8

TAB version

4.1.2

Describe the bug

Hi, I'm using the option "per world playerlist" and it works well, the only problem is that when a new player joins the server. All the other player that are not supposed to see him, can see his name in tab. As soon as he changes world it's all good, but until that he's visible from all the players in the server

If he returns to the lobby after joining another world it's all ok too. The problem is only present on first join

Thanks in Advance

Expected behavior

The player in the lobby world (first join world) should not be visible from the players in the other worlds

Steps to reproduce

Additional info

No response

Checklist

freddycor commented 10 months ago

Sorry I missed the Server type, It's Paper 1.8.8 with Java 11

NEZNAMY commented 10 months ago

Try without any other plugins. TAB does not check whether player is new or not.

freddycor commented 10 months ago

With only TAB installed it's all good. (I thought I already tried without other plugins, I'm sorry). I'll try to find what plugin causes this issue.

freddycor commented 10 months ago

If someone one day asks the same question, It was "WorldResourcePacks" plugin causing this issue

Thanks for the Help!

freddycor commented 10 months ago

I discovered that SkinsRestorer was the main cause of this, other than WorldResourcePacks. Considering that both the plugins are responsible of injecting resourcepacks or skins to the player, maybe it make conflicts with TAB going out of sync, don't know. I'm saying this because both the resourcepack and skins provoke a little lag client-side when they apply skin/pack.

NEZNAMY commented 10 months ago

SkinsRestorer sends respawn packets and it looks like it doesn't check whether player is hidden to viewer or not.

freddycor commented 10 months ago

Hi, sorry If i'm bothering you in this closed report. I'm trying to make a plugin that, as soon as Skinsrestorer applies the skin, checks and set all "hidenametag" to all online players in the correct way, hiding the player that has been shown in the whole server by Skinsrestorer.

I have two questions

1: is there a method that I can use trough the API like "refresh playerlist using the parameters I set in the config"?

I looked for it but I don't find it in the documentation, so maybe it doesn't exists, so here's the question n.2

2: Using the api I'm trying to do the question n.1 action manually, but I don't know why the server doesn't hide the nametag of the player that is supposed to be hidden (I don't get any errors either from the console and TAB errors.log).

At the moment I removed all the code I made to do a simple one but this doesn't work too. I'm using strings to make sure it catches the correct players, however I tried with p.GetPlayer too. I made a system.out that picks the player name from tabplayer.getName() and it outputs the correct name.

image

If you could tell me where the error is it would be so good, I'm becoming crazy with that.

Thank you so much again

NEZNAMY commented 10 months ago

Hiding nametag has nothing to do with per world playerlist. It does not even hide players in game. Hidden nametag is a part of teams, which is a completely separate function from showing/hiding players. What if you hide the player's nametag for everyone (without using second parameter), would that work? Is there a chance you disabled anti-override for teams, which caused another plugin to override it?

freddycor commented 10 months ago

Yeah I tried it using only one parameter too. However I'll try it again using multiple way to get the right player. For the anti-override I checked it, It's all on true, even because I'm using only TAB on the server atm.

NEZNAMY commented 10 months ago

What does that have to do with per world playerlist though? Are you using vanilla client? Are you using unlimited nametags? Should still be compatible, but disabling it for testing won't hurt. Are you sure your code ran fully without an error?

freddycor commented 10 months ago

Oooooh wait a sec, So HideNameTag is used to hide the nametag on top of the player, and not the Tab one? Omg I'm so stupid yeah, I see it working in the Nametag

So there is no way to access tab playerlist trough the API?

freddycor commented 10 months ago

If not, Is there a way, if you know, to hide player in tab to another player using bukkit api? Or I have to abandon this project?

Thanks a lot for the help and sorry for misunderstanding "hideNameTag"

NEZNAMY commented 10 months ago

... and this is why support is no longer provided. The API only allows you to alter behavior of existing features. It does not allow you to do things outside of scope of the plugin. Per world playerlist feature does not have an API, because back when feature requests were still available, nobody requested this, because there was no reason to. I am not going to add new API to compensate for bugs in other plugins. I did that in the past, but it's gone too far over the years.

You can use Player#hidePlayer(Player) Bukkit API method, which is what the plugin also uses.

freddycor commented 10 months ago

Thank you very much for the help and the patience, you saved me!