2626import btw .lowercase .skyboxify .config .SkyboxifyConfig ;
2727import btw .lowercase .skyboxify .events .LevelTickEvent ;
2828import btw .lowercase .skyboxify .events .SkyRenderEvent ;
29- import btw .lowercase .skyboxify .skybox .*;
30- import btw .lowercase .skyboxify .utils .ParserCodecs ;
31- import com .google .gson .JsonArray ;
32- import com .google .gson .JsonObject ;
29+ import btw .lowercase .skyboxify .skybox .Skybox ;
30+ import btw .lowercase .skyboxify .skybox .SkyboxManager ;
31+ import btw .lowercase .skyboxify .skybox .SkyboxSkyRenderer ;
3332import com .mojang .blaze3d .systems .RenderSystem ;
3433import com .mojang .math .Axis ;
35- import com .mojang .serialization .JsonOps ;
3634import lombok .Getter ;
3735import lombok .experimental .UtilityClass ;
3836import net .minecraft .client .multiplayer .ClientLevel ;
4341import org .slf4j .LoggerFactory ;
4442import org .visuals .legacy .lightconfig .lib .v1 .events .EventManager ;
4543
46- import java .io .IOException ;
47- import java .io .InputStream ;
4844import java .nio .file .Path ;
49- import java .util .Comparator ;
50- import java .util .HashMap ;
51- import java .util .Map ;
52- import java .util .Properties ;
53- import java .util .regex .Matcher ;
54- import java .util .regex .Pattern ;
5545
5646@ UtilityClass
5747public class Skyboxify {
@@ -60,11 +50,6 @@ public class Skyboxify {
6050 private final Logger logger = LoggerFactory .getLogger (Skyboxify .class );
6151 @ Getter
6252 private final EventManager eventManager = new EventManager ();
63- private final String OPTIFINE_SKY_PARENT = "optifine/sky" ;
64- private final String SKY_PATTERN_ENDING = "(?<world>[\\ w-]+)/(?<name>\\ w+).properties$" ;
65- private final Pattern OPTIFINE_SKY_PATTERN = Pattern .compile (OPTIFINE_SKY_PARENT + "/" + SKY_PATTERN_ENDING );
66- private final String MCPATCHER_SKY_PARENT = "mcpatcher/sky" ;
67- private final Pattern MCPATCHER_SKY_PATTERN = Pattern .compile (MCPATCHER_SKY_PARENT + "/" + SKY_PATTERN_ENDING );
6853 @ Getter
6954 private SkyboxifyConfig config ;
7055
@@ -117,90 +102,4 @@ private void renderSkyboxes(ClientLevel clientLevel, float tickDelta) {
117102 }
118103 }
119104 }
120-
121- public void convert (SkyboxResourceHelper skyboxResourceHelper ) {
122- if (config .processOptiFine .isEnabled ()) {
123- parseSkyboxes (skyboxResourceHelper , OPTIFINE_SKY_PARENT , OPTIFINE_SKY_PATTERN );
124- }
125-
126- if (config .processMCPatcher .isEnabled ()) {
127- parseSkyboxes (skyboxResourceHelper , MCPATCHER_SKY_PARENT , MCPATCHER_SKY_PATTERN );
128- }
129- }
130-
131- private void parseSkyboxes (SkyboxResourceHelper skyboxResourceHelper , String skyParent , Pattern skyPattern ) {
132- final Map <String , JsonArray > layers = new HashMap <>();
133- layers .put ("world0" , new JsonArray ()); // Overworld
134- layers .put ("world-1" , new JsonArray ()); // Nether
135- layers .put ("world1" , new JsonArray ()); // The End
136- skyboxResourceHelper .searchIn (skyParent ).filter (id -> id .getPath ().endsWith (".properties" )).sorted (Comparator .comparing (ResourceLocation ::getPath , (id1 , id2 ) -> {
137- final Matcher matcherId1 = skyPattern .matcher (id1 );
138- final Matcher matcherId2 = skyPattern .matcher (id2 );
139- if (matcherId1 .find () && matcherId2 .find ()) {
140- final int a = ParserCodecs .safeParseInteger (matcherId1 .group ("name" ).replace ("sky" , "" ), -1 );
141- final int b = ParserCodecs .safeParseInteger (matcherId2 .group ("name" ).replace ("sky" , "" ), -1 );
142- if (a >= 0 && b >= 0 ) {
143- return a - b ;
144- }
145- }
146-
147- return 0 ;
148- })).forEach (id -> {
149- final Matcher matcher = skyPattern .matcher (id .getPath ());
150- if (matcher .find ()) {
151- final String world = matcher .group ("world" );
152- final String name = matcher .group ("name" );
153- if (world == null || name == null ) {
154- return ;
155- }
156-
157- if (name .equals ("moon_phases" ) || name .equals ("sun" )) {
158- // TODO/NOTE: Support moon/sun
159- logger .warn ("Skipping {}, moon_phases/sun aren't currently supported!" , id );
160- return ;
161- }
162-
163- final InputStream inputStream = skyboxResourceHelper .getInputStream (id );
164- if (inputStream == null ) {
165- logger .error ("Error trying to read namespaced identifier: {}" , id );
166- return ;
167- }
168-
169- final Properties properties = new Properties ();
170- try {
171- properties .load (inputStream );
172- } catch (IOException e ) {
173- logger .error ("Error trying to read properties from: {}" , id );
174- return ;
175- } finally {
176- try {
177- inputStream .close ();
178- } catch (IOException e ) {
179- logger .error ("Error trying to close input stream at namespaced identifier: {}" , id );
180- }
181- }
182-
183- final JsonObject json = SkyboxParser .parseSkyProperties (properties , id );
184- // NOTE: Don't add broken skies (returns null if broken)
185- if (json != null && layers .containsKey (world )) {
186- layers .get (world ).add (json );
187- }
188- }
189- });
190-
191- for (Map .Entry <String , JsonArray > entry : layers .entrySet ()) {
192- final JsonArray skyLayers = entry .getValue ();
193- if (!skyLayers .isEmpty ()) {
194- final JsonObject skyboxJson = new JsonObject ();
195- skyboxJson .add ("layers" , skyLayers );
196- skyboxJson .addProperty ("world" , switch (entry .getKey ()) {
197- case "world0" -> "overworld" ;
198- case "world-1" -> "nether" ;
199- case "world1" -> "end" ;
200- default -> entry .getKey ();
201- });
202- SkyboxManager .INSTANCE .addSkybox (Skybox .CODEC .decode (JsonOps .INSTANCE , skyboxJson ).getOrThrow ().getFirst ());
203- }
204- }
205- }
206105}
0 commit comments