Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-20 06:50:09 +01:00
Compiling for 1.19.3
Dieser Commit ist enthalten in:
Ursprung
7171ade0bd
Commit
759db72536
@ -25,8 +25,9 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.entity.type.living.monster;
|
package org.geysermc.geyser.entity.type.living.monster;
|
||||||
|
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.OptionalIntMetadataType;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
|
|
||||||
import com.nukkitx.math.vector.Vector3f;
|
import com.nukkitx.math.vector.Vector3f;
|
||||||
import com.nukkitx.protocol.bedrock.data.SoundEvent;
|
import com.nukkitx.protocol.bedrock.data.SoundEvent;
|
||||||
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
|
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
|
||||||
@ -35,6 +36,7 @@ import com.nukkitx.protocol.bedrock.packet.LevelSoundEvent2Packet;
|
|||||||
import org.geysermc.geyser.entity.EntityDefinition;
|
import org.geysermc.geyser.entity.EntityDefinition;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
|
||||||
|
import java.util.OptionalInt;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class EndermanEntity extends MonsterEntity {
|
public class EndermanEntity extends MonsterEntity {
|
||||||
@ -43,8 +45,15 @@ public class EndermanEntity extends MonsterEntity {
|
|||||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCarriedBlock(IntEntityMetadata entityMetadata) {
|
public void setCarriedBlock(EntityMetadata<OptionalInt, OptionalIntMetadataType> entityMetadata) {
|
||||||
dirtyMetadata.put(EntityData.CARRIED_BLOCK, session.getBlockMappings().getBedrockBlockId(entityMetadata.getPrimitiveValue()));
|
int bedrockBlockId;
|
||||||
|
if (entityMetadata.getValue().isPresent()) {
|
||||||
|
bedrockBlockId = entityMetadata.getValue().getAsInt();
|
||||||
|
} else {
|
||||||
|
bedrockBlockId = session.getBlockMappings().getBedrockAirId();
|
||||||
|
}
|
||||||
|
|
||||||
|
dirtyMetadata.put(EntityData.CARRIED_BLOCK, bedrockBlockId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1360,18 +1360,20 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
return clientData.getLanguageCode();
|
return clientData.getLanguageCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 1.19.3 int offest and ack'd messages BitSet???
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a chat message to the Java server.
|
* Sends a chat message to the Java server.
|
||||||
*/
|
*/
|
||||||
public void sendChat(String message) {
|
public void sendChat(String message) {
|
||||||
sendDownstreamPacket(new ServerboundChatPacket(message, Instant.now().toEpochMilli(), 0L, ByteArrays.EMPTY_ARRAY, false, Collections.emptyList(), null));
|
sendDownstreamPacket(new ServerboundChatPacket(message, Instant.now().toEpochMilli(), 0L, null, 0, new BitSet()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a command to the Java server.
|
* Sends a command to the Java server.
|
||||||
*/
|
*/
|
||||||
public void sendCommand(String command) {
|
public void sendCommand(String command) {
|
||||||
sendDownstreamPacket(new ServerboundChatCommandPacket(command, Instant.now().toEpochMilli(), 0L, Collections.emptyList(), false, Collections.emptyList(), null));
|
sendDownstreamPacket(new ServerboundChatCommandPacket(command, Instant.now().toEpochMilli(), 0L, Collections.emptyList(), 0, new BitSet()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setServerRenderDistance(int renderDistance) {
|
public void setServerRenderDistance(int renderDistance) {
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.text;
|
package org.geysermc.geyser.text;
|
||||||
|
|
||||||
import com.github.steveice10.mc.protocol.data.game.BuiltinChatType;
|
import com.github.steveice10.mc.protocol.data.game.chat.BuiltinChatType;
|
||||||
import com.nukkitx.protocol.bedrock.packet.TextPacket;
|
import com.nukkitx.protocol.bedrock.packet.TextPacket;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ public class JavaPlayerChatTranslator extends PacketTranslator<ClientboundPlayer
|
|||||||
textPacket.setType(TextPacket.Type.CHAT);
|
textPacket.setType(TextPacket.Type.CHAT);
|
||||||
|
|
||||||
textPacket.setNeedsTranslation(false);
|
textPacket.setNeedsTranslation(false);
|
||||||
Component message = packet.getUnsignedContent() == null ? packet.getMessageDecorated() : packet.getUnsignedContent();
|
Component message = packet.getUnsignedContent() == null ? Component.text(packet.getContent()) : packet.getUnsignedContent();
|
||||||
|
|
||||||
TextDecoration decoration = session.getChatTypes().get(packet.getChatType());
|
TextDecoration decoration = session.getChatTypes().get(packet.getChatType());
|
||||||
if (decoration != null) {
|
if (decoration != null) {
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* 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.geyser.translator.protocol.java.entity.player;
|
||||||
|
|
||||||
|
|
||||||
|
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundPlayerInfoRemovePacket;
|
||||||
|
import com.nukkitx.protocol.bedrock.packet.PlayerListPacket;
|
||||||
|
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
||||||
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
||||||
|
import org.geysermc.geyser.translator.protocol.Translator;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Translator(packet = ClientboundPlayerInfoRemovePacket.class)
|
||||||
|
public class JavaPlayerInfoRemoveTranslator extends PacketTranslator<ClientboundPlayerInfoRemovePacket> {
|
||||||
|
@Override
|
||||||
|
public void translate(GeyserSession session, ClientboundPlayerInfoRemovePacket packet) {
|
||||||
|
PlayerListPacket translate = new PlayerListPacket();
|
||||||
|
translate.setAction(PlayerListPacket.Action.REMOVE);
|
||||||
|
|
||||||
|
for (UUID id : packet.getProfileIds()) {
|
||||||
|
// As the player entity is no longer present, we can remove the entry
|
||||||
|
PlayerEntity entity = session.getEntityCache().removePlayerEntity(id);
|
||||||
|
if (entity != null) {
|
||||||
|
// Just remove the entity's player list status
|
||||||
|
// Don't despawn the entity - the Java server will also take care of that.
|
||||||
|
entity.setPlayerList(false);
|
||||||
|
}
|
||||||
|
if (entity == session.getPlayerEntity()) {
|
||||||
|
// If removing ourself we use our AuthData UUID
|
||||||
|
translate.getEntries().add(new PlayerListPacket.Entry(session.getAuthData().uuid()));
|
||||||
|
} else {
|
||||||
|
translate.getEntries().add(new PlayerListPacket.Entry(id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!translate.getEntries().isEmpty()) {
|
||||||
|
session.sendUpstreamPacket(translate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,125 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.geyser.translator.protocol.java.entity.player;
|
|
||||||
|
|
||||||
import com.github.steveice10.mc.auth.data.GameProfile;
|
|
||||||
import com.github.steveice10.mc.protocol.data.game.PlayerListEntry;
|
|
||||||
import com.github.steveice10.mc.protocol.data.game.PlayerListEntryAction;
|
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundPlayerInfoPacket;
|
|
||||||
import com.nukkitx.math.vector.Vector3f;
|
|
||||||
import com.nukkitx.protocol.bedrock.packet.PlayerListPacket;
|
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
|
||||||
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
|
||||||
import org.geysermc.geyser.skin.SkinManager;
|
|
||||||
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
|
||||||
import org.geysermc.geyser.translator.protocol.Translator;
|
|
||||||
|
|
||||||
@Translator(packet = ClientboundPlayerInfoPacket.class)
|
|
||||||
public class JavaPlayerInfoTranslator extends PacketTranslator<ClientboundPlayerInfoPacket> {
|
|
||||||
@Override
|
|
||||||
public void translate(GeyserSession session, ClientboundPlayerInfoPacket packet) {
|
|
||||||
if (packet.getAction() != PlayerListEntryAction.ADD_PLAYER && packet.getAction() != PlayerListEntryAction.REMOVE_PLAYER)
|
|
||||||
return;
|
|
||||||
|
|
||||||
PlayerListPacket translate = new PlayerListPacket();
|
|
||||||
translate.setAction(packet.getAction() == PlayerListEntryAction.ADD_PLAYER ? PlayerListPacket.Action.ADD : PlayerListPacket.Action.REMOVE);
|
|
||||||
|
|
||||||
for (PlayerListEntry entry : packet.getEntries()) {
|
|
||||||
switch (packet.getAction()) {
|
|
||||||
case ADD_PLAYER -> {
|
|
||||||
GameProfile profile = entry.getProfile();
|
|
||||||
PlayerEntity playerEntity;
|
|
||||||
boolean self = profile.getId().equals(session.getPlayerEntity().getUuid());
|
|
||||||
|
|
||||||
if (self) {
|
|
||||||
// Entity is ourself
|
|
||||||
playerEntity = session.getPlayerEntity();
|
|
||||||
} else {
|
|
||||||
playerEntity = session.getEntityCache().getPlayerEntity(profile.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
GameProfile.Property textures = profile.getProperty("textures");
|
|
||||||
String texturesProperty = textures == null ? null : textures.getValue();
|
|
||||||
|
|
||||||
if (playerEntity == null) {
|
|
||||||
// It's a new player
|
|
||||||
playerEntity = new PlayerEntity(
|
|
||||||
session,
|
|
||||||
-1,
|
|
||||||
session.getEntityCache().getNextEntityId().incrementAndGet(),
|
|
||||||
profile.getId(),
|
|
||||||
Vector3f.ZERO,
|
|
||||||
Vector3f.ZERO,
|
|
||||||
0, 0, 0,
|
|
||||||
profile.getName(),
|
|
||||||
texturesProperty
|
|
||||||
);
|
|
||||||
|
|
||||||
session.getEntityCache().addPlayerEntity(playerEntity);
|
|
||||||
} else {
|
|
||||||
playerEntity.setUsername(profile.getName());
|
|
||||||
playerEntity.setTexturesProperty(texturesProperty);
|
|
||||||
}
|
|
||||||
|
|
||||||
playerEntity.setPlayerList(true);
|
|
||||||
|
|
||||||
// We'll send our own PlayerListEntry in requestAndHandleSkinAndCape
|
|
||||||
// But we need to send other player's entries so they show up in the player list
|
|
||||||
// without processing their skin information - that'll be processed when they spawn in
|
|
||||||
if (self) {
|
|
||||||
SkinManager.requestAndHandleSkinAndCape(playerEntity, session, skinAndCape ->
|
|
||||||
GeyserImpl.getInstance().getLogger().debug("Loaded Local Bedrock Java Skin Data for " + session.getClientData().getUsername()));
|
|
||||||
} else {
|
|
||||||
playerEntity.setValid(true);
|
|
||||||
PlayerListPacket.Entry playerListEntry = SkinManager.buildCachedEntry(session, playerEntity);
|
|
||||||
|
|
||||||
translate.getEntries().add(playerListEntry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case REMOVE_PLAYER -> {
|
|
||||||
// As the player entity is no longer present, we can remove the entry
|
|
||||||
PlayerEntity entity = session.getEntityCache().removePlayerEntity(entry.getProfile().getId());
|
|
||||||
if (entity != null) {
|
|
||||||
// Just remove the entity's player list status
|
|
||||||
// Don't despawn the entity - the Java server will also take care of that.
|
|
||||||
entity.setPlayerList(false);
|
|
||||||
}
|
|
||||||
if (entity == session.getPlayerEntity()) {
|
|
||||||
// If removing ourself we use our AuthData UUID
|
|
||||||
translate.getEntries().add(new PlayerListPacket.Entry(session.getAuthData().uuid()));
|
|
||||||
} else {
|
|
||||||
translate.getEntries().add(new PlayerListPacket.Entry(entry.getProfile().getId()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!translate.getEntries().isEmpty()) {
|
|
||||||
session.sendUpstreamPacket(translate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,113 @@
|
|||||||
|
/*
|
||||||
|
* 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.geyser.translator.protocol.java.entity.player;
|
||||||
|
|
||||||
|
import com.github.steveice10.mc.auth.data.GameProfile;
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.PlayerListEntry;
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.PlayerListEntryAction;
|
||||||
|
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundPlayerInfoUpdatePacket;
|
||||||
|
import com.nukkitx.math.vector.Vector3f;
|
||||||
|
import com.nukkitx.protocol.bedrock.packet.PlayerListPacket;
|
||||||
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
|
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
||||||
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.skin.SkinManager;
|
||||||
|
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
||||||
|
import org.geysermc.geyser.translator.protocol.Translator;
|
||||||
|
|
||||||
|
@Translator(packet = ClientboundPlayerInfoUpdatePacket.class)
|
||||||
|
public class JavaPlayerInfoUpdateTranslator extends PacketTranslator<ClientboundPlayerInfoUpdatePacket> {
|
||||||
|
@Override
|
||||||
|
public void translate(GeyserSession session, ClientboundPlayerInfoUpdatePacket packet) {
|
||||||
|
if (!packet.getActions().contains(PlayerListEntryAction.ADD_PLAYER)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerListPacket translate = new PlayerListPacket();
|
||||||
|
translate.setAction(PlayerListPacket.Action.ADD);
|
||||||
|
|
||||||
|
for (PlayerListEntry entry : packet.getEntries()) {
|
||||||
|
for (PlayerListEntryAction action : packet.getActions()) {
|
||||||
|
if (action != PlayerListEntryAction.ADD_PLAYER) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameProfile profile = entry.getProfile();
|
||||||
|
PlayerEntity playerEntity;
|
||||||
|
boolean self = profile.getId().equals(session.getPlayerEntity().getUuid());
|
||||||
|
|
||||||
|
if (self) {
|
||||||
|
// Entity is ourself
|
||||||
|
playerEntity = session.getPlayerEntity();
|
||||||
|
} else {
|
||||||
|
playerEntity = session.getEntityCache().getPlayerEntity(profile.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
GameProfile.Property textures = profile.getProperty("textures");
|
||||||
|
String texturesProperty = textures == null ? null : textures.getValue();
|
||||||
|
|
||||||
|
if (playerEntity == null) {
|
||||||
|
// It's a new player
|
||||||
|
playerEntity = new PlayerEntity(
|
||||||
|
session,
|
||||||
|
-1,
|
||||||
|
session.getEntityCache().getNextEntityId().incrementAndGet(),
|
||||||
|
profile.getId(),
|
||||||
|
Vector3f.ZERO,
|
||||||
|
Vector3f.ZERO,
|
||||||
|
0, 0, 0,
|
||||||
|
profile.getName(),
|
||||||
|
texturesProperty
|
||||||
|
);
|
||||||
|
|
||||||
|
session.getEntityCache().addPlayerEntity(playerEntity);
|
||||||
|
} else {
|
||||||
|
playerEntity.setUsername(profile.getName());
|
||||||
|
playerEntity.setTexturesProperty(texturesProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
playerEntity.setPlayerList(true);
|
||||||
|
|
||||||
|
// We'll send our own PlayerListEntry in requestAndHandleSkinAndCape
|
||||||
|
// But we need to send other player's entries so they show up in the player list
|
||||||
|
// without processing their skin information - that'll be processed when they spawn in
|
||||||
|
if (self) {
|
||||||
|
SkinManager.requestAndHandleSkinAndCape(playerEntity, session, skinAndCape ->
|
||||||
|
GeyserImpl.getInstance().getLogger().debug("Loaded Local Bedrock Java Skin Data for " + session.getClientData().getUsername()));
|
||||||
|
} else {
|
||||||
|
playerEntity.setValid(true);
|
||||||
|
PlayerListPacket.Entry playerListEntry = SkinManager.buildCachedEntry(session, playerEntity);
|
||||||
|
|
||||||
|
translate.getEntries().add(playerListEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!translate.getEntries().isEmpty()) {
|
||||||
|
session.sendUpstreamPacket(translate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -30,7 +30,6 @@ import com.nukkitx.math.vector.Vector3f;
|
|||||||
import com.nukkitx.math.vector.Vector3i;
|
import com.nukkitx.math.vector.Vector3i;
|
||||||
import com.nukkitx.nbt.NbtMap;
|
import com.nukkitx.nbt.NbtMap;
|
||||||
import com.nukkitx.nbt.NbtMapBuilder;
|
import com.nukkitx.nbt.NbtMapBuilder;
|
||||||
import com.nukkitx.protocol.bedrock.data.LevelEventType;
|
|
||||||
import com.nukkitx.protocol.bedrock.data.SoundEvent;
|
import com.nukkitx.protocol.bedrock.data.SoundEvent;
|
||||||
import com.nukkitx.protocol.bedrock.packet.LevelEventGenericPacket;
|
import com.nukkitx.protocol.bedrock.packet.LevelEventGenericPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.LevelSoundEventPacket;
|
import com.nukkitx.protocol.bedrock.packet.LevelSoundEventPacket;
|
||||||
@ -49,9 +48,9 @@ public class JavaExplodeTranslator extends PacketTranslator<ClientboundExplodePa
|
|||||||
LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket();
|
LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket();
|
||||||
levelEventPacket.setEventId(2026/*LevelEventType.PARTICLE_BLOCK_EXPLOSION*/);
|
levelEventPacket.setEventId(2026/*LevelEventType.PARTICLE_BLOCK_EXPLOSION*/);
|
||||||
NbtMapBuilder builder = NbtMap.builder();
|
NbtMapBuilder builder = NbtMap.builder();
|
||||||
builder.putFloat("originX", packet.getX());
|
builder.putFloat("originX", (float) packet.getX());
|
||||||
builder.putFloat("originY", packet.getY());
|
builder.putFloat("originY", (float) packet.getY());
|
||||||
builder.putFloat("originZ", packet.getZ());
|
builder.putFloat("originZ", (float) packet.getZ());
|
||||||
builder.putFloat("radius", packet.getRadius());
|
builder.putFloat("radius", packet.getRadius());
|
||||||
builder.putInt("size", packet.getExploded().size());
|
builder.putInt("size", packet.getExploded().size());
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -8,7 +8,7 @@ websocket = "1.5.1"
|
|||||||
protocol = "2.9.14-20221025.193624-1"
|
protocol = "2.9.14-20221025.193624-1"
|
||||||
raknet = "1.6.28-20220125.214016-6"
|
raknet = "1.6.28-20220125.214016-6"
|
||||||
mcauthlib = "d9d773e"
|
mcauthlib = "d9d773e"
|
||||||
mcprotocollib = "9f78bd5"
|
mcprotocollib = "1.19.3-SNAPSHOT"
|
||||||
packetlib = "3.0"
|
packetlib = "3.0"
|
||||||
adventure = "4.12.0-20220629.025215-9"
|
adventure = "4.12.0-20220629.025215-9"
|
||||||
adventure-platform = "4.1.2"
|
adventure-platform = "4.1.2"
|
||||||
@ -80,7 +80,7 @@ guava = { group = "com.google.guava", name = "guava", version.ref = "guava" }
|
|||||||
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
|
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
|
||||||
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
||||||
mcauthlib = { group = "com.github.GeyserMC", name = "MCAuthLib", version.ref = "mcauthlib" }
|
mcauthlib = { group = "com.github.GeyserMC", name = "MCAuthLib", version.ref = "mcauthlib" }
|
||||||
mcprotocollib = { group = "com.github.GeyserMC", name = "MCProtocolLib", version.ref = "mcprotocollib" }
|
mcprotocollib = { group = "com.github.steveice10", name = "mcprotocollib", version.ref = "mcprotocollib" }
|
||||||
packetlib = { group = "com.github.steveice10", name = "packetlib", version.ref = "packetlib" }
|
packetlib = { group = "com.github.steveice10", name = "packetlib", version.ref = "packetlib" }
|
||||||
protocol = { group = "com.nukkitx.protocol", name = "bedrock-v557", version.ref = "protocol" }
|
protocol = { group = "com.nukkitx.protocol", name = "bedrock-v557", version.ref = "protocol" }
|
||||||
raknet = { group = "com.nukkitx.network", name = "raknet", version.ref = "raknet" }
|
raknet = { group = "com.nukkitx.network", name = "raknet", version.ref = "raknet" }
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren