Hide the inventory for online players on reload (Related #1709)

This commit is contained in:
games647 2018-12-25 16:58:03 +01:00
parent 75e1e5ce51
commit 2f7672b489
No known key found for this signature in database
GPG Key ID: BFC68C8708713A88
2 changed files with 11 additions and 2 deletions

View File

@ -27,6 +27,8 @@ import com.comphenix.protocol.reflect.StructureModifier;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.data.auth.PlayerCache;
import fr.xephi.authme.service.BukkitService;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@ -63,8 +65,14 @@ class InventoryPacketAdapter extends PacketAdapter {
}
}
public void register() {
public void register(BukkitService bukkitService, boolean hideNow) {
ProtocolLibrary.getProtocolManager().addPacketListener(this);
if (hideNow) {
bukkitService.getOnlinePlayers().stream()
.filter(player -> playerCache.isAuthenticated(player.getName()))
.forEach(this::sendBlankInventoryPacket);
}
}
public void unregister() {

View File

@ -58,8 +58,9 @@ public class ProtocolLibService implements SettingsDependent {
// Set up packet adapters
if (protectInvBeforeLogin) {
if (inventoryPacketAdapter == null) {
// register the packet listener and start hiding it for all already online players (reload)
inventoryPacketAdapter = new InventoryPacketAdapter(plugin, playerCache);
inventoryPacketAdapter.register();
inventoryPacketAdapter.register(bukkitService, true);
}
} else if (inventoryPacketAdapter != null) {
inventoryPacketAdapter.unregister();