22
33import cpw .mods .fml .common .eventhandler .EventPriority ;
44import cpw .mods .fml .common .eventhandler .SubscribeEvent ;
5+ import net .minecraft .client .resources .I18n ;
6+ import net .minecraft .util .IProgressUpdate ;
7+ import net .minecraft .world .World ;
8+ import net .minecraft .world .WorldProvider ;
9+ import net .minecraftforge .client .IRenderHandler ;
510import stellarapi .api .ICelestialCoordinate ;
611import stellarapi .api .ISkyEffect ;
712import stellarapi .api .StellarAPIReference ;
813import stellarapi .api .celestials .IEffectorType ;
914import stellarapi .api .event .ConstructCelestialsEvent ;
1015import stellarapi .api .event .ResetCoordinateEvent ;
1116import stellarapi .api .event .ResetSkyEffectEvent ;
17+ import stellarapi .api .event .world .ClientWorldEvent ;
18+ import stellarapi .api .event .world .ServerWorldEvent ;
19+ import stellarapi .api .helper .WorldProviderReplaceHelper ;
20+ import stellarium .api .StellarSkyAPI ;
21+ import stellarium .render .SkyRenderCelestial ;
22+ import stellarium .stellars .DefaultCelestialHelper ;
23+ import stellarium .stellars .StellarManager ;
24+ import stellarium .stellars .layer .CelestialManager ;
1225import stellarium .world .StellarDimensionManager ;
1326
1427public class StellarAPIEventHook {
@@ -17,6 +30,7 @@ public class StellarAPIEventHook {
1730 public void onConstruct (ConstructCelestialsEvent event ) {
1831 StellarDimensionManager dimManager = StellarDimensionManager .get (event .getWorld ());
1932 if (dimManager != null ) {
33+ StellarSky .logger .info ("Startng Construction of Celestial Images..." );
2034 StellarAPIReference .resetCoordinate (event .getWorld ());
2135 StellarAPIReference .resetSkyEffect (event .getWorld ());
2236
@@ -26,22 +40,133 @@ public void onConstruct(ConstructCelestialsEvent event) {
2640 event .getCollections ().addAll (dimManager .constructCelestials (coordinate , sky ));
2741 event .getEffectors (IEffectorType .Light ).addAll (dimManager .getSuns ());
2842 event .getEffectors (IEffectorType .Tide ).addAll (dimManager .getMoons ());
29- } else event .setCanceled (true );
43+ StellarSky .logger .info ("Finished Construction of Celestial Images." );
44+ } else if (!StellarManager .hasSetup (event .getWorld ())) {
45+ StellarSky .logger .info ("Delayed Celestial Setup since StellarManager had not been initialized." );
46+ event .setCanceled (true );
47+ }
3048 }
3149
3250 @ SubscribeEvent (priority = EventPriority .HIGH )
3351 public void onReset (ResetCoordinateEvent event ) {
3452 StellarDimensionManager dimManager = StellarDimensionManager .get (event .getWorld ());
3553 if (dimManager != null )
3654 event .setCoordinate (dimManager .getCoordinate ());
37- else event .setCanceled (true );
55+ else if (!StellarManager .hasSetup (event .getWorld ())) {
56+ StellarSky .logger .info ("Delayed Dimension setup since StellarManager had not been initialized." );
57+ event .setCanceled (true );
58+ }
3859 }
3960
4061 @ SubscribeEvent (priority = EventPriority .HIGH )
4162 public void onReset (ResetSkyEffectEvent event ) {
4263 StellarDimensionManager dimManager = StellarDimensionManager .get (event .getWorld ());
4364 if (dimManager != null )
4465 event .setSkyEffect (dimManager .getSkySet ());
45- else event .setCanceled (true );
66+ else if (!StellarManager .hasSetup (event .getWorld ())) {
67+ StellarSky .logger .info ("Delayed Sky Setup since StellarManager had not been initialized." );
68+ event .setCanceled (true );
69+ }
70+ }
71+
72+
73+ @ SubscribeEvent
74+ public void onClientWorldLoad (ClientWorldEvent .Load event ) {
75+ IProgressUpdate update = event .getProgressUpdate ("StellarSky" );
76+ update .displayProgressMessage (I18n .format ("progress.text.injection.main" ));
77+ update .resetProgresAndWorkingMessage (I18n .format ("progress.text.injection.manager" ));
78+ StellarManager manager = StellarManager .loadOrCreateClientManager (event .getWorld ());
79+
80+ if (!manager .getSettings ().serverEnabled )
81+ manager .setup (StellarSky .proxy .getClientCelestialManager ().copy ());
82+
83+ String dimName = event .getWorld ().provider .getDimensionName ();
84+ if (!StellarSky .proxy .commonSettings .serverEnabled )
85+ handleDimOnServerDisabled (event .getWorld (), manager ,update );
86+
87+ if (mark ) {
88+ handleNotHaveModOnServer (event .getWorld (), manager , update );
89+ mark = false ;
90+ } else if (StellarSky .proxy .commonSettings .serverEnabled ) {
91+ update .resetProgresAndWorkingMessage (I18n .format ("progress.text.injection.query" , dimName ));
92+ update .setLoadingProgress (0 );
93+ StellarSky .instance .getNetworkManager ().queryInformation (event .getWorld ());
94+ }
95+ }
96+
97+ @ SubscribeEvent (receiveCanceled = true )
98+ public void onClientWorldLoaded (ClientWorldEvent .Loaded event ) {
99+ if (StellarManager .getClientManager ().hasSetup ())
100+ event .getProgressUpdate ("StellarSky" ).resetProgresAndWorkingMessage ("" );
101+ else {
102+ event .getProgressUpdate ("StellarSky" ).setLoadingProgress (99 );
103+ event .setCanceled (true );
104+ }
105+ }
106+
107+ @ SubscribeEvent
108+ public void onServerWorldInitiate (ServerWorldEvent .Initial event ) {
109+ StellarManager manager = StellarManager .loadOrCreateServerManager (event .getServer ());
110+ manager .setup (new CelestialManager (false ));
111+ }
112+
113+ @ SubscribeEvent
114+ public void onServerWorldLoad (ServerWorldEvent .Load event ) {
115+ StellarManager manager = StellarManager .getServerManager (event .getServer ());
116+ String dimName = event .getWorld ().provider .getDimensionName ();
117+ if (StellarSky .proxy .dimensionSettings .hasSubConfig (dimName )) {
118+ StellarDimensionManager dimManager = StellarDimensionManager .loadOrCreate (event .getWorld (), manager , dimName );
119+ setupDimension (event .getWorld (), manager , dimManager );
120+ }
121+ }
122+
123+
124+ public static void setupDimension (World world , StellarManager manager , StellarDimensionManager dimManager ) {
125+ dimManager .setup ();
126+
127+ StellarAPIReference .constructCelestials (world );
128+ StellarAPIReference .resetSkyEffect (world );
129+
130+ ICelestialCoordinate coordinate = StellarAPIReference .getCoordinate (world );
131+ ISkyEffect skyEffect = StellarAPIReference .getSkyEffect (world );
132+
133+ if (manager .getSettings ().serverEnabled && dimManager .getSettings ().doesPatchProvider ()) {
134+ DefaultCelestialHelper helper = new DefaultCelestialHelper ((float )dimManager .getSettings ().getSunlightMultiplier (), 1.0f ,
135+ dimManager .getSuns ().get (0 ), dimManager .getMoons ().get (0 ), coordinate , skyEffect );
136+ WorldProvider newProvider = StellarSkyAPI .getReplacedWorldProvider (world , world .provider , helper );
137+ WorldProviderReplaceHelper .patchWorldProviderWith (world , newProvider );
138+ }
139+
140+ if (world .isRemote )
141+ {
142+ IRenderHandler renderer = StellarSkyAPI .getRendererFor (dimManager .getSettings ().getSkyRendererType (), new SkyRenderCelestial (manager ));
143+ world .provider .setSkyRenderer (renderer );
144+ }
145+ }
146+
147+
148+ private static boolean mark = false ;
149+
150+ public static void markNotHave () {
151+ mark = true ;
152+ }
153+
154+ private static void handleNotHaveModOnServer (World world , StellarManager manager , IProgressUpdate update ) {
155+ manager .handleServerWithoutMod ();
156+
157+ if (manager .getCelestialManager () == null ) {
158+ manager .setup (StellarSky .proxy .getClientCelestialManager ().copy ());
159+ handleDimOnServerDisabled (world , manager , update );
160+ }
161+ }
162+
163+ private static void handleDimOnServerDisabled (World world , StellarManager manager , IProgressUpdate update ) {
164+ String dimName = world .provider .getDimensionName ();
165+ if (StellarSky .proxy .dimensionSettings .hasSubConfig (dimName )) {
166+ update .resetProgresAndWorkingMessage (I18n .format ("progress.text.injection.dimmanager" , dimName ));
167+ StellarDimensionManager dimManager = StellarDimensionManager .loadOrCreate (world , manager , dimName );
168+ setupDimension (world , manager , dimManager );
169+ update .resetProgresAndWorkingMessage ("" );
170+ }
46171 }
47172}
0 commit comments