diff --git a/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java b/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java index 768c5f59..88e7f5fb 100644 --- a/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java +++ b/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java @@ -27,6 +27,7 @@ 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.datasource.DataSource; import fr.xephi.authme.service.BukkitService; import org.bukkit.Material; @@ -48,10 +49,12 @@ class InventoryPacketAdapter extends PacketAdapter { private static final int HOTBAR_SIZE = 9; private final PlayerCache playerCache; + private final DataSource dataSource; - InventoryPacketAdapter(AuthMe plugin, PlayerCache playerCache) { + InventoryPacketAdapter(AuthMe plugin, PlayerCache playerCache, DataSource dataSource) { super(plugin, PacketType.Play.Server.SET_SLOT, PacketType.Play.Server.WINDOW_ITEMS); this.playerCache = playerCache; + this.dataSource = dataSource; } @Override @@ -59,20 +62,22 @@ class InventoryPacketAdapter extends PacketAdapter { Player player = packetEvent.getPlayer(); PacketContainer packet = packetEvent.getPacket(); - byte windowId = packet.getIntegers().read(0).byteValue(); - if (windowId == PLAYER_INVENTORY && !playerCache.isAuthenticated(player.getName())) { + int windowId = packet.getIntegers().read(0); + if (windowId == PLAYER_INVENTORY && shouldHideInventory(player.getName())) { packetEvent.setCancelled(true); } } - public void register(BukkitService bukkitService, boolean hideNow) { + public void register(BukkitService bukkitService) { ProtocolLibrary.getProtocolManager().addPacketListener(this); - if (hideNow) { - bukkitService.getOnlinePlayers().stream() - .filter(player -> playerCache.isAuthenticated(player.getName())) - .forEach(this::sendBlankInventoryPacket); - } + bukkitService.getOnlinePlayers().stream() + .filter(player -> shouldHideInventory(player.getName())) + .forEach(this::sendBlankInventoryPacket); + } + + private boolean shouldHideInventory(String playerName) { + return !playerCache.isAuthenticated(playerName) && dataSource.isAuthAvailable(playerName); } public void unregister() { diff --git a/src/main/java/fr/xephi/authme/listener/protocollib/ProtocolLibService.java b/src/main/java/fr/xephi/authme/listener/protocollib/ProtocolLibService.java index bc1654bb..0804c196 100644 --- a/src/main/java/fr/xephi/authme/listener/protocollib/ProtocolLibService.java +++ b/src/main/java/fr/xephi/authme/listener/protocollib/ProtocolLibService.java @@ -4,6 +4,7 @@ import ch.jalu.injector.annotations.NoFieldScan; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.data.auth.PlayerCache; +import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.initialization.SettingsDependent; import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.settings.Settings; @@ -28,12 +29,15 @@ public class ProtocolLibService implements SettingsDependent { private AuthMe plugin; private BukkitService bukkitService; private PlayerCache playerCache; + private DataSource dataSource; @Inject - ProtocolLibService(AuthMe plugin, Settings settings, BukkitService bukkitService, PlayerCache playerCache) { + ProtocolLibService(AuthMe plugin, Settings settings, BukkitService bukkitService, PlayerCache playerCache, + DataSource dataSource) { this.plugin = plugin; this.bukkitService = bukkitService; this.playerCache = playerCache; + this.dataSource = dataSource; reload(settings); } @@ -59,8 +63,8 @@ public class ProtocolLibService implements SettingsDependent { 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(bukkitService, true); + inventoryPacketAdapter = new InventoryPacketAdapter(plugin, playerCache, dataSource); + inventoryPacketAdapter.register(bukkitService); } } else if (inventoryPacketAdapter != null) { inventoryPacketAdapter.unregister();