1+ package net .swofty .commons .party ;
2+
3+ import lombok .Getter ;
4+ import lombok .NonNull ;
5+ import net .swofty .commons .protocol .Serializer ;
6+ import org .tinylog .Logger ;
7+
8+ import java .util .Arrays ;
9+ import java .util .List ;
10+ import java .util .UUID ;
11+
12+ @ Getter
13+ public abstract class PartyEvent {
14+ private final Party party ;
15+
16+ public PartyEvent (Party party ) {
17+ this .party = party ;
18+ }
19+
20+ public abstract Serializer getSerializer ();
21+
22+ public List <UUID > getParticipants () {
23+ return party != null ? party .getParticipants () : List .of ();
24+ }
25+
26+ public static @ NonNull PartyEvent findFromType (String className ) {
27+ String [] packageNames = {
28+ "net.swofty.commons.party.events" ,
29+ "net.swofty.commons.party.events.response"
30+ };
31+
32+ for (String packageName : packageNames ) {
33+ try {
34+ Class <?> clazz = Class .forName (packageName + "." + className );
35+ // Create a dummy instance just to get the serializer for deserialization
36+ // We'll never actually use this instance - it's just for getting the serializer
37+ return createDummyInstance (clazz );
38+ } catch (Exception e ) {
39+ // Try next package
40+ }
41+ }
42+
43+ throw new RuntimeException ("Failed to find party event class: " + className + " in " + Arrays .toString (packageNames ));
44+ }
45+
46+ @ SuppressWarnings ("unchecked" )
47+ private static PartyEvent createDummyInstance (Class <?> clazz ) throws Exception {
48+ String className = clazz .getSimpleName ();
49+
50+ // Handle request events (these all have null party or specific constructors)
51+ switch (className ) {
52+ case "PartyAcceptInviteEvent" -> {
53+ var constructor = clazz .getDeclaredConstructor (UUID .class , UUID .class );
54+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID (), UUID .randomUUID ());
55+ }
56+ case "PartyLeaveRequestEvent" -> {
57+ var constructor = clazz .getDeclaredConstructor (UUID .class );
58+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID ());
59+ }
60+ case "PartyDisbandRequestEvent" -> {
61+ var constructor = clazz .getDeclaredConstructor (UUID .class );
62+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID ());
63+ }
64+ case "PartyTransferRequestEvent" -> {
65+ var constructor = clazz .getDeclaredConstructor (UUID .class , UUID .class );
66+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID (), UUID .randomUUID ());
67+ }
68+ case "PartyKickRequestEvent" -> {
69+ var constructor = clazz .getDeclaredConstructor (UUID .class , UUID .class );
70+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID (), UUID .randomUUID ());
71+ }
72+ case "PartyPromoteRequestEvent" -> {
73+ var constructor = clazz .getDeclaredConstructor (UUID .class , UUID .class );
74+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID (), UUID .randomUUID ());
75+ }
76+ case "PartyDemoteRequestEvent" -> {
77+ var constructor = clazz .getDeclaredConstructor (UUID .class , UUID .class );
78+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID (), UUID .randomUUID ());
79+ }
80+ case "PartyPlayerSwitchedServerEvent" -> {
81+ var constructor = clazz .getDeclaredConstructor (UUID .class );
82+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID ());
83+ }
84+ case "PartyWarpRequestEvent" -> {
85+ var constructor = clazz .getDeclaredConstructor (UUID .class );
86+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID ());
87+ }
88+ case "PartyListRequestEvent" -> {
89+ var constructor = clazz .getDeclaredConstructor (UUID .class );
90+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID ());
91+ }
92+ case "PartyHijackRequestEvent" -> {
93+ var constructor = clazz .getDeclaredConstructor (UUID .class , UUID .class );
94+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID (), UUID .randomUUID ());
95+ }
96+ case "PartyChatMessageEvent" -> {
97+ var constructor = clazz .getDeclaredConstructor (UUID .class , String .class );
98+ return (PartyEvent ) constructor .newInstance (UUID .randomUUID (), "" );
99+ }
100+ // Handle response events
101+ case "PartyPlayerSwitchedServerResponseEvent" -> {
102+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
103+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class );
104+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID ());
105+ }
106+ case "PartyChatMessageResponseEvent" -> {
107+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
108+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class , String .class );
109+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID (), "" );
110+ }
111+ case "PartyInviteResponseEvent" -> {
112+ var pendingParty = net .swofty .commons .party .PendingParty .create (UUID .randomUUID (), UUID .randomUUID ());
113+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .PendingParty .class );
114+ return (PartyEvent ) constructor .newInstance (pendingParty );
115+ }
116+ case "PartyWarpOverviewResponseEvent" -> {
117+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
118+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class , List .class , List .class );
119+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID (), List .of (), List .of ());
120+ }
121+ case "PartyStartedResponseEvent" -> {
122+ var constructor = clazz .getDeclaredConstructor (FullParty .class );
123+ return (PartyEvent ) constructor .newInstance (FullParty .create (UUID .randomUUID (), UUID .randomUUID ()));
124+ }
125+ case "PartyDisbandResponseEvent" -> {
126+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
127+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class , String .class );
128+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID (), "" );
129+ }
130+ case "PartyLeaderTransferResponseEvent" -> {
131+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
132+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class , UUID .class );
133+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID (), UUID .randomUUID ());
134+ }
135+ case "PartyMemberJoinResponseEvent" -> {
136+ var constructor = clazz .getDeclaredConstructor (FullParty .class , UUID .class , UUID .class );
137+ return (PartyEvent ) constructor .newInstance (FullParty .create (UUID .randomUUID (), UUID .randomUUID ()), UUID .randomUUID (), UUID .randomUUID ());
138+ }
139+ case "PartyMemberKickResponseEvent" -> {
140+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
141+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class , UUID .class );
142+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID (), UUID .randomUUID ());
143+ }
144+ case "PartyInviteExpiredResponseEvent" -> {
145+ var constructor = clazz .getDeclaredConstructor (FullParty .class , UUID .class , UUID .class );
146+ return (PartyEvent ) constructor .newInstance (FullParty .create (UUID .randomUUID (), UUID .randomUUID ()), UUID .randomUUID (), UUID .randomUUID ());
147+ }
148+ case "PartyMemberLeaveResponseEvent" -> {
149+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
150+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class );
151+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID ());
152+ }
153+ case "PartyPromotionResponseEvent" -> {
154+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
155+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class , UUID .class , net .swofty .commons .party .FullParty .Role .class );
156+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID (), UUID .randomUUID (), net .swofty .commons .party .FullParty .Role .MEMBER );
157+ }
158+ case "PartyWarpResponseEvent" -> {
159+ var fullParty = net .swofty .commons .party .FullParty .create (UUID .randomUUID (), UUID .randomUUID ());
160+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .FullParty .class , UUID .class );
161+ return (PartyEvent ) constructor .newInstance (fullParty , UUID .randomUUID ());
162+ }
163+ case "PartyInviteEvent" -> {
164+ var pendingParty = net .swofty .commons .party .PendingParty .create (UUID .randomUUID (), UUID .randomUUID ());
165+ var constructor = clazz .getDeclaredConstructor (net .swofty .commons .party .PendingParty .class );
166+ return (PartyEvent ) constructor .newInstance (pendingParty );
167+ }
168+ default -> throw new IllegalArgumentException ("Unknown party event class: " + className );
169+ }
170+ }
171+ }
0 commit comments