forked from git-mirrors/GeyserConnect
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
|
- [ ] Remove
|
||||||
- [ ] Stop Geyser server after its idle for a while
|
- [ ] Stop Geyser server after its idle for a while
|
||||||
- [x] Config file
|
- [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.nimbusds.jose.crypto.factories.DefaultJWSVerifierFactory;
|
||||||
import com.nukkitx.network.util.DisconnectReason;
|
import com.nukkitx.network.util.DisconnectReason;
|
||||||
import com.nukkitx.protocol.bedrock.BedrockServerSession;
|
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.handler.BedrockPacketHandler;
|
||||||
import com.nukkitx.protocol.bedrock.packet.*;
|
import com.nukkitx.protocol.bedrock.packet.*;
|
||||||
import com.nukkitx.protocol.bedrock.util.EncryptionUtils;
|
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.FormID;
|
||||||
import org.geysermc.connect.ui.UIHandler;
|
import org.geysermc.connect.ui.UIHandler;
|
||||||
import org.geysermc.connect.utils.Player;
|
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.io.IOException;
|
||||||
import java.security.interfaces.ECPublicKey;
|
import java.security.interfaces.ECPublicKey;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class PacketHandler implements BedrockPacketHandler {
|
public class PacketHandler implements BedrockPacketHandler {
|
||||||
|
|
||||||
|
@ -210,6 +215,10 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
UIHandler.handleDirectConnectResponse(player, (CustomFormResponse) window.getResponse());
|
UIHandler.handleDirectConnectResponse(player, (CustomFormResponse) window.getResponse());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EDIT_SERVERS:
|
||||||
|
UIHandler.handleEditServerListResponse(player, (SimpleFormResponse) window.getResponse());
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
player.resendWindow();
|
player.resendWindow();
|
||||||
break;
|
break;
|
||||||
|
@ -218,4 +227,17 @@ public class PacketHandler implements BedrockPacketHandler {
|
||||||
|
|
||||||
return true;
|
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
|
// Add a button for each global server
|
||||||
for (Server server : MasterServer.getInstance().getGeyserConnectConfig().getServers()) {
|
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")));
|
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
|
// 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) {
|
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()) {
|
} else if (data.getClickedButtonId() == servers.size()) {
|
||||||
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));
|
player.sendWindow(FormID.EDIT_SERVERS, getEditServerList(player.getServers()));
|
||||||
} else if (data.getClickedButtonId() == servers.size() + 1) {
|
} 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.Vector3f;
|
||||||
import com.nukkitx.math.vector.Vector3i;
|
import com.nukkitx.math.vector.Vector3i;
|
||||||
import com.nukkitx.protocol.bedrock.BedrockServerSession;
|
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.GamePublishSetting;
|
||||||
import com.nukkitx.protocol.bedrock.data.GameRuleData;
|
import com.nukkitx.protocol.bedrock.data.GameRuleData;
|
||||||
import com.nukkitx.protocol.bedrock.data.PlayerPermission;
|
import com.nukkitx.protocol.bedrock.data.PlayerPermission;
|
||||||
import com.nukkitx.protocol.bedrock.packet.*;
|
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.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import org.geysermc.common.window.FormWindow;
|
import org.geysermc.common.window.FormWindow;
|
||||||
import org.geysermc.connect.MasterServer;
|
import org.geysermc.connect.MasterServer;
|
||||||
import org.geysermc.connect.ui.FormID;
|
import org.geysermc.connect.ui.FormID;
|
||||||
import org.geysermc.connect.ui.UIHandler;
|
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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -56,6 +61,7 @@ public class Player {
|
||||||
private BedrockServerSession session;
|
private BedrockServerSession session;
|
||||||
|
|
||||||
private final List<Server> servers = new ArrayList<>();
|
private final List<Server> servers = new ArrayList<>();
|
||||||
|
private final Long2ObjectMap<ModalFormRequestPacket> forms = new Long2ObjectOpenHashMap<>();
|
||||||
|
|
||||||
private FormWindow currentWindow;
|
private FormWindow currentWindow;
|
||||||
private FormID currentWindowId;
|
private FormID currentWindowId;
|
||||||
|
@ -169,7 +175,13 @@ public class Player {
|
||||||
ModalFormRequestPacket modalFormRequestPacket = new ModalFormRequestPacket();
|
ModalFormRequestPacket modalFormRequestPacket = new ModalFormRequestPacket();
|
||||||
modalFormRequestPacket.setFormId(id.ordinal());
|
modalFormRequestPacket.setFormId(id.ordinal());
|
||||||
modalFormRequestPacket.setFormData(window.getJSONData());
|
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() {
|
public void resendWindow() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue