Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-27 00:23:03 +01:00
Some more API changes
Dieser Commit ist enthalten in:
Ursprung
80588a07bd
Commit
ab6e0d1e16
@ -28,6 +28,7 @@ package org.geysermc.api;
|
|||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
import org.checkerframework.common.value.qual.IntRange;
|
||||||
import org.geysermc.api.connection.Connection;
|
import org.geysermc.api.connection.Connection;
|
||||||
import org.geysermc.cumulus.form.Form;
|
import org.geysermc.cumulus.form.Form;
|
||||||
import org.geysermc.cumulus.form.util.FormBuilder;
|
import org.geysermc.cumulus.form.util.FormBuilder;
|
||||||
@ -66,11 +67,34 @@ public interface GeyserApiBase {
|
|||||||
*/
|
*/
|
||||||
boolean isBedrockPlayer(@NonNull UUID uuid);
|
boolean isBedrockPlayer(@NonNull UUID uuid);
|
||||||
|
|
||||||
boolean sendForm(UUID uuid, Form form);
|
/**
|
||||||
|
* Sends a form to the given connection and opens it.
|
||||||
|
*
|
||||||
|
* @param uuid the uuid of the connection to open it on
|
||||||
|
* @param form the form to send
|
||||||
|
* @return whether the form was successfully sent
|
||||||
|
*/
|
||||||
|
boolean sendForm(@NonNull UUID uuid, @NonNull Form form);
|
||||||
|
|
||||||
boolean sendForm(UUID uuid, FormBuilder<?, ?, ?> formBuilder);
|
/**
|
||||||
|
* Sends a form to the given connection and opens it.
|
||||||
|
*
|
||||||
|
* @param uuid the uuid of the connection to open it on
|
||||||
|
* @param formBuilder the formBuilder to send
|
||||||
|
* @return whether the form was successfully sent
|
||||||
|
*/
|
||||||
|
boolean sendForm(@NonNull UUID uuid, @NonNull FormBuilder<?, ?, ?> formBuilder);
|
||||||
|
|
||||||
boolean transfer(UUID uuid, String address, int port);
|
/**
|
||||||
|
* Transfer the given connection to a server. A Bedrock player can successfully transfer to the same server they are
|
||||||
|
* currently playing on.
|
||||||
|
*
|
||||||
|
* @param uuid the uuid of the connection
|
||||||
|
* @param address the address of the server
|
||||||
|
* @param port the port of the server
|
||||||
|
* @return true if the transfer was a success
|
||||||
|
*/
|
||||||
|
boolean transfer(@NonNull UUID uuid, @NonNull String address, @IntRange(from = 0, to = 65535) int port);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,6 +28,11 @@ package org.geysermc.api.connection;
|
|||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.common.value.qual.IntRange;
|
import org.checkerframework.common.value.qual.IntRange;
|
||||||
|
import org.geysermc.api.util.BedrockPlatform;
|
||||||
|
import org.geysermc.api.util.InputMode;
|
||||||
|
import org.geysermc.api.util.UiProfile;
|
||||||
|
import org.geysermc.cumulus.form.Form;
|
||||||
|
import org.geysermc.cumulus.form.util.FormBuilder;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -36,43 +41,80 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public interface Connection {
|
public interface Connection {
|
||||||
/**
|
/**
|
||||||
* Gets the bedrock name of the connection.
|
* Returns the bedrock name of the connection.
|
||||||
*
|
|
||||||
* @return the bedrock name of the connection
|
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull String bedrockUsername();
|
||||||
String bedrockUsername();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the java name of the connection.
|
* Returns the java name of the connection.
|
||||||
*
|
|
||||||
* @return the java name of the connection
|
|
||||||
*/
|
*/
|
||||||
@MonotonicNonNull
|
@MonotonicNonNull
|
||||||
String javaUsername();
|
String javaUsername();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link UUID} of the connection.
|
* Returns the UUID of the connection.
|
||||||
*
|
|
||||||
* @return the UUID of the connection
|
|
||||||
*/
|
*/
|
||||||
@MonotonicNonNull
|
@MonotonicNonNull
|
||||||
UUID javaUuid();
|
UUID javaUuid();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the XUID of the connection.
|
* Returns the XUID of the connection.
|
||||||
*
|
|
||||||
* @return the XUID of the connection
|
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull String xuid();
|
||||||
String xuid();
|
|
||||||
|
/**
|
||||||
|
* Returns the version of the Bedrock client.
|
||||||
|
*/
|
||||||
|
@NonNull String version();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the platform that the connection is playing on.
|
||||||
|
*/
|
||||||
|
@NonNull BedrockPlatform platform();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the language code of the connection.
|
||||||
|
*/
|
||||||
|
@NonNull String languageCode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the User Interface Profile of the connection.
|
||||||
|
*/
|
||||||
|
@NonNull UiProfile uiProfile();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Input Mode of the Bedrock client.
|
||||||
|
*/
|
||||||
|
@NonNull InputMode inputMode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the connection is linked.
|
||||||
|
* This will always return false when the auth-type isn't Floodgate.
|
||||||
|
*/
|
||||||
|
boolean isLinked();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a form to the connection and opens it.
|
||||||
|
*
|
||||||
|
* @param form the form to send
|
||||||
|
* @return whether the form was successfully sent
|
||||||
|
*/
|
||||||
|
boolean sendForm(@NonNull Form form);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a form to the connection and opens it.
|
||||||
|
*
|
||||||
|
* @param formBuilder the formBuilder to send
|
||||||
|
* @return whether the form was successfully sent
|
||||||
|
*/
|
||||||
|
boolean sendForm(@NonNull FormBuilder<?, ?, ?> formBuilder);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transfer the connection to a server. A Bedrock player can successfully transfer to the same server they are
|
* Transfer the connection to a server. A Bedrock player can successfully transfer to the same server they are
|
||||||
* currently playing on.
|
* currently playing on.
|
||||||
*
|
*
|
||||||
* @param address The address of the server
|
* @param address the address of the server
|
||||||
* @param port The port of the server
|
* @param port the port of the server
|
||||||
* @return true if the transfer was a success
|
* @return true if the transfer was a success
|
||||||
*/
|
*/
|
||||||
boolean transfer(@NonNull String address, @IntRange(from = 0, to = 65535) int port);
|
boolean transfer(@NonNull String address, @IntRange(from = 0, to = 65535) int port);
|
||||||
|
70
api/base/src/main/java/org/geysermc/api/util/BedrockPlatform.java
Normale Datei
70
api/base/src/main/java/org/geysermc/api/util/BedrockPlatform.java
Normale Datei
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author GeyserMC
|
||||||
|
* @link https://github.com/GeyserMC/Geyser
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.geysermc.api.util;
|
||||||
|
|
||||||
|
public enum BedrockPlatform {
|
||||||
|
UNKNOWN("Unknown"),
|
||||||
|
GOOGLE("Android"),
|
||||||
|
IOS("iOS"),
|
||||||
|
OSX("macOS"),
|
||||||
|
AMAZON("Amazon"),
|
||||||
|
GEARVR("Gear VR"),
|
||||||
|
HOLOLENS("Hololens"),
|
||||||
|
UWP("Windows 10"),
|
||||||
|
WIN32("Windows x86"),
|
||||||
|
DEDICATED("Dedicated"),
|
||||||
|
TVOS("Apple TV"),
|
||||||
|
PS4("PS4"),
|
||||||
|
NX("Switch"),
|
||||||
|
XBOX("Xbox One"),
|
||||||
|
WINDOWS_PHONE("Windows Phone");
|
||||||
|
|
||||||
|
private static final BedrockPlatform[] VALUES = values();
|
||||||
|
|
||||||
|
private final String displayName;
|
||||||
|
|
||||||
|
BedrockPlatform(String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the BedrockPlatform from the identifier.
|
||||||
|
*
|
||||||
|
* @param id the BedrockPlatform identifier
|
||||||
|
* @return The BedrockPlatform or {@link #UNKNOWN} if the platform wasn't found
|
||||||
|
*/
|
||||||
|
public static BedrockPlatform fromId(int id) {
|
||||||
|
return id < VALUES.length ? VALUES[id] : VALUES[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return friendly display name of platform.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
}
|
46
api/base/src/main/java/org/geysermc/api/util/InputMode.java
Normale Datei
46
api/base/src/main/java/org/geysermc/api/util/InputMode.java
Normale Datei
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author GeyserMC
|
||||||
|
* @link https://github.com/GeyserMC/Geyser
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.geysermc.api.util;
|
||||||
|
|
||||||
|
public enum InputMode {
|
||||||
|
UNKNOWN,
|
||||||
|
KEYBOARD_MOUSE,
|
||||||
|
TOUCH,
|
||||||
|
CONTROLLER,
|
||||||
|
VR;
|
||||||
|
|
||||||
|
private static final InputMode[] VALUES = values();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the InputMode from the identifier.
|
||||||
|
*
|
||||||
|
* @param id the InputMode identifier
|
||||||
|
* @return The InputMode or {@link #UNKNOWN} if the mode wasn't found
|
||||||
|
*/
|
||||||
|
public static InputMode fromId(int id) {
|
||||||
|
return VALUES.length > id ? VALUES[id] : VALUES[0];
|
||||||
|
}
|
||||||
|
}
|
42
api/base/src/main/java/org/geysermc/api/util/UiProfile.java
Normale Datei
42
api/base/src/main/java/org/geysermc/api/util/UiProfile.java
Normale Datei
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author GeyserMC
|
||||||
|
* @link https://github.com/GeyserMC/Geyser
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.geysermc.api.util;
|
||||||
|
|
||||||
|
public enum UiProfile {
|
||||||
|
CLASSIC, POCKET;
|
||||||
|
|
||||||
|
private static final UiProfile[] VALUES = values();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the UiProfile from the identifier.
|
||||||
|
*
|
||||||
|
* @param id the UiProfile identifier
|
||||||
|
* @return The UiProfile or {@link #CLASSIC} if the profile wasn't found
|
||||||
|
*/
|
||||||
|
public static UiProfile fromId(int id) {
|
||||||
|
return VALUES.length > id ? VALUES[id] : VALUES[0];
|
||||||
|
}
|
||||||
|
}
|
@ -41,10 +41,13 @@ import io.netty.util.internal.SystemPropertyUtil;
|
|||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.geysermc.api.Geyser;
|
import org.geysermc.api.Geyser;
|
||||||
import org.geysermc.common.PlatformType;
|
import org.geysermc.common.PlatformType;
|
||||||
|
import org.geysermc.cumulus.form.Form;
|
||||||
|
import org.geysermc.cumulus.form.util.FormBuilder;
|
||||||
import org.geysermc.floodgate.crypto.AesCipher;
|
import org.geysermc.floodgate.crypto.AesCipher;
|
||||||
import org.geysermc.floodgate.crypto.AesKeyProducer;
|
import org.geysermc.floodgate.crypto.AesKeyProducer;
|
||||||
import org.geysermc.floodgate.crypto.Base64Topping;
|
import org.geysermc.floodgate.crypto.Base64Topping;
|
||||||
@ -486,6 +489,11 @@ public class GeyserImpl implements GeyserApi {
|
|||||||
return sessionManager.size();
|
return sessionManager.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @MonotonicNonNull String usernamePrefix() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable GeyserSession connectionByUuid(@NonNull UUID uuid) {
|
public @Nullable GeyserSession connectionByUuid(@NonNull UUID uuid) {
|
||||||
return this.sessionManager.getSessions().get(uuid);
|
return this.sessionManager.getSessions().get(uuid);
|
||||||
@ -493,13 +501,38 @@ public class GeyserImpl implements GeyserApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable GeyserSession connectionByXuid(@NonNull String xuid) {
|
public @Nullable GeyserSession connectionByXuid(@NonNull String xuid) {
|
||||||
for (GeyserSession session : sessionManager.getAllSessions()) {
|
return sessionManager.sessionByXuid(xuid);
|
||||||
if (session.xuid().equals(xuid)) {
|
|
||||||
return session;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
@Override
|
||||||
|
public boolean isBedrockPlayer(@NonNull UUID uuid) {
|
||||||
|
return connectionByUuid(uuid) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendForm(@NonNull UUID uuid, @NonNull Form form) {
|
||||||
|
Objects.requireNonNull(uuid);
|
||||||
|
Objects.requireNonNull(form);
|
||||||
|
GeyserSession session = connectionByUuid(uuid);
|
||||||
|
if (session == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return session.sendForm(form);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendForm(@NonNull UUID uuid, @NonNull FormBuilder<?, ?, ?> formBuilder) {
|
||||||
|
return sendForm(uuid, formBuilder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean transfer(@NonNull UUID uuid, @NonNull String address, int port) {
|
||||||
|
Objects.requireNonNull(uuid);
|
||||||
|
GeyserSession session = connectionByUuid(uuid);
|
||||||
|
if (session == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return session.transfer(address, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
|
@ -73,7 +73,7 @@ public class SessionPlayerEntity extends PlayerEntity {
|
|||||||
private int fakeTradeXp;
|
private int fakeTradeXp;
|
||||||
|
|
||||||
public SessionPlayerEntity(GeyserSession session) {
|
public SessionPlayerEntity(GeyserSession session) {
|
||||||
super(session, -1, 1, UUID.randomUUID(), Vector3f.ZERO, Vector3f.ZERO, 0, 0, 0, "unknown", null);
|
super(session, -1, 1, null, Vector3f.ZERO, Vector3f.ZERO, 0, 0, 0, null, null);
|
||||||
|
|
||||||
valid = true;
|
valid = true;
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,9 @@ import lombok.Setter;
|
|||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
import org.checkerframework.common.value.qual.IntRange;
|
import org.checkerframework.common.value.qual.IntRange;
|
||||||
|
import org.geysermc.api.util.BedrockPlatform;
|
||||||
|
import org.geysermc.api.util.InputMode;
|
||||||
|
import org.geysermc.api.util.UiProfile;
|
||||||
import org.geysermc.common.PlatformType;
|
import org.geysermc.common.PlatformType;
|
||||||
import org.geysermc.cumulus.form.Form;
|
import org.geysermc.cumulus.form.Form;
|
||||||
import org.geysermc.cumulus.form.util.FormBuilder;
|
import org.geysermc.cumulus.form.util.FormBuilder;
|
||||||
@ -136,7 +139,6 @@ import org.geysermc.geyser.util.DimensionUtils;
|
|||||||
import org.geysermc.geyser.util.LoginEncryptionUtils;
|
import org.geysermc.geyser.util.LoginEncryptionUtils;
|
||||||
import org.geysermc.geyser.util.MathUtils;
|
import org.geysermc.geyser.util.MathUtils;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import java.net.ConnectException;
|
import java.net.ConnectException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
@ -151,13 +153,13 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
@Getter
|
@Getter
|
||||||
public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
|
|
||||||
private final @Nonnull GeyserImpl geyser;
|
private final @NonNull GeyserImpl geyser;
|
||||||
private final @Nonnull UpstreamSession upstream;
|
private final @NonNull UpstreamSession upstream;
|
||||||
/**
|
/**
|
||||||
* The loop where all packets and ticking is processed to prevent concurrency issues.
|
* The loop where all packets and ticking is processed to prevent concurrency issues.
|
||||||
* If this is manually called, ensure that any exceptions are properly handled.
|
* If this is manually called, ensure that any exceptions are properly handled.
|
||||||
*/
|
*/
|
||||||
private final @Nonnull EventLoop eventLoop;
|
private final @NonNull EventLoop eventLoop;
|
||||||
private TcpSession downstream;
|
private TcpSession downstream;
|
||||||
@Setter
|
@Setter
|
||||||
private AuthData authData;
|
private AuthData authData;
|
||||||
@ -1326,33 +1328,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String bedrockUsername() {
|
public String name() {
|
||||||
return authData.name();
|
return null;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UUID javaUuid() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String xuid() {
|
|
||||||
return authData.xuid();
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("ConstantConditions") // Need to enforce the parameter annotations
|
|
||||||
@Override
|
|
||||||
public boolean transfer(@NonNull String address, @IntRange(from = 0, to = 65535) int port) {
|
|
||||||
if (address == null || address.isBlank()) {
|
|
||||||
throw new IllegalArgumentException("Server address cannot be null or blank");
|
|
||||||
} else if (port < 0 || port > 65535) {
|
|
||||||
throw new IllegalArgumentException("Server port must be between 0 and 65535, was " + port);
|
|
||||||
}
|
|
||||||
TransferPacket transferPacket = new TransferPacket();
|
|
||||||
transferPacket.setAddress(address);
|
|
||||||
transferPacket.setPort(port);
|
|
||||||
sendUpstreamPacket(transferPacket);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1405,12 +1382,14 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
return this.upstream.getAddress();
|
return this.upstream.getAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendForm(Form form) {
|
public boolean sendForm(@NonNull Form form) {
|
||||||
formCache.showForm(form);
|
formCache.showForm(form);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendForm(FormBuilder<?, ?, ?> formBuilder) {
|
public boolean sendForm(@NonNull FormBuilder<?, ?, ?> formBuilder) {
|
||||||
formCache.showForm(formBuilder.build());
|
formCache.showForm(formBuilder.build());
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1765,7 +1744,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
*
|
*
|
||||||
* @param statistics Updated statistics values
|
* @param statistics Updated statistics values
|
||||||
*/
|
*/
|
||||||
public void updateStatistics(@Nonnull Object2IntMap<Statistic> statistics) {
|
public void updateStatistics(@NonNull Object2IntMap<Statistic> statistics) {
|
||||||
if (this.statistics.isEmpty()) {
|
if (this.statistics.isEmpty()) {
|
||||||
// Initialize custom statistics to 0, so that they appear in the form
|
// Initialize custom statistics to 0, so that they appear in the form
|
||||||
for (CustomStatistic customStatistic : CustomStatistic.values()) {
|
for (CustomStatistic customStatistic : CustomStatistic.values()) {
|
||||||
@ -1851,4 +1830,69 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
public MinecraftCodecHelper getCodecHelper() {
|
public MinecraftCodecHelper getCodecHelper() {
|
||||||
return (MinecraftCodecHelper) this.downstream.getCodecHelper();
|
return (MinecraftCodecHelper) this.downstream.getCodecHelper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String bedrockUsername() {
|
||||||
|
return authData.name();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @MonotonicNonNull String javaUsername() {
|
||||||
|
return playerEntity.getUsername();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UUID javaUuid() {
|
||||||
|
return playerEntity.getUuid();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String xuid() {
|
||||||
|
return authData.xuid();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull String version() {
|
||||||
|
return clientData.getGameVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull BedrockPlatform platform() {
|
||||||
|
return BedrockPlatform.values()[clientData.getDeviceOs().ordinal()]; //todo
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull String languageCode() {
|
||||||
|
return locale();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull UiProfile uiProfile() {
|
||||||
|
return UiProfile.values()[clientData.getUiProfile().ordinal()]; //todo
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull InputMode inputMode() {
|
||||||
|
return InputMode.values()[clientData.getCurrentInputMode().ordinal()]; //todo
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLinked() {
|
||||||
|
return false; //todo
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("ConstantConditions") // Need to enforce the parameter annotations
|
||||||
|
@Override
|
||||||
|
public boolean transfer(@NonNull String address, @IntRange(from = 0, to = 65535) int port) {
|
||||||
|
if (address == null || address.isBlank()) {
|
||||||
|
throw new IllegalArgumentException("Server address cannot be null or blank");
|
||||||
|
} else if (port < 0 || port > 65535) {
|
||||||
|
throw new IllegalArgumentException("Server port must be between 0 and 65535, was " + port);
|
||||||
|
}
|
||||||
|
TransferPacket transferPacket = new TransferPacket();
|
||||||
|
transferPacket.setAddress(address);
|
||||||
|
transferPacket.setPort(port);
|
||||||
|
sendUpstreamPacket(transferPacket);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ package org.geysermc.geyser.session;
|
|||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
import org.geysermc.geyser.text.GeyserLocale;
|
import org.geysermc.geyser.text.GeyserLocale;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -67,6 +68,16 @@ public final class SessionManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GeyserSession sessionByXuid(@NonNull String xuid) {
|
||||||
|
Objects.requireNonNull(xuid);
|
||||||
|
for (GeyserSession session : sessions.values()) {
|
||||||
|
if (session.xuid().equals(xuid)) {
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new, immutable list containing all pending and active sessions.
|
* Creates a new, immutable list containing all pending and active sessions.
|
||||||
*/
|
*/
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren