@@ -26,31 +26,65 @@ public enum EventType {
26
26
/**
27
27
* Mob has been attacked by a player
28
28
*/
29
- attacked ,
29
+ ATTACKED ( " attacked" , true ) ,
30
30
/**
31
31
* Mob is idle (Is just standing/walking/running around) -> Unused
32
32
*/
33
- idle ,
33
+ IDLE ( " idle" , true ) ,
34
34
/**
35
35
* Player interacted with the mob (Right clicked on mob)
36
36
*/
37
- interacted ,
37
+ INTERACTED ("interacted" , true ),
38
+ /**
39
+ * Mob has been killed
40
+ */
41
+ KILLED ("killed" , false ),
38
42
/**
39
43
* Mob has been killed by a player
40
44
*/
41
- killed ,
45
+ KILLED_PLAYER ("killed_player" , true ),
46
+ /**
47
+ * Mob has been killed by something else (not a player)
48
+ */
49
+ KILLED_OTHER ("killed_other" , true ),
42
50
/**
43
51
* Mob is looking at the player (and player is looking at the mob)
44
52
*/
45
- looking ,
53
+ LOOKING ( " looking" , true ) ,
46
54
/**
47
55
* Mob has been spawned (Mob spawner, egg or another plugin by default, but can be configured in config.yml)
48
56
*/
49
- spawned ,
57
+ SPAWNED ( " spawned" , true ) ,
50
58
/**
51
59
* Mob has been tamed
52
60
*/
53
- tamed
61
+ TAMED ("tamed" , true );
62
+
63
+ private String type ;
64
+ private boolean toggleable ;
65
+
66
+ EventType (String type , boolean toggleable ) {
67
+ this .type = type ;
68
+ this .toggleable = toggleable ;
69
+ }
70
+
71
+ public String getType () {
72
+ return type ;
73
+ }
74
+
75
+ public boolean isToggleable () {
76
+ return toggleable ;
77
+ }
78
+
79
+ public static EventType fromString (String type ) {
80
+ for (EventType eventType : values ()) {
81
+ if (eventType .getType ().equalsIgnoreCase (type )) {
82
+ return eventType ;
83
+ }
84
+ }
85
+
86
+ return null ;
87
+ }
54
88
}
55
89
56
90
/**
@@ -73,6 +107,29 @@ public void reloadConfig() {
73
107
playersConfig .reload ();
74
108
}
75
109
110
+ /**
111
+ * Get a list of messages configured for the specified mob and event type
112
+ *
113
+ * @param mob The entity of the mob for which the messages should be fetched
114
+ * @param eventType The event type of the messages
115
+ * @return A list of messages or null if there a none
116
+ */
117
+ private List <String > getMessages (Entity mob , EventType eventType ) {
118
+ List <String > messages ;
119
+ String mobTypeName = mob .getType ().name ().toLowerCase ();
120
+
121
+ messages = messagesConfig .getConfig ().getStringList (mobTypeName + "." + eventType .getType ());
122
+ if (messages .size () == 0 ) {
123
+ messages = messagesConfig .getConfig ().getStringList ("default." + eventType .getType ());
124
+
125
+ if (messages .size () == 0 ) {
126
+ return null ;
127
+ }
128
+ }
129
+
130
+ return messages ;
131
+ }
132
+
76
133
/**
77
134
* Get a random message for the specified mob and event type
78
135
*
@@ -81,38 +138,33 @@ public void reloadConfig() {
81
138
* @return A string containing the message
82
139
*/
83
140
private String getMessage (Entity mob , EventType eventType ) {
84
- List <String > messages ;
85
141
String mobTypeName = mob .getType ().name ().toLowerCase ();
86
142
87
- messages = messagesConfig .getConfig ().getStringList (mobTypeName + "." + eventType .name ());
88
- if (messages .size () == 0 ) {
89
- messages = messagesConfig .getConfig ().getStringList ("default." + eventType .name ());
143
+ List <String > messages = getMessages (mob , eventType );
144
+
145
+ if (messages == null ) {
146
+ plugin .getLogger ().log (Level .INFO , "No messages for event ''{0}'' of mob ''{1}'' defined!" , new Object []{eventType .getType (), mobTypeName });
147
+ return null ;
90
148
}
91
149
92
- if (messages .size () > 0 ) {
93
- Random randomGenerator = new Random ();
150
+ Random randomGenerator = new Random ();
94
151
95
- String message = plugin .getConfig ().getString ("messageFormat." + eventType .name ());
152
+ String message = plugin .getConfig ().getString ("messageFormat." + eventType .getType ());
96
153
97
- if (message == null ) {
98
- message = plugin .getConfig ().getString ("messageFormat.default" );
154
+ if (message == null ) {
155
+ message = plugin .getConfig ().getString ("messageFormat.default" );
99
156
100
- if (message == null ) {
101
- message = "[&a%mobname%&r] %message%" ;
102
- plugin .getLogger ().log (Level .INFO , "Message format for event type ''{0}'' not defined!" , eventType .name ());
103
- }
157
+ if (message == null ) {
158
+ message = "[&a%mobname%&r] %message%" ;
159
+ plugin .getLogger ().log (Level .INFO , "Message format for event type ''{0}'' not defined!" , eventType .getType ());
104
160
}
105
-
106
- message = message .replaceAll ("%message%" , messages .get (randomGenerator .nextInt (messages .size ())));
107
- message = message .replaceAll ("%mobname%" , mobTypeName );
108
- message = message .replaceAll ("%event%" , eventType .name ());
109
-
110
- return message ;
111
- } else {
112
- plugin .getLogger ().log (Level .INFO , "No messages for event ''{0}'' of mob ''{1}'' defined!" , new Object []{eventType .name (), mobTypeName });
113
161
}
114
162
115
- return null ;
163
+ message = message .replaceAll ("%message%" , messages .get (randomGenerator .nextInt (messages .size ())));
164
+ message = message .replaceAll ("%mobname%" , mobTypeName );
165
+ message = message .replaceAll ("%event%" , eventType .getType ());
166
+
167
+ return message ;
116
168
}
117
169
118
170
/**
@@ -138,7 +190,7 @@ public boolean isEnabled(Player player, EventType eventType) {
138
190
return false ;
139
191
}
140
192
141
- return playersConfig .getConfig ().getBoolean (player .getName () + ".enabled." + eventType .name (), true );
193
+ return playersConfig .getConfig ().getBoolean (player .getName () + ".enabled." + eventType .getType (), true );
142
194
}
143
195
144
196
/**
@@ -152,7 +204,7 @@ public boolean isEnabled(Player player) {
152
204
}
153
205
154
206
private boolean isSpamming (Entity mob , Player player , EventType eventType ) {
155
- String key = String .valueOf (mob .getEntityId ()) + "/" + String .valueOf (player .getEntityId ()) + "/" + eventType .name ();
207
+ String key = String .valueOf (mob .getEntityId ()) + "/" + String .valueOf (player .getEntityId ()) + "/" + eventType .getType ();
156
208
Long now = System .currentTimeMillis ();
157
209
Long spamTimeout = plugin .getConfig ().getLong ("spam-timeout" );
158
210
@@ -197,6 +249,27 @@ public void sendMessage(Entity mob, Player player, EventType eventType) {
197
249
sendMessage (mob , player , eventType , message );
198
250
}
199
251
252
+ /**
253
+ * Send a mob message to the player
254
+ *
255
+ * @param mob The mob which sends the message
256
+ * @param player The player which should receive the message
257
+ * @param originalEventType The original event type which triggered this message
258
+ * @param possibleEventTypes The event types of which to pick the first possible one for getting the message
259
+ */
260
+ public void sendMessage (Entity mob , Player player , EventType originalEventType , List <EventType > possibleEventTypes ) {
261
+ for (EventType eventType : possibleEventTypes ) {
262
+ if (getMessages (mob , eventType ) == null ) {
263
+ continue ;
264
+ }
265
+
266
+ String message = getMessage (mob , eventType );
267
+
268
+ sendMessage (mob , player , originalEventType , message );
269
+ return ;
270
+ }
271
+ }
272
+
200
273
/**
201
274
* Send a mob message to all players
202
275
*
@@ -222,6 +295,37 @@ public void sendMessage(Entity mob, EventType eventType) {
222
295
}
223
296
}
224
297
298
+ /**
299
+ * Send a mob message to all players
300
+ *
301
+ * @param mob The mob which sends the message
302
+ * @param originalEventType The original event type which triggered this message
303
+ * @param possibleEventTypes The event types of which to pick the first possible one for getting the message
304
+ */
305
+ public void sendMessage (Entity mob , EventType originalEventType , List <EventType > possibleEventTypes ) {
306
+ if (mob instanceof Player ) {
307
+ return ;
308
+ }
309
+
310
+ if (!(mob instanceof LivingEntity )) {
311
+ return ;
312
+ }
313
+
314
+ for (EventType eventType : possibleEventTypes ) {
315
+ if (getMessages (mob , eventType ) == null ) {
316
+ continue ;
317
+ }
318
+
319
+ String message = getMessage (mob , eventType );
320
+
321
+ for (Player player : plugin .getServer ().getOnlinePlayers ()) {
322
+ sendMessage (mob , player , originalEventType , message );
323
+ }
324
+
325
+ return ;
326
+ }
327
+ }
328
+
225
329
/**
226
330
* Send the given mob message to the player
227
331
*
@@ -271,7 +375,7 @@ private void sendMessage(Entity mob, Player player, EventType eventType, String
271
375
* @param state The new state
272
376
*/
273
377
public void setEnabled (Player player , EventType eventType , Boolean state ) {
274
- playersConfig .getConfig ().set (player .getName () + ".enabled." + eventType .name (), state );
378
+ playersConfig .getConfig ().set (player .getName () + ".enabled." + eventType .getType (), state );
275
379
playersConfig .getConfig ().set (player .getName () + ".enabled.all" , true );
276
380
277
381
playersConfig .save ();
@@ -287,7 +391,11 @@ public void setEnabled(Player player, Boolean state) {
287
391
playersConfig .getConfig ().set (player .getName () + ".enabled.all" , state );
288
392
289
393
for (EventType eventType : EventType .values ()) {
290
- playersConfig .getConfig ().set (player .getName () + ".enabled." + eventType .name (), state );
394
+ if (!eventType .isToggleable ()) {
395
+ continue ;
396
+ }
397
+
398
+ playersConfig .getConfig ().set (player .getName () + ".enabled." + eventType .getType (), state );
291
399
}
292
400
293
401
playersConfig .save ();
0 commit comments