mirror of
https://github.com/GeyserMC/GeyserConnect.git
synced 2025-06-26 06:15:21 +02:00
Fix server images not loading straight away on Win10
This commit is contained in:
parent
bb5628acf6
commit
4e5e717ff6
4 changed files with 39 additions and 3 deletions
|
@ -23,4 +23,4 @@ GeyserConnect is a server that Minecraft: Bedrock Edition clients can connect to
|
|||
- [ ] Remove
|
||||
- [ ] Stop Geyser server after its idle for a while
|
||||
- [x] Config file
|
||||
- [ ] Fix server images not loading straight away on Win10
|
||||
- [x] Fix server images not loading straight away on Win10
|
||||
|
|
|
@ -34,6 +34,7 @@ import com.nimbusds.jose.JWSObject;
|
|||
import com.nimbusds.jose.crypto.factories.DefaultJWSVerifierFactory;
|
||||
import com.nukkitx.network.util.DisconnectReason;
|
||||
import com.nukkitx.protocol.bedrock.BedrockServerSession;
|
||||
import com.nukkitx.protocol.bedrock.data.Attribute;
|
||||
import com.nukkitx.protocol.bedrock.handler.BedrockPacketHandler;
|
||||
import com.nukkitx.protocol.bedrock.packet.*;
|
||||
import com.nukkitx.protocol.bedrock.util.EncryptionUtils;
|
||||
|
@ -43,9 +44,13 @@ import org.geysermc.common.window.response.SimpleFormResponse;
|
|||
import org.geysermc.connect.ui.FormID;
|
||||
import org.geysermc.connect.ui.UIHandler;
|
||||
import org.geysermc.connect.utils.Player;
|
||||
import org.geysermc.connector.entity.attribute.AttributeType;
|
||||
import org.geysermc.connector.utils.AttributeUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.interfaces.ECPublicKey;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHandler implements BedrockPacketHandler {
|
||||
|
||||
|
@ -210,6 +215,10 @@ public class PacketHandler implements BedrockPacketHandler {
|
|||
UIHandler.handleDirectConnectResponse(player, (CustomFormResponse) window.getResponse());
|
||||
break;
|
||||
|
||||
case EDIT_SERVERS:
|
||||
UIHandler.handleEditServerListResponse(player, (SimpleFormResponse) window.getResponse());
|
||||
break;
|
||||
|
||||
default:
|
||||
player.resendWindow();
|
||||
break;
|
||||
|
@ -218,4 +227,17 @@ public class PacketHandler implements BedrockPacketHandler {
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handle(NetworkStackLatencyPacket packet) {
|
||||
// This is to fix a bug in the client where it doesn't load form images
|
||||
UpdateAttributesPacket updateAttributesPacket = new UpdateAttributesPacket();
|
||||
updateAttributesPacket.setRuntimeEntityId(1);
|
||||
List<Attribute> attributes = new ArrayList<>();
|
||||
attributes.add(AttributeUtils.getBedrockAttribute(AttributeType.EXPERIENCE_LEVEL.getAttribute(0f)));
|
||||
updateAttributesPacket.setAttributes(attributes);
|
||||
session.sendPacket(updateAttributesPacket);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,6 +55,8 @@ public class UIHandler {
|
|||
|
||||
// Add a button for each global server
|
||||
for (Server server : MasterServer.getInstance().getGeyserConnectConfig().getServers()) {
|
||||
// These images would be better if there was a default to fall back on
|
||||
// But that would require a web api as bedrock doesn't support doing that
|
||||
window.getButtons().add(new FormButton(server.toString(), new FormImage(FormImage.FormImageType.URL, "https://eu.mc-api.net/v3/server/favicon/" + server.getAddress() + ":" + server.getPort() + ".png")));
|
||||
}
|
||||
|
||||
|
@ -127,7 +129,7 @@ public class UIHandler {
|
|||
// Cant be done in a switch as we need to calculate the last 2 buttons
|
||||
|
||||
if ((!MasterServer.getInstance().getGeyserConnectConfig().getCustomServers().isEnabled() && data.getClickedButtonId() == servers.size()) || data.getClickedButtonId() == servers.size() + 2) {
|
||||
player.getSession().disconnect("Bye!"); // Seems to be super slow if we specify an empty string
|
||||
player.getSession().disconnect("disconnect.disconnected");
|
||||
} else if (data.getClickedButtonId() == servers.size()) {
|
||||
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));
|
||||
} else if (data.getClickedButtonId() == servers.size() + 1) {
|
||||
|
|
|
@ -31,16 +31,21 @@ import com.nukkitx.math.vector.Vector2f;
|
|||
import com.nukkitx.math.vector.Vector3f;
|
||||
import com.nukkitx.math.vector.Vector3i;
|
||||
import com.nukkitx.protocol.bedrock.BedrockServerSession;
|
||||
import com.nukkitx.protocol.bedrock.data.Attribute;
|
||||
import com.nukkitx.protocol.bedrock.data.GamePublishSetting;
|
||||
import com.nukkitx.protocol.bedrock.data.GameRuleData;
|
||||
import com.nukkitx.protocol.bedrock.data.PlayerPermission;
|
||||
import com.nukkitx.protocol.bedrock.packet.*;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.geysermc.common.window.FormWindow;
|
||||
import org.geysermc.connect.MasterServer;
|
||||
import org.geysermc.connect.ui.FormID;
|
||||
import org.geysermc.connect.ui.UIHandler;
|
||||
import org.geysermc.connector.entity.attribute.AttributeType;
|
||||
import org.geysermc.connector.utils.AttributeUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -56,6 +61,7 @@ public class Player {
|
|||
private BedrockServerSession session;
|
||||
|
||||
private final List<Server> servers = new ArrayList<>();
|
||||
private final Long2ObjectMap<ModalFormRequestPacket> forms = new Long2ObjectOpenHashMap<>();
|
||||
|
||||
private FormWindow currentWindow;
|
||||
private FormID currentWindowId;
|
||||
|
@ -169,7 +175,13 @@ public class Player {
|
|||
ModalFormRequestPacket modalFormRequestPacket = new ModalFormRequestPacket();
|
||||
modalFormRequestPacket.setFormId(id.ordinal());
|
||||
modalFormRequestPacket.setFormData(window.getJSONData());
|
||||
session.sendPacketImmediately(modalFormRequestPacket);
|
||||
session.sendPacket(modalFormRequestPacket);
|
||||
|
||||
// This packet is used to fix the image loading bug
|
||||
NetworkStackLatencyPacket networkStackLatencyPacket = new NetworkStackLatencyPacket();
|
||||
networkStackLatencyPacket.setSendBack(true);
|
||||
networkStackLatencyPacket.setTimestamp(System.currentTimeMillis());
|
||||
session.sendPacket(networkStackLatencyPacket);
|
||||
}
|
||||
|
||||
public void resendWindow() {
|
||||
|
|
Loading…
Add table
Reference in a new issue