summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java
blob: ba5d9dec5fb21ab42dae869d4a0f4ace8e0aab70 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package cuchaz.enigma.network.packet;

import cuchaz.enigma.gui.GuiController;
import cuchaz.enigma.network.ServerPacketHandler;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;

public class PacketRegistry {

	private static final Map<Class<? extends Packet<ServerPacketHandler>>, Integer> c2sPacketIds = new HashMap<>();
	private static final Map<Integer, Supplier<? extends Packet<ServerPacketHandler>>> c2sPacketCreators = new HashMap<>();
	private static final Map<Class<? extends Packet<GuiController>>, Integer> s2cPacketIds = new HashMap<>();
	private static final Map<Integer, Supplier<? extends Packet<GuiController>>> s2cPacketCreators = new HashMap<>();

	private static <T extends Packet<ServerPacketHandler>> void registerC2S(int id, Class<T> clazz, Supplier<T> creator) {
		c2sPacketIds.put(clazz, id);
		c2sPacketCreators.put(id, creator);
	}

	private static <T extends Packet<GuiController>> void registerS2C(int id, Class<T> clazz, Supplier<T> creator) {
		s2cPacketIds.put(clazz, id);
		s2cPacketCreators.put(id, creator);
	}

	static {
		registerC2S(0, LoginC2SPacket.class, LoginC2SPacket::new);
		registerC2S(1, ConfirmChangeC2SPacket.class, ConfirmChangeC2SPacket::new);
		registerC2S(2, RenameC2SPacket.class, RenameC2SPacket::new);
		registerC2S(3, RemoveMappingC2SPacket.class, RemoveMappingC2SPacket::new);
		registerC2S(4, ChangeDocsC2SPacket.class, ChangeDocsC2SPacket::new);
		registerC2S(5, MarkDeobfuscatedC2SPacket.class, MarkDeobfuscatedC2SPacket::new);
		registerC2S(6, MessageC2SPacket.class, MessageC2SPacket::new);

		registerS2C(0, KickS2CPacket.class, KickS2CPacket::new);
		registerS2C(1, SyncMappingsS2CPacket.class, SyncMappingsS2CPacket::new);
		registerS2C(2, RenameS2CPacket.class, RenameS2CPacket::new);
		registerS2C(3, RemoveMappingS2CPacket.class, RemoveMappingS2CPacket::new);
		registerS2C(4, ChangeDocsS2CPacket.class, ChangeDocsS2CPacket::new);
		registerS2C(5, MarkDeobfuscatedS2CPacket.class, MarkDeobfuscatedS2CPacket::new);
		registerS2C(6, MessageS2CPacket.class, MessageS2CPacket::new);
		registerS2C(7, UserListS2CPacket.class, UserListS2CPacket::new);
	}

	public static int getC2SId(Packet<ServerPacketHandler> packet) {
		return c2sPacketIds.get(packet.getClass());
	}

	public static Packet<ServerPacketHandler> createC2SPacket(int id) {
		Supplier<? extends Packet<ServerPacketHandler>> creator = c2sPacketCreators.get(id);
		return creator == null ? null : creator.get();
	}

	public static int getS2CId(Packet<GuiController> packet) {
		return s2cPacketIds.get(packet.getClass());
	}

	public static Packet<GuiController> createS2CPacket(int id) {
		Supplier<? extends Packet<GuiController>> creator = s2cPacketCreators.get(id);
		return creator == null ? null : creator.get();
	}

}