Skip to content

Commit 1bb7928

Browse files
committed
15w31c partial support
1 parent d729d18 commit 1bb7928

File tree

7 files changed

+244
-4
lines changed

7 files changed

+244
-4
lines changed

src/main/java/btw/lowercase/viasnapshot/SnapshotProtocolVersion.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
public class SnapshotProtocolVersion {
77
public static final ProtocolVersion v15w31a = registerSnapshot1_8(49, "15w31a (Client Only)");
88
public static final ProtocolVersion v15w31b = registerSnapshot1_8(50, "15w31b (Client Only)");
9+
public static final ProtocolVersion v15w31c = registerSnapshot1_8(51, "15w31c (Client Only)");
910

1011
private static ProtocolVersion registerSnapshot1_8(final int version, final String name) {
1112
final ProtocolVersion protocolVersion = new RedirectProtocolVersion(version, name, ProtocolVersion.v1_8);

src/main/java/btw/lowercase/viasnapshot/ViaSnapshot.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import btw.lowercase.viasnapshot.protocol.v15w31ato1_8.Protocol15w31a_To1_8;
44
import btw.lowercase.viasnapshot.protocol.v15w31bto15w31a.Protocol15w31b_To15w31a;
5+
import btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.Protocol15w31c_To15w31b;
56
import com.viaversion.viaversion.api.Via;
67
import com.viaversion.viaversion.api.protocol.ProtocolManager;
78
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
@@ -24,6 +25,7 @@ private void onInitializeEvent(ProtocolTranslatorInitEvent event) {
2425
final ProtocolManager protocolManager = Via.getManager().getProtocolManager();
2526
protocolManager.registerProtocol(new Protocol15w31a_To1_8(), SnapshotProtocolVersion.v15w31a, ProtocolVersion.v1_8);
2627
protocolManager.registerProtocol(new Protocol15w31b_To15w31a(), SnapshotProtocolVersion.v15w31b, SnapshotProtocolVersion.v15w31a);
28+
protocolManager.registerProtocol(new Protocol15w31c_To15w31b(), SnapshotProtocolVersion.v15w31c, SnapshotProtocolVersion.v15w31b);
2729
return null;
2830
});
2931
}

src/main/java/btw/lowercase/viasnapshot/protocol/v15w31ato1_8/rewriter/PacketRewriter15w31a.java

Lines changed: 77 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
import btw.lowercase.viasnapshot.protocol.v15w31ato1_8.Protocol15w31a_To1_8;
44
import btw.lowercase.viasnapshot.protocol.v15w31ato1_8.packet.ServerboundPackets15w31a;
55
import com.viaversion.viaversion.api.minecraft.BlockPosition;
6+
import com.viaversion.viaversion.api.minecraft.EulerAngle;
7+
import com.viaversion.viaversion.api.minecraft.Vector;
8+
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
9+
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_8;
610
import com.viaversion.viaversion.api.minecraft.item.DataItem;
711
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
812
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
@@ -12,6 +16,7 @@
1216
import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ClientboundPackets1_8;
1317
import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ServerboundPackets1_8;
1418

19+
import java.util.ArrayList;
1520
import java.util.List;
1621
import java.util.UUID;
1722

@@ -58,7 +63,12 @@ protected void register() {
5863
map(Types.BYTE); // Pitch
5964
read(Types.SHORT); // Hand Stack ID? (1.8 server)
6065
map(Types1_8.ENTITY_DATA_LIST);
61-
// TODO: Fix errors in console about unknown/wrong entity data types
66+
handler(wrapper -> {
67+
List<EntityData> entityData = wrapper.get(Types1_8.ENTITY_DATA_LIST, 0);
68+
if (!entityData.isEmpty()) {
69+
wrapper.set(Types1_8.ENTITY_DATA_LIST, 0, handleEntityData(entityData));
70+
}
71+
});
6272
}
6373
});
6474

@@ -104,15 +114,29 @@ protected void register() {
104114
map(Types.SHORT); // Velocity Y
105115
map(Types.SHORT); // Velocity Z
106116
map(Types1_8.ENTITY_DATA_LIST);
107-
// TODO: Fix entity data
108117
handler(wrapper -> {
109-
wrapper.set(Types1_8.ENTITY_DATA_LIST, 0, List.of());
118+
List<EntityData> entityData = wrapper.get(Types1_8.ENTITY_DATA_LIST, 0);
119+
if (!entityData.isEmpty()) {
120+
wrapper.set(Types1_8.ENTITY_DATA_LIST, 0, handleEntityData(entityData));
121+
}
110122
});
111123
}
112124
});
113125

114126
// TODO: Remap entity data
115-
protocol.cancelClientbound(ClientboundPackets1_8.SET_ENTITY_DATA);
127+
protocol.registerClientbound(ClientboundPackets1_8.SET_ENTITY_DATA, new PacketHandlers() {
128+
@Override
129+
protected void register() {
130+
map(Types.VAR_INT); // Entity Id
131+
map(Types1_8.ENTITY_DATA_LIST);
132+
handler(wrapper -> {
133+
List<EntityData> entityData = wrapper.get(Types1_8.ENTITY_DATA_LIST, 0);
134+
if (!entityData.isEmpty()) {
135+
wrapper.set(Types1_8.ENTITY_DATA_LIST, 0, handleEntityData(entityData));
136+
}
137+
});
138+
}
139+
});
116140

117141
protocol.registerClientbound(ClientboundPackets1_8.OPEN_SCREEN, new PacketHandlers() {
118142
@Override
@@ -256,4 +280,53 @@ protected void register() {
256280
}
257281
});
258282
}
283+
284+
private static List<EntityData> handleEntityData(List<EntityData> entityData) {
285+
List<EntityData> newData = new ArrayList<>();
286+
287+
for (EntityData data : entityData) {
288+
Object value = data.getValue();
289+
if (value == null)
290+
continue;
291+
switch ((EntityDataTypes1_8) data.dataType()) {
292+
case BYTE:
293+
if (data.dataType() == EntityDataTypes1_8.BYTE) {
294+
data.setValue(value);
295+
}
296+
297+
if (data.dataType() == EntityDataTypes1_8.INT) {
298+
data.setValue(((Integer) value).byteValue());
299+
}
300+
301+
if (data.dataType() == EntityDataTypes1_8.FLOAT) {
302+
data.setValue(((Float) value).byteValue());
303+
}
304+
305+
if (data.dataType() == EntityDataTypes1_8.SHORT) {
306+
data.setValue(((Short) value).byteValue());
307+
}
308+
309+
break;
310+
case FLOAT:
311+
case STRING:
312+
case INT:
313+
case SHORT:
314+
case ITEM:
315+
data.setValue(value);
316+
break;
317+
case BLOCK_POSITION:
318+
Vector vector = (Vector) value;
319+
data.setValue(vector);
320+
break;
321+
case ROTATIONS:
322+
EulerAngle angle = (EulerAngle) value;
323+
data.setValue(angle);
324+
break;
325+
default:
326+
throw new RuntimeException("Unhandled EntityDataType: " + data.dataType());
327+
}
328+
}
329+
330+
return newData;
331+
}
259332
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package btw.lowercase.viasnapshot.protocol.v15w31cto15w31b;
2+
3+
import btw.lowercase.viasnapshot.protocol.v15w31bto15w31a.packet.ClientboundPackets15w31b;
4+
import btw.lowercase.viasnapshot.protocol.v15w31bto15w31a.packet.ServerboundPackets15w31b;
5+
import btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.packet.ClientboundPackets15w31c;
6+
import btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.packet.ServerboundPackets15w31c;
7+
import btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.rewriter.PacketRewriter15w31c;
8+
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
9+
10+
// https://wiki.vg/index.php?title=Pre-release_protocol&oldid=6780
11+
public class Protocol15w31c_To15w31b extends AbstractProtocol<ClientboundPackets15w31b, ClientboundPackets15w31c, ServerboundPackets15w31b, ServerboundPackets15w31c> {
12+
public Protocol15w31c_To15w31b() {
13+
super(ClientboundPackets15w31b.class, ClientboundPackets15w31c.class, ServerboundPackets15w31b.class, ServerboundPackets15w31c.class);
14+
}
15+
16+
@Override
17+
protected void registerPackets() {
18+
PacketRewriter15w31c.register(this);
19+
}
20+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.packet;
2+
3+
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
4+
5+
public enum ClientboundPackets15w31c implements ClientboundPacketType {
6+
KEEP_ALIVE,
7+
LOGIN,
8+
CHAT,
9+
SET_TIME,
10+
SET_EQUIPPED_ITEM,
11+
SET_DEFAULT_SPAWN_POSITION,
12+
SET_HEALTH,
13+
RESPAWN,
14+
PLAYER_POSITION,
15+
SET_CARRIED_ITEM,
16+
PLAYER_SLEEP,
17+
ANIMATE,
18+
ADD_PLAYER,
19+
TAKE_ITEM_ENTITY,
20+
ADD_ENTITY,
21+
ADD_MOB,
22+
ADD_PAINTING,
23+
ADD_EXPERIENCE_ORB,
24+
SET_ENTITY_MOTION,
25+
REMOVE_ENTITIES,
26+
MOVE_ENTITY,
27+
MOVE_ENTITY_POS,
28+
MOVE_ENTITY_ROT,
29+
MOVE_ENTITY_POS_ROT,
30+
TELEPORT_ENTITY,
31+
ROTATE_HEAD,
32+
ENTITY_EVENT,
33+
SET_ENTITY_LINK,
34+
SET_ENTITY_DATA,
35+
UPDATE_MOB_EFFECT,
36+
REMOVE_MOB_EFFECT,
37+
SET_EXPERIENCE,
38+
UPDATE_ATTRIBUTES,
39+
LEVEL_CHUNK,
40+
CHUNK_BLOCKS_UPDATE,
41+
BLOCK_UPDATE,
42+
BLOCK_EVENT,
43+
BLOCK_DESTRUCTION,
44+
MAP_BULK_CHUNK,
45+
EXPLODE,
46+
LEVEL_EVENT,
47+
CUSTOM_SOUND,
48+
LEVEL_PARTICLES,
49+
GAME_EVENT,
50+
ADD_GLOBAL_ENTITY,
51+
OPEN_SCREEN,
52+
CONTAINER_CLOSE,
53+
CONTAINER_SET_SLOT,
54+
CONTAINER_SET_CONTENT,
55+
CONTAINER_SET_DATA,
56+
CONTAINER_ACK,
57+
UPDATE_SIGN,
58+
MAP_ITEM_DATA,
59+
BLOCK_ENTITY_DATA,
60+
OPEN_SIGN_EDITOR,
61+
AWARD_STATS,
62+
PLAYER_INFO,
63+
PLAYER_ABILITIES,
64+
COMMAND_SUGGESTIONS,
65+
SET_OBJECTIVE,
66+
SET_SCORE,
67+
SET_DISPLAY_OBJECTIVE,
68+
SET_PLAYER_TEAM,
69+
CUSTOM_PAYLOAD,
70+
DISCONNECT,
71+
CHANGE_DIFFICULTY,
72+
PLAYER_COMBAT,
73+
SET_CAMERA,
74+
SET_BORDER,
75+
SET_TITLES,
76+
SET_COMPRESSION,
77+
TAB_LIST,
78+
RESOURCE_PACK,
79+
BOSS_BAR;
80+
81+
ClientboundPackets15w31c() {
82+
}
83+
84+
public int getId() {
85+
return this.ordinal();
86+
}
87+
88+
public String getName() {
89+
return this.name();
90+
}
91+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.packet;
2+
3+
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
4+
5+
public enum ServerboundPackets15w31c implements ServerboundPacketType {
6+
KEEP_ALIVE,
7+
CHAT,
8+
INTERACT,
9+
MOVE_PLAYER_STATUS_ONLY,
10+
MOVE_PLAYER_POS,
11+
MOVE_PLAYER_ROT,
12+
MOVE_PLAYER_POS_ROT,
13+
PLAYER_ACTION,
14+
USE_ITEM,
15+
USE_ITEM_ON,
16+
SET_CARRIED_ITEM,
17+
SWING,
18+
PLAYER_COMMAND,
19+
PLAYER_INPUT,
20+
CONTAINER_CLOSE,
21+
CONTAINER_CLICK,
22+
CONTAINER_ACK,
23+
SET_CREATIVE_MODE_SLOT,
24+
CONTAINER_BUTTON_CLICK,
25+
SIGN_UPDATE,
26+
PLAYER_ABILITIES,
27+
COMMAND_SUGGESTION,
28+
CLIENT_INFORMATION,
29+
CLIENT_COMMAND,
30+
CUSTOM_PAYLOAD,
31+
TELEPORT_TO_ENTITY,
32+
RESOURCE_PACK;
33+
34+
ServerboundPackets15w31c() {
35+
}
36+
37+
public int getId() {
38+
return this.ordinal();
39+
}
40+
41+
public String getName() {
42+
return this.name();
43+
}
44+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.rewriter;
2+
3+
import btw.lowercase.viasnapshot.protocol.v15w31cto15w31b.Protocol15w31c_To15w31b;
4+
5+
//
6+
public class PacketRewriter15w31c {
7+
public static void register(final Protocol15w31c_To15w31b protocol) {
8+
}
9+
}

0 commit comments

Comments
 (0)