@@ -100,4 +100,148 @@ public static function removeTrigger(Trigger $trigger): bool {
100100 public static function clearTriggers (): void {
101101 self ::$ triggers = [];
102102 }
103+
104+ /**
105+ * Gets all registered triggers.
106+ * @return Trigger[] Array of all registered triggers.
107+ */
108+ public static function getTriggers (): array {
109+ return self ::$ triggers ;
110+ }
111+
112+ /**
113+ * Gets all global triggers.
114+ * @return Trigger[] Array of global triggers.
115+ */
116+ public static function getGlobalTriggers (): array {
117+ $ globalTriggers = [];
118+ foreach (self ::$ triggers as $ trigger ) {
119+ if ($ trigger ->getTriggerType () === TriggerTypes::GLOBAL ) {
120+ $ globalTriggers [] = $ trigger ;
121+ }
122+ }
123+ return $ globalTriggers ;
124+ }
125+
126+ /**
127+ * Gets all per-player triggers.
128+ * @return Trigger[] Array of per-player triggers.
129+ */
130+ public static function getPerPlayerTriggers (): array {
131+ $ perPlayerTriggers = [];
132+ foreach (self ::$ triggers as $ trigger ) {
133+ if ($ trigger ->getTriggerType () === TriggerTypes::PER_PLAYER ) {
134+ $ perPlayerTriggers [] = $ trigger ;
135+ }
136+ }
137+ return $ perPlayerTriggers ;
138+ }
139+
140+ /**
141+ * Checks if a specific trigger is registered.
142+ * @param Trigger $trigger The trigger to check.
143+ * @return bool True if the trigger is registered, false otherwise.
144+ */
145+ public static function hasTrigger (Trigger $ trigger ): bool {
146+ return in_array ($ trigger , self ::$ triggers , true );
147+ }
148+
149+ /**
150+ * Gets the total number of registered triggers.
151+ * @return int The number of registered triggers.
152+ */
153+ public static function countTriggers (): int {
154+ return count (self ::$ triggers );
155+ }
156+
157+ /**
158+ * Gets the number of global triggers.
159+ * @return int The number of global triggers.
160+ */
161+ public static function countGlobalTriggers (): int {
162+ return count (self ::getGlobalTriggers ());
163+ }
164+
165+ /**
166+ * Gets the number of per-player triggers.
167+ * @return int The number of per-player triggers.
168+ */
169+ public static function countPerPlayerTriggers (): int {
170+ return count (self ::getPerPlayerTriggers ());
171+ }
172+
173+ /**
174+ * Finds a trigger by its name.
175+ * @param string $name The name of the trigger.
176+ * @return Trigger|null The trigger if found, null otherwise.
177+ */
178+ public static function getTriggerByName (string $ name ): ?Trigger {
179+ foreach (self ::$ triggers as $ trigger ) {
180+ if ($ trigger ->getName () === $ name ) {
181+ return $ trigger ;
182+ }
183+ }
184+ return null ;
185+ }
186+
187+ /**
188+ * Finds triggers by their type.
189+ * @param string $type The trigger type (use TriggerTypes constants).
190+ * @return Trigger[] Array of triggers of the specified type.
191+ */
192+ public static function getTriggersByType (string $ type ): array {
193+ $ filteredTriggers = [];
194+ foreach (self ::$ triggers as $ trigger ) {
195+ if ($ trigger ->getTriggerType () === $ type ) {
196+ $ filteredTriggers [] = $ trigger ;
197+ }
198+ }
199+ return $ filteredTriggers ;
200+ }
201+
202+ /**
203+ * Checks if a trigger with the given name exists.
204+ * @param string $name The name of the trigger.
205+ * @return bool True if a trigger with the name exists, false otherwise.
206+ */
207+ public static function hasTriggerByName (string $ name ): bool {
208+ return self ::getTriggerByName ($ name ) !== null ;
209+ }
210+
211+ /**
212+ * Removes a trigger by its name.
213+ * @param string $name The name of the trigger to remove.
214+ * @return bool True if the trigger was found and removed, false otherwise.
215+ */
216+ public static function removeTriggerByName (string $ name ): bool {
217+ $ trigger = self ::getTriggerByName ($ name );
218+ if ($ trigger !== null ) {
219+ return self ::removeTrigger ($ trigger );
220+ }
221+ return false ;
222+ }
223+
224+ /**
225+ * Gets trigger names as an array.
226+ * @return string[] Array of trigger names.
227+ */
228+ public static function getTriggerNames (): array {
229+ $ names = [];
230+ foreach (self ::$ triggers as $ trigger ) {
231+ $ names [] = $ trigger ->getName ();
232+ }
233+ return $ names ;
234+ }
235+
236+ /**
237+ * Gets trigger statistics.
238+ * @return array Statistics about triggers [total, global, perPlayer].
239+ */
240+ public static function getTriggerStats (): array {
241+ return [
242+ 'total ' => self ::countTriggers (),
243+ 'global ' => self ::countGlobalTriggers (),
244+ 'perPlayer ' => self ::countPerPlayerTriggers ()
245+ ];
246+ }
103247}
0 commit comments