Skip to content

Commit 885c702

Browse files
authored
Support packet factory replacement and aliases (#330)
1 parent 88dd0e2 commit 885c702

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,28 @@ public <T extends BedrockPacket> Builder updateSerializer(Class<T> packetClass,
153153
return this;
154154
}
155155

156+
public <T extends BedrockPacket> Builder updateFactory(Class<T> packetClass, Supplier<? extends T> factory) {
157+
BedrockPacketDefinition<T> info = (BedrockPacketDefinition<T>) packets.get(packetClass);
158+
checkArgument(info != null, "Packet does not exist");
159+
BedrockPacketDefinition<T> updatedInfo = new BedrockPacketDefinition<>(info.getId(), (Supplier<T>) factory, info.getSerializer(), info.getRecipient());
160+
161+
packets.replace(packetClass, info, updatedInfo);
162+
163+
return this;
164+
}
165+
166+
public <T extends BedrockPacket, A extends T> Builder aliasPacket(Class<A> packetClass, Class<T> aliasedClass) {
167+
checkNotNull(packetClass, "packetClass");
168+
checkNotNull(aliasedClass, "aliasedClass");
169+
checkArgument(!packets.containsKey(packetClass), "Packet class already registered");
170+
171+
BedrockPacketDefinition<? extends BedrockPacket> info = packets.get(aliasedClass);
172+
checkArgument(info != null, "Packet does not exist");
173+
174+
packets.put(packetClass, info);
175+
return this;
176+
}
177+
156178
public Builder retainPackets(Class<? extends BedrockPacket>... packets) {
157179
this.packets.keySet().retainAll(Arrays.asList(packets));
158180

0 commit comments

Comments
 (0)