forked from GeyserMC/Geyser
Fix players not showing up
Skins still need some work as it applies to every player online rather than a specific player; however, players are now visible regardless.
This commit is contained in:
parent
3c1a274f64
commit
3e8ab6ca83
2 changed files with 17 additions and 6 deletions
|
@ -3,6 +3,7 @@ package org.geysermc.connector.utils;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.Color;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -18,11 +19,11 @@ public class ProvidedSkin {
|
||||||
try {
|
try {
|
||||||
for (int y = 0; y < image.getHeight(); y++) {
|
for (int y = 0; y < image.getHeight(); y++) {
|
||||||
for (int x = 0; x < image.getWidth(); x++) {
|
for (int x = 0; x < image.getWidth(); x++) {
|
||||||
int rgba = image.getRGB(x, y);
|
Color color = new Color(image.getRGB(x, y), true);
|
||||||
outputStream.write((rgba >> 16) & 0xFF);
|
outputStream.write(color.getRed());
|
||||||
outputStream.write((rgba >> 8) & 0xFF);
|
outputStream.write(color.getGreen());
|
||||||
outputStream.write(rgba & 0xFF);
|
outputStream.write(color.getBlue());
|
||||||
outputStream.write((rgba >> 24) & 0xFF);
|
outputStream.write(color.getAlpha());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
image.flush();
|
image.flush();
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.geysermc.connector.entity.PlayerEntity;
|
||||||
import org.geysermc.connector.network.session.GeyserSession;
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
|
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
@ -48,7 +49,16 @@ public class SkinUtils {
|
||||||
public static PlayerListPacket.Entry buildEntryManually(UUID uuid, String username, long geyserId,
|
public static PlayerListPacket.Entry buildEntryManually(UUID uuid, String username, long geyserId,
|
||||||
String skinId, byte[] skinData, byte[] capeData,
|
String skinId, byte[] skinData, byte[] capeData,
|
||||||
String geometryName, String geometryData) {
|
String geometryName, String geometryData) {
|
||||||
SerializedSkin serializedSkin = SerializedSkin.of(skinId, ImageData.of(64, 64, skinData), ImageData.of(64, 32, capeData), geometryName, geometryData, true);
|
if (skinData == null || skinData.length == 0) {
|
||||||
|
skinData = SkinProvider.EMPTY_SKIN.getSkinData();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (capeData == null || capeData.length == 0) {
|
||||||
|
capeData = SkinProvider.EMPTY_CAPE.getCapeData();
|
||||||
|
}
|
||||||
|
|
||||||
|
SerializedSkin serializedSkin = SerializedSkin.of(skinId, geometryName, ImageData.of(64, 64, skinData),
|
||||||
|
Collections.emptyList(), ImageData.of(64, 32, capeData), geometryData, "", true, false, false, "", "");
|
||||||
|
|
||||||
PlayerListPacket.Entry entry = new PlayerListPacket.Entry(uuid);
|
PlayerListPacket.Entry entry = new PlayerListPacket.Entry(uuid);
|
||||||
entry.setName(username);
|
entry.setName(username);
|
||||||
|
|
Loading…
Reference in a new issue