package Ġnet . star legacy . command . misc Ċ Ċ import Ġnet . star legacy . command . SL Command Ċ import Ġco . a ik ar . commands . annotation . Command Alias Ċ import Ġco . a ik ar . commands . annotation . Description Ċ import Ġco . a ik ar . commands . annotation . Sub command Ċ import Ġnet . star legacy . util . msg Ċ import Ġorg . bukkit . command . Command Sender Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ @ Command Alias (" sl time convert ") Ċ object ĠSL Time Convert Command Ġ: ĠSL Command () Ġ{ Ċ ĉ private Ġval ĠDAY S _ IN _ MONTH S : ĠArray < Int > Ġ= ĠarrayOf ( 3 1 , Ġ 2 8 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 ) ĊĊ ĉ private Ġfun Ġget Days In Month ( month : ĠInt , Ġyear : ĠInt ): ĠInt Ġ{ Ċĉ ĉ // Ġfe bruary Ġchanges Ġon Ġle ap Ġyears Ċĉ ĉ if Ġ( month Ġ== Ġ 2 ) Ġ{ Ċĉĉ ĉ return Ġif Ġ((( year Ġ% Ġ 4 Ġ== Ġ 0 ) Ġ&& Ġ( year Ġ% Ġ 1 0 0 Ġ!= Ġ 0 )) Ġ|| Ġ( year Ġ% Ġ 4 0 0 Ġ== Ġ 0 )) Ġ 2 9 Ġelse Ġ 2 8 Ċĉ ĉ } Ċĉ ĉ return ĠDAY S _ IN _ MONTH S [ month Ġ- Ġ 1 ] Ċ ĉ } ĊĊ ĉ private Ġfun Ġvalidate Number ( input : ĠString , Ġmin : ĠInt , Ġmax : ĠInt , Ġinput Name : ĠString ): ĠInt Ġ{ Ċĉ ĉ val Ġparsed Ġ= Ġinput . toInt OrNull () Ġ?: Ġfail Ġ{ Ġ"$ input Name Ġ$ input Ġis Ġnot Ġa Ġvalid Ġnumber " Ġ} Ċĉ ĉ fail If ( parsed Ġ< Ġmin ) Ġ{ Ġ"$ input Name Ġmust Ġbe Ġat Ġleast Ġ$ min " Ġ} Ċĉ ĉ fail If ( parsed Ġ> Ġmax ) Ġ{ Ġ"$ input Name Ġmust Ġbe Ġat Ġmost Ġ$ max " Ġ} Ċĉ ĉ return Ġparsed Ċ ĉ } ĊĊ ĉ fun Ġvalidate Date ( date : ĠString ): ĠZ onedDateTime Ġ{ Ċĉ ĉ // Ġallow Ġeither Ġ/ Ġor Ġ- Ċĉ ĉ val Ġsplit Ġ= Ġdate . replace ("/", Ġ"- "). split ("- ") Ċĉ ĉ fail If ( split . size Ġ!= Ġ 3 ) Ġ{ Ġ" Date Ġmust Ġbe Ġin Ġthe Ġformat Ġof Ġmonth / day / year , Ġe . g . Ġ 1 2 / 2 0 / 2 0 1 8 Ġ( das hes Ġalso Ġallowed )" Ġ} Ċĉ ĉ val Ġyear Ġ= Ġvalidate Number ( split [ 2 ], ĠInt . MIN _ VALUE , ĠInt . MAX _ VALUE , Ġ" Year ") Ċĉ ĉ val Ġmonth Ġ= Ġvalidate Number ( split [ 0 ], Ġ 1 , Ġ 1 2 , Ġ" Month ") Ċĉ ĉ val Ġdays In Month Ġ= Ġget Days In Month ( month , Ġyear ) Ċĉ ĉ val Ġday Ġ= Ġvalidate Number ( split [ 1 ], Ġ 1 , Ġdays In Month , Ġ" Day ") Ċĉ ĉ return ĠZ onedDateTime . of ( year , Ġmonth , Ġday , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġzone ) Ċ ĉ } ĊĊ ĉ private Ġval Ġzone Ġ= ĠZone Id . of (" America / New _ Y ork ") ĊĊ ĉ private Ġval ĠREAL _ EPOCH : ĠZ onedDateTime Ġ= ĠZ onedDateTime . of ( 2 0 1 3 , Ġ 1 , Ġ 1 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġzone ) Ċ ĉ private Ġval ĠSL _ EPOCH : ĠZ onedDateTime Ġ= ĠZ onedDateTime . of ( 2 3 0 0 , Ġ 1 , Ġ 1 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġzone ) ĊĊ ĉ /** Ċĉ Ġ* Ġ@ param Ġreal Seconds ĠEpoch Ġsecond Ġof Ġreal Ġtime Ċĉ Ġ* Ġ@ return ĠEpoch Ġsecond Ġof ĠSL Ġtime Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġreal To SL ( real Seconds : ĠLong ): ĠLong Ġ{ Ċĉ ĉ return Ġ( real Seconds Ġ- ĠREAL _ EPOCH . to Epoch Second ()) Ġ* Ġ 1 0 0 Ġ+ ĠSL _ EPOCH . to Epoch Second () Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ param Ġsl Seconds ĠEpoch Ġsecond Ġof ĠSL Ġtime Ċĉ Ġ* Ġ@ return ĠEpoch Ġsecond Ġof Ġreal Ġtime Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġsl To Real ( sl Seconds : ĠLong ): ĠLong Ġ{ Ċĉ ĉ return Ġ( sl Seconds Ġ- ĠSL _ EPOCH . to Epoch Second ()) Ġ/ Ġ 1 0 0 Ġ+ ĠREAL _ EPOCH . to Epoch Second () Ċ ĉ } ĊĊ ĉ private Ġfun Ġto Seconds ( zon ed DateTime : ĠZ onedDateTime ): ĠLong Ġ= Ġz onedDateTime . to Epoch Second () ĊĊ ĉ private Ġfun Ġto DateTime ( seconds : ĠLong ) Ġ= ĠZ onedDateTime . of Instant ( Instant . of Epoch Second ( seconds ), Ġzone ) ĊĊ ĉ private Ġfun Ġformat ( date : ĠZ onedDateTime , Ġinclude Time : ĠBoolean ): ĠString Ġ{ Ċĉ ĉ return Ġdate . format ( DateTime Formatter . of Pattern ( if Ġ(! include Time ) Ġ" MM / dd / yyyy " Ġelse Ġ" MM / dd / yyyy Ġkk : mm ")) Ċĉĉ ĉ . replace (" 2 4 :", Ġ" 0 0 :") Ġ// Ġshouldn 't Ġit Ġbe Ġ 0 0 : 0 0 Ġat Ġmid night ? Ġ: P Ċ ĉ } ĊĊ ĉ @ Sub command (" sl ") Ċ ĉ @ Description (" Get Ġapproximate ĠSL Ġdate Ġfrom ĠI RL Ġdate Ġ( EST Ġtimezone )") Ċ ĉ fun Ġsl ( sender : ĠCommand Sender , Ġir l Date : ĠString ) Ġ{ Ċĉ ĉ val Ġreal Date : ĠZ onedDateTime Ġ= Ġvalidate Date ( irl Date ) ĊĊĉ ĉ val Ġreal Time Min : ĠZ onedDateTime Ġ= Ġreal Date Ċĉ ĉ val Ġreal Time Max : ĠZ onedDateTime Ġ= Ġreal Date . with Hour ( 2 3 ). with Minute ( 5 9 ) ĊĊĉ ĉ val Ġsl Time Min : ĠZ onedDateTime Ġ= Ġto DateTime ( real To SL ( to Seconds ( real Time Min ))) Ċĉ ĉ val Ġsl Time Max : ĠZ onedDateTime Ġ= Ġto DateTime ( real To SL ( to Seconds ( real Time Max ))) ĊĊĉ ĉ sender Ġmsg Ġ"& 6 ${ format ( real Time Min , Ġfalse )} & 7 Ġin Ġreal Ġtime Ġis Ġbetween Ġ" Ġ+ Ċĉĉĉ ĉ "& b ${ format ( sl Time Min , Ġfalse )} & 7 Ġand Ġ& b ${ format ( sl Time Max , Ġfalse )} & 7 " Ġ+ Ċĉĉĉ ĉ " Ġin ĠSL Ġtime " Ċ ĉ } ĊĊ ĉ @ Sub command (" sl ") Ċ ĉ @ Description (" Get Ġexact ĠSL Ġdate Ġfrom ĠI RL Ġdate Ġand Ġtime Ġ( EST Ġtimezone , Ġm ilitary Ġtime )") Ċ ĉ fun Ġsl ( sender : ĠCommand Sender , Ġir l Date : ĠString , Ġir l Time : ĠString ) Ġ{ Ċĉ ĉ val Ġreal Date : ĠZ onedDateTime Ġ= Ġvalidate Date ( irl Date ) Ċĉ ĉ val Ġtime Split Ġ= Ġir l Time . split (": ") ĊĊĉ ĉ fail If ( time Split . size Ġ!= Ġ 2 Ġ|| Ġtime Split [ 0 ]. length Ġ!= Ġ 2 Ġ|| Ġtime Split [ 1 ]. length Ġ!= Ġ 2 ) Ġ{ Ġ" Time Ġmust Ġbe Ġin Ġthe Ġformat Ġ 2 2 : 0 0 " Ġ} ĊĊĉ ĉ val Ġhour Ġ= Ġvalidate Number ( time Split [ 0 ], Ġ 0 , Ġ 2 3 , Ġ" Hour ") Ċĉ ĉ val Ġminute Ġ= Ġvalidate Number ( time Split [ 1 ], Ġ 0 , Ġ 5 9 , Ġ" Minute ") ĊĊĉ ĉ val Ġreal Time : ĠZ onedDateTime Ġ= Ġreal Date . with Hour ( hour ). with Minute ( minute ) ĊĊĉ ĉ val Ġsl Time : ĠZ onedDateTime Ġ= Ġto DateTime ( real To SL ( to Seconds ( real Time ))) ĊĊĉ ĉ sender Ġmsg Ġ"& 6 ${ format ( real Time , Ġtrue )} & 7 Ġin Ġreal Ġtime Ġis Ġ" Ġ+ Ċĉĉĉ ĉ "& b ${ format ( sl Time , Ġfalse )} & 7 Ġin ĠSL Ġtime " Ċ ĉ } ĊĊ ĉ @ Sub command (" irl ") Ċ ĉ @ Description (" Get Ġexact ĠI RL Ġdate Ġand Ġapproximate ĠI RL Ġtime Ġ( EST Ġtimezone ) Ġfrom ĠSL Ġdate ") Ċ ĉ fun Ġir l ( sender : ĠCommand Sender , Ġsl Date : ĠString ) Ġ{ Ċĉ ĉ val Ġdate : ĠZ onedDateTime Ġ= Ġvalidate Date ( sl Date ) Ċĉ ĉ val Ġreal Time : ĠZ onedDateTime Ġ= Ġto DateTime ( sl To Real ( to Seconds ( date ))) Ċĉ ĉ sender Ġmsg Ġ"& b ${ format ( date , Ġfalse )} & 7 Ġin ĠSL Ġtime Ġis Ġapproximately Ġ" Ġ+ Ċĉĉĉ ĉ "& 6 ${ format ( real Time , Ġtrue )} & 7 Ġin Ġreal Ġtime " Ċ ĉ } Ċ } Ċ