|
24 | 24 | import com.velocitypowered.api.event.connection.PluginMessageEvent; |
25 | 25 | import com.velocitypowered.api.event.player.CookieReceiveEvent; |
26 | 26 | import com.velocitypowered.api.event.player.PlayerChannelRegisterEvent; |
27 | | -import com.velocitypowered.api.event.player.PlayerChannelUnregisterEvent; |
28 | 27 | import com.velocitypowered.api.event.player.PlayerClientBrandEvent; |
29 | 28 | import com.velocitypowered.api.event.player.TabCompleteEvent; |
30 | 29 | import com.velocitypowered.api.event.player.configuration.PlayerEnteredConfigurationEvent; |
@@ -319,12 +318,8 @@ public boolean handle(PluginMessagePacket packet) { |
319 | 318 | new PlayerChannelRegisterEvent(player, ImmutableList.copyOf(channels))); |
320 | 319 | backendConn.write(packet.retain()); |
321 | 320 | } else if (PluginMessageUtil.isUnregister(packet)) { |
322 | | - List<ChannelIdentifier> channels = |
323 | | - PluginMessageUtil.getChannels(0, packet, this.player.getProtocolVersion()); |
324 | | - player.getClientsideChannels().removeAll(channels); |
325 | | - server.getEventManager() |
326 | | - .fireAndForget( |
327 | | - new PlayerChannelUnregisterEvent(player, ImmutableList.copyOf(channels))); |
| 321 | + player.getClientsideChannels() |
| 322 | + .removeAll(PluginMessageUtil.getChannels(0, packet, this.player.getProtocolVersion())); |
328 | 323 | backendConn.write(packet.retain()); |
329 | 324 | } else if (PluginMessageUtil.isMcBrand(packet)) { |
330 | 325 | String brand = PluginMessageUtil.readBrandMessage(packet.content()); |
@@ -540,13 +535,9 @@ public CompletableFuture<Void> doSwitch() { |
540 | 535 |
|
541 | 536 | // Config state clears everything in the client. No need to clear later. |
542 | 537 | spawned = false; |
| 538 | + serverBossBars.clear(); |
543 | 539 | player.clearPlayerListHeaderAndFooterSilent(); |
544 | 540 | player.getTabList().clearAllSilent(); |
545 | | - if (player.getProtocolVersion().noLessThan(ProtocolVersion.MINECRAFT_1_20_2)) { |
546 | | - player.getBossBarManager().dropPackets(); |
547 | | - } else { |
548 | | - serverBossBars.clear(); |
549 | | - } |
550 | 541 | } |
551 | 542 |
|
552 | 543 | player.switchToConfigState(); |
@@ -584,20 +575,15 @@ public void handleBackendJoinGame(JoinGamePacket joinGame, VelocityServerConnect |
584 | 575 | } |
585 | 576 | } |
586 | 577 |
|
587 | | - destination.setEntityId(joinGame.getEntityId()); // used for sound api |
588 | | - if (player.getProtocolVersion().noLessThan(ProtocolVersion.MINECRAFT_1_20_2)) { |
589 | | - player.getBossBarManager().sendBossBars(); |
590 | | - } else { |
591 | | - // Remove previous boss bars. These don't get cleared when sending JoinGame (up until 1.20.2), |
592 | | - // thus the need to track them. |
593 | | - for (UUID serverBossBar : serverBossBars) { |
594 | | - BossBarPacket deletePacket = new BossBarPacket(); |
595 | | - deletePacket.setUuid(serverBossBar); |
596 | | - deletePacket.setAction(BossBarPacket.REMOVE); |
597 | | - player.getConnection().delayedWrite(deletePacket); |
598 | | - } |
599 | | - serverBossBars.clear(); |
| 578 | + // Remove previous boss bars. These don't get cleared when sending JoinGame, thus the need to |
| 579 | + // track them. |
| 580 | + for (UUID serverBossBar : serverBossBars) { |
| 581 | + BossBarPacket deletePacket = new BossBarPacket(); |
| 582 | + deletePacket.setUuid(serverBossBar); |
| 583 | + deletePacket.setAction(BossBarPacket.REMOVE); |
| 584 | + player.getConnection().delayedWrite(deletePacket); |
600 | 585 | } |
| 586 | + serverBossBars.clear(); |
601 | 587 |
|
602 | 588 | // Tell the server about the proxy's plugin message channels. |
603 | 589 | ProtocolVersion serverVersion = serverMc.getProtocolVersion(); |
@@ -708,35 +694,23 @@ private boolean handleCommandTabComplete(TabCompleteRequestPacket packet) { |
708 | 694 | return; |
709 | 695 | } |
710 | 696 |
|
711 | | - int startPos = -1; |
712 | | - for (var suggestion : suggestions.getList()) { |
713 | | - if (startPos == -1 || startPos > suggestion.getRange().getStart()) { |
714 | | - startPos = suggestion.getRange().getStart(); |
| 697 | + List<Offer> offers = new ArrayList<>(); |
| 698 | + for (Suggestion suggestion : suggestions.getList()) { |
| 699 | + String offer = suggestion.getText(); |
| 700 | + ComponentHolder tooltip = null; |
| 701 | + if (suggestion.getTooltip() instanceof ComponentLike componentLike) { |
| 702 | + tooltip = new ComponentHolder(player.getProtocolVersion(), componentLike.asComponent()); |
| 703 | + } else if (suggestion.getTooltip() != null) { |
| 704 | + tooltip = new ComponentHolder(player.getProtocolVersion(), Component.text(suggestion.getTooltip().getString())); |
715 | 705 | } |
| 706 | + offers.add(new Offer(offer, tooltip)); |
716 | 707 | } |
717 | | - |
| 708 | + int startPos = packet.getCommand().lastIndexOf(' ') + 1; |
718 | 709 | if (startPos > 0) { |
719 | | - List<Offer> offers = new ArrayList<>(); |
720 | | - for (Suggestion suggestion : suggestions.getList()) { |
721 | | - String offer; |
722 | | - if (suggestion.getRange().getStart() == startPos) { |
723 | | - offer = suggestion.getText(); |
724 | | - } else { |
725 | | - offer = command.substring(startPos, suggestion.getRange().getStart()) + suggestion.getText(); |
726 | | - } |
727 | | - ComponentHolder tooltip = null; |
728 | | - if (suggestion.getTooltip() instanceof ComponentLike componentLike) { |
729 | | - tooltip = new ComponentHolder(player.getProtocolVersion(), componentLike.asComponent()); |
730 | | - } else if (suggestion.getTooltip() != null) { |
731 | | - tooltip = new ComponentHolder(player.getProtocolVersion(), Component.text(suggestion.getTooltip().getString())); |
732 | | - } |
733 | | - offers.add(new Offer(offer, tooltip)); |
734 | | - } |
735 | | - |
736 | 710 | TabCompleteResponsePacket resp = new TabCompleteResponsePacket(); |
737 | 711 | resp.setTransactionId(packet.getTransactionId()); |
738 | | - resp.setStart(startPos + 1); |
739 | | - resp.setLength(packet.getCommand().length() - startPos - 1); |
| 712 | + resp.setStart(startPos); |
| 713 | + resp.setLength(packet.getCommand().length() - startPos); |
740 | 714 | resp.getOffers().addAll(offers); |
741 | 715 | player.getConnection().write(resp); |
742 | 716 | } |
|
0 commit comments