/* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġkp ist on . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 ĠJer emy ĠW ood Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġkp ist on . util Ċ Ċ import Ġkp ist on . state . GameState Ċ import Ġorg . bukkit . configuration . file . File Configuration Ċ import Ġorg . bukkit . configuration . file . Un save able Yaml Configuration Ċ import Ġorg . bukkit . configuration . file . Yaml Configuration Ċ import Ġorg . bukkit . plugin . Plugin Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . InputStream Reader Ċ Ċ internal Ġclass ĠConfig Supplier ( private Ġval Ġconfig Name : ĠCharSequence , Ġplugin : ĠPlugin ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdata Folder : ĠFile Ġ= Ġplugin . data Folder ĊĠĠĠ Ġprivate Ġval Ġclass Loader : ĠClassLoader ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Loader Method Ġ= Ġplugin :: class . java . super class . getDeclared Field (" class Loader ") ĊĠĠĠĠĠĠĠ Ġclass Loader Method . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġclass Loader Ġ= Ġclass Loader Method . get ( plugin ) Ġas ĠClassLoader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconfig File Ġ= ĠFile ( data Folder , Ġconfig Name . toString ()) ĊĠĠĠ Ġprivate Ġvar Ġconfig : ĠYaml Configuration ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġconfiguration Ġfor Ġthis ĠGameState . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġconfiguration Ġobject Ġcannot Ġbe Ġsaved Ġto Ġa Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetConfig (): ĠFile Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( config Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreload Config (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconfig !! ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS aves Ġthe Ġraw Ġcontents Ġof Ġthis Ġgame Ġstate 's Ġdefault Ġconfig Ġfile Ġto Ġthe Ġlocation Ġretrie vable Ġby Ġ[ getConfig ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġshould Ġfail Ġsilently Ġif Ġthe Ġconfig Ġfile Ġalready Ġexists . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Default Config () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! configFile . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Resource ( config Name . toString (), Ġfalse ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreload Config () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig Ġ= ĠUn save able Yaml Configuration ( Yaml Configuration . load Configuration ( configFile )) ĊĊĠĠĠĠĠĠĠ Ġval Ġdef Config Stream Ġ= ĠgetResource ( config Name . toString ()) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġconfig ?. defaults Ġ= ĠYaml Configuration . load Configuration ( InputStream Reader ( def Config Stream , ĠChar sets . UTF _ 8 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġunsupported Ġfor Ġ[ GameState ] Ġsince Ġmultiple Ġinstances Ġof Ġthis ĠGameState Ġmay Ġexist Ġand Ġmay Ġbe ĊĠĠĠĠ Ġ* Ġmodifying Ġthe Ġconfiguration Ġseparately . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Config () Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" GameState Ġconfigs Ġmay Ġnot Ġbe Ġsaved !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Resource ( resource Path : ĠString , Ġreplace : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresource Path Ġ= Ġresource Path ĊĠĠĠĠĠĠĠ Ġif Ġ( resource Path Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Resource Path Ġcannot Ġbe Ġempty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresource Path Ġ= Ġresource Path . replace ('\\ ', Ġ'/') ĊĠĠĠĠĠĠĠ Ġval Ġ` in ` Ġ= ĠgetResource ( resource Path ) Ġ?: Ġthrow ĠIllegalArgumentException (" The Ġembedded Ġresource Ġ'$ resource Path ' Ġcannot Ġbe Ġfound Ġin Ġplugin Ġjar ") ĊĊĠĠĠĠĠĠĠ Ġval Ġout File Ġ= ĠFile ( data Folder , Ġresource Path ) ĊĠĠĠĠĠĠĠ Ġval Ġlast Index Ġ= Ġresource Path . lastIndexOf ('/') ĊĠĠĠĠĠĠĠ Ġval Ġout Dir Ġ= ĠFile ( data Folder , Ġresource Path . substring ( 0 , Ġif Ġ( last Index Ġ>= Ġ 0 ) Ġlast Index Ġelse Ġ 0 )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! out Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dir . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! out File . exists () Ġ|| Ġreplace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( out File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlen : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ= Ġ` in ` !!. read ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( len Ġ<= Ġ 0 ) Ġbreak ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( buf , Ġ 0 , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` in ` !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Could Ġnot Ġsave Ġ${ out File . name } Ġto Ġ$ out File Ġbecause Ġ${ out File . name } Ġalready Ġexists .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( ex ) Ġ{ Ġ" Could Ġnot Ġsave Ġ${ out File . name } Ġto Ġ$ out File " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetResource ( filename : ĠString ): ĠInputStream ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġclass Loader . getResource ( filename ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġurl . open Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . set Use Caches ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconnection . getInputStream () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ