1111
1212public class TimerCommand extends Command {
1313
14- private final SpeedrunTimerAddon addon ;
15-
1614 public TimerCommand (SpeedrunTimerAddon addon ) {
1715 super ("timer" );
18- this .addon = addon ;
1916
2017 withSubCommand (new StartSubcommand (addon ));
18+ withSubCommand (new CountdownSubcommand (addon ));
2119 withSubCommand (new PauseSubcommand (addon ));
2220 withSubCommand (new ResumeSubcommand (addon ));
2321 withSubCommand (new TimeSubcommand (addon ));
@@ -33,7 +31,7 @@ public boolean execute(String prefix, String[] arguments) {
3331 "speedruntimer.command.usage" ,
3432 NamedTextColor .RED ,
3533 Component .text (
36- prefix + " <start/pause/resume/time/reset>" ,
34+ "/" + prefix + " <start/countdown /pause/resume/time/reset>" ,
3735 NamedTextColor .AQUA
3836 )
3937 ))
@@ -53,29 +51,96 @@ protected StartSubcommand(SpeedrunTimerAddon addon) {
5351 @ Override
5452 public boolean execute (String prefix , String [] arguments ) {
5553 if (addon .getTimer ().getState () == TimerState .RUNNING ) {
56- displayMessage ("timer already running" );
54+ displayMessage (
55+ Component .empty ()
56+ .append (SpeedrunTimerAddon .prefix ())
57+ .append (Component .translatable (
58+ "speedruntimer.command.start.alreadyRunning" ,
59+ NamedTextColor .RED ,
60+ Component .text ("/timer reset" , NamedTextColor .AQUA )
61+ ))
62+ );
5763 return true ;
5864 }
5965 if (addon .getTimer ().getState () == TimerState .PAUSED ) {
6066 Laby .references ().chatExecutor ().chat ("/timer resume" , false );
6167 return true ;
6268 }
63- if (arguments .length > 0 && arguments [0 ].equalsIgnoreCase ("down" )) {
64- if (arguments .length < 2 ) {
65- displayMessage ("enter number" );
66- return true ;
67- }
68- long seconds = addon .getTimer ().resolveSeconds (arguments [1 ]);
69- if (seconds < 0 ) {
70- displayMessage ("invalid number" );
71- return true ;
72- }
73-
74- addon .getTimer ().startCountDown (seconds );
75- } else {
76- addon .getTimer ().startCountUp ();
69+ addon .getTimer ().startCountUp ();
70+
71+ displayMessage (
72+ Component .empty ()
73+ .append (SpeedrunTimerAddon .prefix ())
74+ .append (Component .translatable (
75+ "speedruntimer.command.start.success" ,
76+ NamedTextColor .GRAY
77+ ))
78+ );
79+ return true ;
80+ }
81+ }
82+
83+ private static class CountdownSubcommand extends SubCommand {
84+
85+ private final SpeedrunTimerAddon addon ;
86+
87+ protected CountdownSubcommand (SpeedrunTimerAddon addon ) {
88+ super ("countdown" , "down" );
89+ this .addon = addon ;
90+ }
91+
92+ @ Override
93+ public boolean execute (String prefix , String [] arguments ) {
94+ if (addon .getTimer ().getState () == TimerState .RUNNING ) {
95+ displayMessage (
96+ Component .empty ()
97+ .append (SpeedrunTimerAddon .prefix ())
98+ .append (Component .translatable (
99+ "speedruntimer.command.start.alreadyRunning" ,
100+ NamedTextColor .RED ,
101+ Component .text ("/timer reset" , NamedTextColor .AQUA )
102+ ))
103+ );
104+ return true ;
77105 }
78- displayMessage ("timer started" );
106+ if (addon .getTimer ().getState () == TimerState .PAUSED ) {
107+ Laby .references ().chatExecutor ().chat ("/timer resume" , false );
108+ return true ;
109+ }
110+
111+ if (arguments .length < 1 ) {
112+ displayMessage (
113+ Component .empty ()
114+ .append (SpeedrunTimerAddon .prefix ())
115+ .append (Component .translatable (
116+ "speedruntimer.command.enterTimeValue" ,
117+ NamedTextColor .GRAY
118+ ))
119+ );
120+ return true ;
121+ }
122+ long seconds = addon .getTimer ().resolveSeconds (arguments [0 ]);
123+ if (seconds < 0 ) {
124+ displayMessage (
125+ Component .empty ()
126+ .append (SpeedrunTimerAddon .prefix ())
127+ .append (Component .translatable (
128+ "speedruntimer.command.enterTimeValue" ,
129+ NamedTextColor .RED
130+ ))
131+ );
132+ return true ;
133+ }
134+
135+ addon .getTimer ().startCountDown (seconds );
136+ displayMessage (
137+ Component .empty ()
138+ .append (SpeedrunTimerAddon .prefix ())
139+ .append (Component .translatable (
140+ "speedruntimer.command.start.success" ,
141+ NamedTextColor .GRAY
142+ ))
143+ );
79144 return true ;
80145 }
81146 }
@@ -92,15 +157,38 @@ protected PauseSubcommand(SpeedrunTimerAddon addon) {
92157 @ Override
93158 public boolean execute (String prefix , String [] arguments ) {
94159 if (addon .getTimer ().getState () == TimerState .OFF ) {
95- displayMessage ("no timer running" );
160+ displayMessage (
161+ Component .empty ()
162+ .append (SpeedrunTimerAddon .prefix ())
163+ .append (Component .translatable (
164+ "speedruntimer.command.noTimerRunning" ,
165+ NamedTextColor .RED ,
166+ Component .text ("/timer start" , NamedTextColor .AQUA )
167+ ))
168+ );
96169 return true ;
97170 }
98171 if (addon .getTimer ().getState () == TimerState .PAUSED ) {
99- displayMessage ("timer already paused" );
172+ displayMessage (
173+ Component .empty ()
174+ .append (SpeedrunTimerAddon .prefix ())
175+ .append (Component .translatable (
176+ "speedruntimer.command.pause.alreadyPaused" ,
177+ NamedTextColor .RED ,
178+ Component .text ("/timer resume" , NamedTextColor .AQUA )
179+ ))
180+ );
100181 return true ;
101182 }
102183 addon .getTimer ().setState (TimerState .PAUSED );
103- displayMessage ("timer successfully paused" );
184+ displayMessage (
185+ Component .empty ()
186+ .append (SpeedrunTimerAddon .prefix ())
187+ .append (Component .translatable (
188+ "speedruntimer.command.pause.success" ,
189+ NamedTextColor .GRAY
190+ ))
191+ );
104192 return true ;
105193 }
106194 }
@@ -116,16 +204,51 @@ protected ResumeSubcommand(SpeedrunTimerAddon addon) {
116204
117205 @ Override
118206 public boolean execute (String prefix , String [] arguments ) {
207+ if (addon .getTimer ().getState () == TimerState .OFF ) {
208+ displayMessage (
209+ Component .empty ()
210+ .append (SpeedrunTimerAddon .prefix ())
211+ .append (Component .translatable (
212+ "speedruntimer.command.noTimerRunning" ,
213+ NamedTextColor .RED ,
214+ Component .text ("/timer start" , NamedTextColor .AQUA )
215+ ))
216+ );
217+ return true ;
218+ }
119219 if (addon .getTimer ().getState () != TimerState .PAUSED ) {
120- displayMessage ("timer not paused" );
220+ displayMessage (
221+ Component .empty ()
222+ .append (SpeedrunTimerAddon .prefix ())
223+ .append (Component .translatable (
224+ "speedruntimer.command.resume.notPaused" ,
225+ NamedTextColor .RED ,
226+ Component .text ("/timer pause" , NamedTextColor .AQUA )
227+ ))
228+ );
121229 return true ;
122230 }
123231 if (addon .getTimer ().getDirection () == TimerDirection .COUNT_DOWN && addon .getTimer ().getSeconds () == 0 ) {
124- displayMessage ("can't resume ended countdown" );
232+ displayMessage (
233+ Component .empty ()
234+ .append (SpeedrunTimerAddon .prefix ())
235+ .append (Component .translatable (
236+ "speedruntimer.command.resume.endedCountdown" ,
237+ NamedTextColor .RED ,
238+ Component .text ("/timer reset" , NamedTextColor .AQUA )
239+ ))
240+ );
125241 return true ;
126242 }
127243 addon .getTimer ().setState (TimerState .RUNNING );
128- displayMessage ("timer resumed" );
244+ displayMessage (
245+ Component .empty ()
246+ .append (SpeedrunTimerAddon .prefix ())
247+ .append (Component .translatable (
248+ "speedruntimer.command.resume.success" ,
249+ NamedTextColor .GRAY
250+ ))
251+ );
129252 return true ;
130253 }
131254 }
@@ -142,17 +265,51 @@ protected TimeSubcommand(SpeedrunTimerAddon addon) {
142265 @ Override
143266 public boolean execute (String prefix , String [] arguments ) {
144267 if (addon .getTimer ().getState () == TimerState .OFF ) {
145- displayMessage ("no timer running" );
268+ displayMessage (
269+ Component .empty ()
270+ .append (SpeedrunTimerAddon .prefix ())
271+ .append (Component .translatable (
272+ "speedruntimer.command.noTimerRunning" ,
273+ NamedTextColor .RED ,
274+ Component .text ("/timer start" , NamedTextColor .AQUA )
275+ ))
276+ );
277+ return true ;
278+ }
279+ if (arguments .length < 1 ) {
280+ displayMessage (
281+ Component .empty ()
282+ .append (SpeedrunTimerAddon .prefix ())
283+ .append (Component .translatable (
284+ "speedruntimer.command.enterTimeValue" ,
285+ NamedTextColor .GRAY
286+ ))
287+ );
146288 return true ;
147289 }
148290 long seconds = addon .getTimer ().resolveSeconds (arguments [0 ]);
149291 if (seconds < 0 ) {
150- displayMessage ("invalid number" );
292+ displayMessage (
293+ Component .empty ()
294+ .append (SpeedrunTimerAddon .prefix ())
295+ .append (Component .translatable (
296+ "speedruntimer.command.enterTimeValue" ,
297+ NamedTextColor .RED
298+ ))
299+ );
151300 return true ;
152301 }
153302
154303 addon .getTimer ().setSeconds (seconds );
155- displayMessage ("set time to " + seconds + " seconds" );
304+ displayMessage (
305+ Component .empty ()
306+ .append (SpeedrunTimerAddon .prefix ())
307+ .append (Component .translatable (
308+ "speedruntimer.command.time.success" ,
309+ NamedTextColor .GRAY ,
310+ Component .text (arguments [0 ], NamedTextColor .AQUA )
311+ ))
312+ );
156313 return true ;
157314 }
158315 }
@@ -169,11 +326,26 @@ protected ResetSubcommand(SpeedrunTimerAddon addon) {
169326 @ Override
170327 public boolean execute (String prefix , String [] arguments ) {
171328 if (addon .getTimer ().getState () == TimerState .OFF ) {
172- displayMessage ("no timer running" );
329+ displayMessage (
330+ Component .empty ()
331+ .append (SpeedrunTimerAddon .prefix ())
332+ .append (Component .translatable (
333+ "speedruntimer.command.noTimerRunning" ,
334+ NamedTextColor .RED ,
335+ Component .text ("/timer start" , NamedTextColor .AQUA )
336+ ))
337+ );
173338 return true ;
174339 }
175340 addon .getTimer ().reset ();
176- displayMessage ("successfully reset" );
341+ displayMessage (
342+ Component .empty ()
343+ .append (SpeedrunTimerAddon .prefix ())
344+ .append (Component .translatable (
345+ "speedruntimer.command.reset.success" ,
346+ NamedTextColor .GRAY
347+ ))
348+ );
177349 return true ;
178350 }
179351 }
0 commit comments