Skip to content

Commit de37fa7

Browse files
committed
Moar skin stuff
1 parent 3d0cfae commit de37fa7

File tree

10 files changed

+71
-17
lines changed

10 files changed

+71
-17
lines changed

src/protocolsupportpocketstuff/ProtocolSupportPocketStuff.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import protocolsupportpocketstuff.hacks.holograms.HologramsPacketListener;
2020
import protocolsupportpocketstuff.hacks.itemframes.ItemFramesPacketListener;
2121
import protocolsupportpocketstuff.hacks.skulls.SkullTilePacketListener;
22-
import protocolsupportpocketstuff.metadata.MetadataProvider;
22+
import protocolsupportpocketstuff.metadata.EntityMetadataProvider;
2323
import protocolsupportpocketstuff.modals.ModalReceiver;
2424
import protocolsupportpocketstuff.packet.PEReceiver;
2525
import protocolsupportpocketstuff.resourcepacks.ResourcePackListener;
@@ -61,7 +61,7 @@ public void onEnable() {
6161
PocketStuffAPI.registerPacketListeners(new PocketInfoReceiver());
6262
PocketStuffAPI.registerPacketListeners(new ModalReceiver());
6363
// = Metadata = \\
64-
PEMetaProviderSPI.setProvider(new MetadataProvider());
64+
PEMetaProviderSPI.setProvider(new EntityMetadataProvider());
6565
// = ResourcePacks = \\
6666
if (!PocketStuffAPI.getResourcePackManager().isEmpty()) {
6767
ResourcePackListener provider = new ResourcePackListener();

src/protocolsupportpocketstuff/api/entity/PocketMetadata.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import protocolsupport.protocol.utils.datawatcher.objects.DataWatcherObjectString;
99
import protocolsupport.utils.CollectionsUtils;
1010
import protocolsupportpocketstuff.api.util.PocketCon;
11-
import protocolsupportpocketstuff.metadata.MetadataProvider;
11+
import protocolsupportpocketstuff.metadata.EntityMetadataProvider;
1212
import protocolsupportpocketstuff.packet.play.EntityDataPacket;
1313

1414
import java.util.concurrent.ConcurrentHashMap;
@@ -68,7 +68,7 @@ public static void setInteractText(Entity entity, String interactText) {
6868
* @param interactText
6969
*/
7070
public static void setInteractText(int entityId, String interactText) {
71-
if (interactText.equals(MetadataProvider.DEFAULTINTERACT)) {
71+
if (interactText.equals(EntityMetadataProvider.DEFAULTINTERACT)) {
7272
entityInteracts.remove(entityId);
7373
} else {
7474
entityInteracts.put(entityId, interactText);

src/protocolsupportpocketstuff/api/skins/SkinUtils.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,12 @@ public static void updateSkin(Player player, byte[] skin, SkinDataWrapper skinda
8282
//removes the entity and display the new skin
8383
onlinePlayer.hidePlayer(ProtocolSupportPocketStuff.getInstance(), player);
8484
onlinePlayer.showPlayer(ProtocolSupportPocketStuff.getInstance(), player);
85-
Bukkit.getScheduler().runTaskLater(ProtocolSupportPocketStuff.getInstance(), () -> {
86-
//sends skin packet to dynamically update PE skins.
87-
if (PocketPlayer.isPocketPlayer(onlinePlayer)) {
85+
if (PocketPlayer.isPocketPlayer(onlinePlayer)) {
86+
Bukkit.getScheduler().runTaskLater(ProtocolSupportPocketStuff.getInstance(), () -> {
87+
//sends skin packet to dynamically update PE skins.
8888
PocketPlayer.sendSkin(onlinePlayer, player.getUniqueId(), skin, isSlim);
89-
}
90-
}, 5l);
89+
}, 5l);
90+
}
9191
});
9292
});
9393
}

src/protocolsupportpocketstuff/metadata/MetadataProvider.java renamed to src/protocolsupportpocketstuff/metadata/EntityMetadataProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import java.util.UUID;
88

9-
public class MetadataProvider extends PEMetaProvider {
9+
public class EntityMetadataProvider extends PEMetaProvider {
1010

1111
public static final String DEFAULTINTERACT = "Interact";
1212

src/protocolsupportpocketstuff/packet/handshake/ClientLoginPacket.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616
import java.io.InputStream;
1717
import java.io.InputStreamReader;
1818
import java.util.Base64;
19+
import java.util.List;
20+
import java.util.Map;
21+
22+
import com.google.common.reflect.TypeToken;
1923

2024
public class ClientLoginPacket extends PEPacket {
2125

2226
private int protocolVersion;
27+
private Map<String, JsonObject> chain;
2328
private JsonObject jsonPayload;
2429

2530
public ClientLoginPacket() { }
@@ -46,7 +51,10 @@ private JsonObject decodeToken(String token) {
4651
public void readFromClientData(Connection connection, ByteBuf clientData) {
4752
protocolVersion = clientData.readInt(); //protocol version
4853
ByteBuf logindata = Unpooled.wrappedBuffer(ArraySerializer.readByteArray(clientData, connection.getVersion()));
49-
logindata.skipBytes(logindata.readIntLE()); //skip chain data
54+
chain = GsonUtils.GSON.fromJson(
55+
new InputStreamReader(new ByteBufInputStream(logindata, logindata.readIntLE())),
56+
new TypeToken<Map<String, List<String>>>() { private static final long serialVersionUID = 1L; }.getType()
57+
);
5058
try { //decode skin data
5159
InputStream inputStream = new ByteBufInputStream(logindata, logindata.readIntLE());
5260
ByteArrayOutputStream result = new ByteArrayOutputStream();
@@ -67,6 +75,10 @@ public int getProtocolVersion() {
6775
return protocolVersion;
6876
}
6977

78+
public Map<String, JsonObject> getChain() {
79+
return chain;
80+
}
81+
7082
public JsonObject getJsonPayload() {
7183
return jsonPayload;
7284
}

src/protocolsupportpocketstuff/skin/PcToPeProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package protocolsupportpocketstuff.skin;
22

33
import protocolsupport.api.unsafe.peskins.PESkinsProvider;
4+
import protocolsupportpocketstuff.ProtocolSupportPocketStuff;
45
import protocolsupportpocketstuff.storage.Skins;
56

67
import java.util.function.Consumer;
@@ -11,7 +12,8 @@ public class PcToPeProvider extends PESkinsProvider {
1112

1213
@Override
1314
public byte[] getSkinData(String url) {
14-
if (skins.hasPeSkin(url)) {
15+
ProtocolSupportPocketStuff.getInstance().debug("Instantly returning skin: " + url);
16+
if (skins.hasPcSkin(url)) {
1517
return skins.getPcSkin(url);
1618
}
1719
return null;

src/protocolsupportpocketstuff/skin/PeToPcProvider.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import protocolsupportpocketstuff.api.util.PocketPacketListener;
1515
import protocolsupportpocketstuff.packet.handshake.ClientLoginPacket;
1616
import protocolsupportpocketstuff.packet.play.SkinPacket;
17+
import protocolsupportpocketstuff.util.PacketUtils;
1718
import protocolsupportpocketstuff.util.StuffUtils;
1819

1920
public class PeToPcProvider implements PocketPacketListener, Listener {
@@ -27,23 +28,24 @@ public void onConnect(Connection connection, ClientLoginPacket packet) {
2728
String skinData = packet.getJsonPayload().get("SkinData").getAsString();
2829
byte[] skinByteArray = Base64.getDecoder().decode(skinData);
2930
boolean slim = packet.getJsonPayload().get("SkinGeometryName").getAsString().equals("geometry.humanoid.customSlim");
31+
plugin.debug("SLIM: " + slim + " DATA LENGTH: " + skinByteArray.length);
3032
new MineskinThread(skinByteArray, slim, (skindata) -> {
33+
//TODO rewrite when PS properties event is more sane.
3134
if (connection.getPlayer() == null) {
3235
plugin.debug("MEta added!");
3336
connection.addMetadata(StuffUtils.APPLY_SKIN_ON_JOIN_KEY, skindata);
34-
} else {
37+
}
38+
new PacketUtils.RunWhenOnline(connection, () -> {
3539
plugin.debug("Dynamic skin update!");
3640
SkinUtils.updateSkin(connection.getPlayer(), skinByteArray, skindata, slim);
37-
}
41+
}, 2).start();
3842
}).start();
3943
}
4044

4145
@PocketPacketHandler
4246
public void onSkinChange(Connection connection, SkinPacket packet) {
43-
//boolean slim = packet.getSkinName().equals("skin.Standard.CustomSlim");
4447
System.out.println(packet.getGeometryId());
4548
boolean slim = packet.getGeometryId().equals("geometry.humanoid.customSlim");
46-
plugin.debug(slim + "sdkfjsdlfj");
4749
new MineskinThread(packet.getSkinData(), slim, (skindata) -> {
4850
plugin.debug("Dynamic skin update!");
4951
SkinUtils.updateSkin(connection.getPlayer(), packet.getSkinData(), skindata, slim);

src/protocolsupportpocketstuff/storage/Skins.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public boolean hasPcSkin(String url) {
8787
* @return true if the skin was cached
8888
*/
8989
public boolean hasPeSkin(String uuid) {
90+
System.out.println("MEEp" + uuid);
9091
return pcSkinCache.containsKey(uuid);
9192
}
9293

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package protocolsupportpocketstuff.util;
2+
3+
import protocolsupport.api.Connection;
4+
5+
public class PacketUtils {
6+
7+
public static class RunWhenOnline extends Thread {
8+
9+
private Connection connection;
10+
private Runnable run;
11+
private int maxtries;
12+
13+
public RunWhenOnline(Connection connection, Runnable run, int maxtries) {
14+
this.connection = connection;
15+
this.run = run;
16+
this.maxtries = maxtries;
17+
}
18+
19+
@Override
20+
public void run() {
21+
super.run();
22+
int tries = 0;
23+
while(connection.getPlayer() == null) {
24+
try {
25+
tries++;
26+
if (tries > maxtries) { return; }
27+
Thread.sleep(1000l);
28+
} catch (InterruptedException e) { }
29+
}
30+
run.run();
31+
}
32+
33+
}
34+
35+
}

src/protocolsupportpocketstuff/util/PocketInfoReceiver.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ public class PocketInfoReceiver implements PocketPacketListener {
1313
@PocketPacketHandler
1414
public void onConnect(Connection connection, ClientLoginPacket packet) {
1515
JsonObject clientPayload = packet.getJsonPayload();
16+
//Map<String, JsonObject> chain = packet.getChain();
1617
HashMap<String, Object> clientInfo = new HashMap<>();
1718
// "In general you shouldn't really expect the payload to be sent with psbpe" -Shevchik
18-
if (clientPayload != null) {
19+
if (/*chain != null &&*/ clientPayload != null) {
20+
//clientInfo.put("PocketUUID", );
1921
clientInfo.put("ClientRandomId", clientPayload.get("ClientRandomId").getAsLong());
2022
clientInfo.put("DeviceModel", clientPayload.get("DeviceModel").getAsString());
2123
clientInfo.put("DeviceOS", clientPayload.get("DeviceOS").getAsInt());

0 commit comments

Comments
 (0)