mirror of
https://github.com/Nan1t/NanoLimbo.git
synced 2025-07-12 12:40:14 +02:00
91 lines
2.8 KiB
Java
91 lines
2.8 KiB
Java
package ru.nanit.limbo.protocol.registry;
|
|
|
|
import ru.nanit.limbo.protocol.Packet;
|
|
import ru.nanit.limbo.protocol.packets.*;
|
|
import ru.nanit.limbo.protocol.packets.login.*;
|
|
import ru.nanit.limbo.protocol.packets.play.*;
|
|
import ru.nanit.limbo.protocol.packets.status.PacketStatusPing;
|
|
import ru.nanit.limbo.protocol.packets.status.PacketStatusRequest;
|
|
import ru.nanit.limbo.protocol.packets.status.PacketStatusResponse;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.function.Supplier;
|
|
|
|
public enum State {
|
|
|
|
HANDSHAKING(0){
|
|
{
|
|
serverBound.register(0x00, PacketHandshake::new);
|
|
}
|
|
},
|
|
STATUS(1){
|
|
{
|
|
serverBound.register(0x01, PacketStatusPing::new);
|
|
serverBound.register(0x00, PacketStatusRequest::new);
|
|
clientBound.register(0x00, PacketStatusResponse::new);
|
|
clientBound.register(0x01, PacketStatusPing::new);
|
|
}
|
|
},
|
|
LOGIN(2){
|
|
{
|
|
serverBound.register(0x00, PacketLoginStart::new);
|
|
clientBound.register(0x00, PacketDisconnect::new);
|
|
clientBound.register(0x02, PacketLoginSuccess::new);
|
|
}
|
|
},
|
|
PLAY(3){
|
|
{
|
|
serverBound.register(0x10, PacketKeepAlive::new);
|
|
clientBound.register(0x24, PacketJoinGame::new);
|
|
clientBound.register(0x34, PacketPlayerPositionAndLook::new);
|
|
clientBound.register(0x1F, PacketKeepAlive::new);
|
|
clientBound.register(0x0E, PacketChatMessage::new);
|
|
clientBound.register(0x0C, PacketBossBar::new);
|
|
clientBound.register(0x32, PacketPlayerInfo::new);
|
|
}
|
|
};
|
|
|
|
private static final Map<Integer, State> STATE_BY_ID = new HashMap<>();
|
|
|
|
static {
|
|
for (State registry : values()){
|
|
STATE_BY_ID.put(registry.stateId, registry);
|
|
}
|
|
}
|
|
|
|
private final int stateId;
|
|
public final PacketRegistry serverBound = new PacketRegistry();
|
|
public final PacketRegistry clientBound = new PacketRegistry();
|
|
|
|
State(int stateId){
|
|
this.stateId = stateId;
|
|
}
|
|
|
|
public static State getById(int stateId){
|
|
return STATE_BY_ID.get(stateId);
|
|
}
|
|
|
|
public static class PacketRegistry {
|
|
|
|
private final Map<Integer, Supplier<?>> packetsById = new HashMap<>();
|
|
private final Map<Class<?>, Integer> packetIdByClass = new HashMap<>();
|
|
|
|
public Packet getPacket(int packetId){
|
|
Supplier<?> supplier = packetsById.get(packetId);
|
|
return supplier == null ? null : (Packet) supplier.get();
|
|
}
|
|
|
|
public int getPacketId(Class<?> packetClass){
|
|
return packetIdByClass.getOrDefault(packetClass, -1);
|
|
}
|
|
|
|
public void register(int packetId, Supplier<?> supplier){
|
|
packetsById.put(packetId, supplier);
|
|
packetIdByClass.put(supplier.get().getClass(), packetId);
|
|
}
|
|
|
|
}
|
|
|
|
}
|