mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Merge remote-tracking branch 'upstream/master' into customitemapi
This commit is contained in:
commit
86518d5f39
5 changed files with 51 additions and 17 deletions
|
@ -46,13 +46,35 @@ public final class ConnectionRequestEvent implements Event, Cancellable {
|
||||||
this.proxyIp = proxyIp;
|
this.proxyIp = proxyIp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The IP address of the client attempting to connect
|
||||||
|
*
|
||||||
|
* @return the IP address of the client attempting to connect
|
||||||
|
* @deprecated Use {@link #inetSocketAddress()} instead
|
||||||
|
*/
|
||||||
|
@NonNull @Deprecated(forRemoval = true)
|
||||||
|
public InetSocketAddress getInetSocketAddress() {
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The IP address of the proxy handling the connection. It will return null if there is no proxy.
|
||||||
|
*
|
||||||
|
* @return the IP address of the proxy handling the connection
|
||||||
|
* @deprecated Use {@link #proxyIp()} instead
|
||||||
|
*/
|
||||||
|
@Nullable @Deprecated(forRemoval = true)
|
||||||
|
public InetSocketAddress getProxyIp() {
|
||||||
|
return proxyIp;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The IP address of the client attempting to connect
|
* The IP address of the client attempting to connect
|
||||||
*
|
*
|
||||||
* @return the IP address of the client attempting to connect
|
* @return the IP address of the client attempting to connect
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public InetSocketAddress getInetSocketAddress() {
|
public InetSocketAddress inetSocketAddress() {
|
||||||
return ip;
|
return ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +84,7 @@ public final class ConnectionRequestEvent implements Event, Cancellable {
|
||||||
* @return the IP address of the proxy handling the connection
|
* @return the IP address of the proxy handling the connection
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public InetSocketAddress getProxyIp() {
|
public InetSocketAddress proxyIp() {
|
||||||
return proxyIp;
|
return proxyIp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,16 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class Item {
|
public class Item {
|
||||||
|
/**
|
||||||
|
* This is a map from Java-only enchantments to their translation keys so that we can
|
||||||
|
* map these enchantments to Bedrock clients, since they don't actually exist there.
|
||||||
|
*/
|
||||||
|
private static final Map<Enchantment.JavaEnchantment, String> ENCHANTMENT_TRANSLATION_KEYS = Map.of(
|
||||||
|
Enchantment.JavaEnchantment.SWEEPING_EDGE, "enchantment.minecraft.sweeping",
|
||||||
|
Enchantment.JavaEnchantment.DENSITY, "enchantment.minecraft.density",
|
||||||
|
Enchantment.JavaEnchantment.BREACH, "enchantment.minecraft.breach",
|
||||||
|
Enchantment.JavaEnchantment.WIND_BURST, "enchantment.minecraft.wind_burst");
|
||||||
|
|
||||||
private final String javaIdentifier;
|
private final String javaIdentifier;
|
||||||
private int javaId = -1;
|
private int javaId = -1;
|
||||||
private final int stackSize;
|
private final int stackSize;
|
||||||
|
@ -227,8 +237,10 @@ public class Item {
|
||||||
// TODO verify
|
// TODO verify
|
||||||
// TODO streamline Enchantment process
|
// TODO streamline Enchantment process
|
||||||
Enchantment.JavaEnchantment enchantment = Enchantment.JavaEnchantment.of(enchantId);
|
Enchantment.JavaEnchantment enchantment = Enchantment.JavaEnchantment.of(enchantId);
|
||||||
if (enchantment == Enchantment.JavaEnchantment.SWEEPING_EDGE) {
|
String translationKey = ENCHANTMENT_TRANSLATION_KEYS.get(enchantment);
|
||||||
addSweeping(session, builder, level);
|
if (translationKey != null) {
|
||||||
|
String enchantmentTranslation = MinecraftLocale.getLocaleString(translationKey, session.locale());
|
||||||
|
addJavaOnlyEnchantment(session, builder, enchantmentTranslation, level);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (enchantment == null) {
|
if (enchantment == null) {
|
||||||
|
@ -242,11 +254,10 @@ public class Item {
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSweeping(GeyserSession session, BedrockItemBuilder builder, int level) {
|
private void addJavaOnlyEnchantment(GeyserSession session, BedrockItemBuilder builder, String enchantmentName, int level) {
|
||||||
String sweepingTranslation = MinecraftLocale.getLocaleString("enchantment.minecraft.sweeping", session.locale());
|
|
||||||
String lvlTranslation = MinecraftLocale.getLocaleString("enchantment.level." + level, session.locale());
|
String lvlTranslation = MinecraftLocale.getLocaleString("enchantment.level." + level, session.locale());
|
||||||
|
|
||||||
builder.getOrCreateLore().add(ChatColor.RESET + ChatColor.GRAY + sweepingTranslation + " " + lvlTranslation);
|
builder.getOrCreateLore().add(ChatColor.RESET + ChatColor.GRAY + enchantmentName + " " + lvlTranslation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Translation methods end */
|
/* Translation methods end */
|
||||||
|
|
|
@ -25,11 +25,8 @@
|
||||||
|
|
||||||
package org.geysermc.geyser.network;
|
package org.geysermc.geyser.network;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
import io.netty.channel.DefaultEventLoopGroup;
|
import io.netty.channel.DefaultEventLoopGroup;
|
||||||
import io.netty.channel.SimpleChannelInboundHandler;
|
|
||||||
import io.netty.util.concurrent.DefaultThreadFactory;
|
import io.netty.util.concurrent.DefaultThreadFactory;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.cloudburstmc.protocol.bedrock.BedrockPeer;
|
import org.cloudburstmc.protocol.bedrock.BedrockPeer;
|
||||||
|
@ -37,7 +34,6 @@ import org.cloudburstmc.protocol.bedrock.BedrockServerSession;
|
||||||
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
|
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
|
||||||
import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitializer;
|
import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitializer;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.api.event.bedrock.SessionInitializeEvent;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
@ -72,7 +68,6 @@ public class GeyserServerInitializer extends BedrockServerInitializer {
|
||||||
channel.pipeline().addAfter(BedrockPacketCodec.NAME, InvalidPacketHandler.NAME, new InvalidPacketHandler(session));
|
channel.pipeline().addAfter(BedrockPacketCodec.NAME, InvalidPacketHandler.NAME, new InvalidPacketHandler(session));
|
||||||
|
|
||||||
bedrockServerSession.setPacketHandler(new UpstreamPacketHandler(this.geyser, session));
|
bedrockServerSession.setPacketHandler(new UpstreamPacketHandler(this.geyser, session));
|
||||||
this.geyser.eventBus().fire(new SessionInitializeEvent(session));
|
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
// Error must be caught or it will be swallowed
|
// Error must be caught or it will be swallowed
|
||||||
this.geyser.getLogger().error("Error occurred while initializing player!", e);
|
this.geyser.getLogger().error("Error occurred while initializing player!", e);
|
||||||
|
|
|
@ -54,6 +54,7 @@ import org.cloudburstmc.protocol.common.PacketSignal;
|
||||||
import org.cloudburstmc.protocol.common.util.Zlib;
|
import org.cloudburstmc.protocol.common.util.Zlib;
|
||||||
import org.geysermc.geyser.Constants;
|
import org.geysermc.geyser.Constants;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
|
import org.geysermc.geyser.api.event.bedrock.SessionInitializeEvent;
|
||||||
import org.geysermc.geyser.api.network.AuthType;
|
import org.geysermc.geyser.api.network.AuthType;
|
||||||
import org.geysermc.geyser.api.pack.PackCodec;
|
import org.geysermc.geyser.api.pack.PackCodec;
|
||||||
import org.geysermc.geyser.api.pack.ResourcePack;
|
import org.geysermc.geyser.api.pack.ResourcePack;
|
||||||
|
@ -188,6 +189,9 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
return PacketSignal.HANDLED;
|
return PacketSignal.HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fire SessionInitializeEvent here as we now know the client data
|
||||||
|
geyser.eventBus().fire(new SessionInitializeEvent(session));
|
||||||
|
|
||||||
PlayStatusPacket playStatus = new PlayStatusPacket();
|
PlayStatusPacket playStatus = new PlayStatusPacket();
|
||||||
playStatus.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS);
|
playStatus.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS);
|
||||||
session.sendUpstreamPacket(playStatus);
|
session.sendUpstreamPacket(playStatus);
|
||||||
|
|
|
@ -1077,9 +1077,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
if (!closed) {
|
if (!closed) {
|
||||||
loggedIn = false;
|
loggedIn = false;
|
||||||
|
|
||||||
// Fire SessionDisconnectEvent
|
|
||||||
SessionDisconnectEvent disconnectEvent = new SessionDisconnectEvent(this, reason);
|
SessionDisconnectEvent disconnectEvent = new SessionDisconnectEvent(this, reason);
|
||||||
geyser.getEventBus().fire(disconnectEvent);
|
if (authData != null && clientData != null) { // can occur if player disconnects before Bedrock auth finishes
|
||||||
|
// Fire SessionDisconnectEvent
|
||||||
|
geyser.getEventBus().fire(disconnectEvent);
|
||||||
|
}
|
||||||
|
|
||||||
// Disconnect downstream if necessary
|
// Disconnect downstream if necessary
|
||||||
if (downstream != null) {
|
if (downstream != null) {
|
||||||
|
@ -1404,7 +1406,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String name() {
|
public String name() {
|
||||||
return null;
|
return playerEntity != null ? javaUsername() : bedrockUsername();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1941,12 +1943,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @MonotonicNonNull String javaUsername() {
|
public @MonotonicNonNull String javaUsername() {
|
||||||
return playerEntity.getUsername();
|
return playerEntity != null ? playerEntity.getUsername() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID javaUuid() {
|
public UUID javaUuid() {
|
||||||
return playerEntity.getUuid();
|
return playerEntity != null ? playerEntity.getUuid() : null ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue