1
1
package codechicken .nei ;
2
2
3
- import java .io .BufferedReader ;
4
3
import java .io .File ;
5
4
import java .io .FileReader ;
6
5
import java .io .FileWriter ;
7
6
import java .io .IOException ;
8
- import java .io .InputStreamReader ;
9
- import java .net .MalformedURLException ;
10
7
import java .net .URL ;
11
8
import java .util .ArrayList ;
12
9
import java .util .HashSet ;
13
10
import java .util .Iterator ;
14
11
import java .util .List ;
12
+ import java .util .function .BiConsumer ;
13
+ import java .util .function .Consumer ;
15
14
import java .util .regex .Pattern ;
16
15
import java .util .stream .Collectors ;
16
+ import java .util .stream .Stream ;
17
17
18
18
import net .minecraft .client .Minecraft ;
19
19
import net .minecraft .client .entity .EntityPlayerSP ;
30
30
import net .minecraftforge .common .MinecraftForge ;
31
31
import net .minecraftforge .event .world .WorldEvent ;
32
32
33
- import org .apache .commons .csv .CSVFormat ;
34
- import org .apache .commons .csv .CSVParser ;
35
- import org .apache .commons .csv .CSVRecord ;
36
33
import org .apache .commons .io .IOUtils ;
37
34
38
35
import com .google .common .collect .Lists ;
39
36
37
+ import codechicken .core .ClassDiscoverer ;
40
38
import codechicken .core .ClientUtils ;
41
39
import codechicken .core .GuiModListScroll ;
42
40
import codechicken .lib .packet .PacketCustom ;
43
41
import codechicken .nei .api .API ;
42
+ import codechicken .nei .api .IConfigureNEI ;
44
43
import codechicken .nei .api .ItemInfo ;
45
44
import codechicken .nei .guihook .GuiContainerManager ;
46
45
import codechicken .nei .recipe .GuiRecipeTab ;
@@ -148,107 +147,77 @@ private void updateMagnetMode(World world, EntityPlayerSP player) {
148
147
149
148
public static void preInit () {
150
149
loadSerialHandlers ();
150
+ loadHiddenItems ();
151
151
loadHeightHackHandlers ();
152
152
loadHiddenHandlers ();
153
153
loadEnableAutoFocus ();
154
154
ItemInfo .preInit ();
155
155
StackInfo .loadGuidFilters ();
156
156
}
157
157
158
- public static void loadSerialHandlers () {
159
- File file = NEIClientConfig .serialHandlersFile ;
160
- if (!file .exists ()) {
161
- try (FileWriter writer = new FileWriter (file )) {
162
- NEIClientConfig .logger .info ("Creating default serial handlers list {}" , file );
163
- URL defaultSerialHandlersResource = ClientHandler .class
164
- .getResource ("/assets/nei/cfg/serialhandlers.cfg" );
165
- if (defaultSerialHandlersResource != null ) {
166
- IOUtils .copy (defaultSerialHandlersResource .openStream (), writer );
167
- }
168
- } catch (IOException e ) {
169
- NEIClientConfig .logger .error ("Failed to save default serial handlers list to file {}" , file , e );
158
+ public static void loadSettingsFile (String resource , Consumer <Stream <String >> callback ) {
159
+ loadSettingsFile (resource , (file , writer ) -> {
160
+ String folder = resource .substring (resource .lastIndexOf ("." ) + 1 );
161
+ URL defaultResource = ClientHandler .class .getResource ("/assets/nei/" + folder + "/" + resource );
162
+
163
+ if (defaultResource != null ) {
164
+ try {
165
+ IOUtils .copy (defaultResource .openStream (), writer );
166
+ } catch (IOException e ) {}
170
167
}
171
- }
172
- try (FileReader reader = new FileReader (file )) {
173
- NEIClientConfig .logger .info ("Loading serial handlers from file {}" , file );
174
- NEIClientConfig .serialHandlers = IOUtils .readLines (reader ).stream ().filter ((line ) -> !line .startsWith ("#" ))
175
- .collect (Collectors .toCollection (HashSet ::new ));
176
- } catch (IOException e ) {
177
- NEIClientConfig .logger .error ("Failed to load serial handlers from file {}" , file , e );
178
- }
168
+ }, callback );
179
169
}
180
170
181
- public static void loadHeightHackHandlers () {
182
- File file = NEIClientConfig .heightHackHandlersFile ;
171
+ public static void loadSettingsFile (String resource , BiConsumer <File , FileWriter > createDefault ,
172
+ Consumer <Stream <String >> callback ) {
173
+ File file = new File (NEIClientConfig .configDir , resource );
174
+
183
175
if (!file .exists ()) {
184
176
try (FileWriter writer = new FileWriter (file )) {
185
- NEIClientConfig .logger .info ("Creating default height hack handlers list {}" , file );
186
- URL defaultHeightHackHandlersResource = ClientHandler .class
187
- .getResource ("/assets/nei/cfg/heighthackhandlers.cfg" );
188
- if (defaultHeightHackHandlersResource != null ) {
189
- IOUtils .copy (defaultHeightHackHandlersResource .openStream (), writer );
190
- }
177
+ NEIClientConfig .logger .info ("Creating default '{}' {}" , resource , file );
178
+ createDefault .accept (file , writer );
191
179
} catch (IOException e ) {
192
- NEIClientConfig .logger .error ("Failed to save default height hack handlers list to file {}" , file , e );
180
+ NEIClientConfig .logger .error ("Failed to save default '{}' to file {}" , resource , file , e );
193
181
}
194
182
}
195
183
196
184
try (FileReader reader = new FileReader (file )) {
197
- NEIClientConfig .logger .info ("Loading height hack handlers from file {}" , file );
198
- NEIClientConfig .heightHackHandlerRegex = IOUtils .readLines (reader ).stream ()
199
- .filter ((line ) -> !line .startsWith ("#" )).map (Pattern ::compile )
200
- .collect (Collectors .toCollection (HashSet ::new ));
185
+ NEIClientConfig .logger .info ("Loading '{}' file {}" , resource , file );
186
+ callback .accept (
187
+ IOUtils .readLines (reader ).stream ().filter (line -> !line .startsWith ("#" ) && !line .trim ().isEmpty ()));
201
188
} catch (IOException e ) {
202
- NEIClientConfig .logger .error ("Failed to load height hack handlers from file {}" , file , e );
189
+ NEIClientConfig .logger .error ("Failed to load '{}' file {}" , resource , file , e );
203
190
}
204
191
}
205
192
206
- public static void loadHiddenHandlers () {
207
- File file = NEIClientConfig .hiddenHandlersFile ;
208
- if (!file .exists ()) {
209
- try (FileWriter writer = new FileWriter (file )) {
210
- NEIClientConfig .logger .info ("Creating default hidden handlers list {}" , file );
211
- URL defaultHeightHackHandlersResource = ClientHandler .class
212
- .getResource ("/assets/nei/cfg/hiddenhandlers.cfg" );
213
- if (defaultHeightHackHandlersResource != null ) {
214
- IOUtils .copy (defaultHeightHackHandlersResource .openStream (), writer );
215
- }
216
- } catch (IOException e ) {
217
- NEIClientConfig .logger .error ("Failed to save default hidden handlers list to file {}" , file , e );
218
- }
219
- }
193
+ public static void loadSerialHandlers () {
194
+ loadSettingsFile (
195
+ "serialhandlers.cfg" ,
196
+ lines -> NEIClientConfig .serialHandlers = lines .collect (Collectors .toCollection (HashSet ::new )));
197
+ }
220
198
221
- try (FileReader reader = new FileReader (file )) {
222
- NEIClientConfig .logger .info ("Loading hidden handlers from file {}" , file );
223
- NEIClientConfig .hiddenHandlers = IOUtils .readLines (reader ).stream ().filter ((line ) -> !line .startsWith ("#" ))
224
- .collect (Collectors .toCollection (HashSet ::new ));
225
- } catch (IOException e ) {
226
- NEIClientConfig .logger .error ("Failed to load hidden handlers from file {}" , file , e );
227
- }
199
+ public static void loadHeightHackHandlers () {
200
+ loadSettingsFile (
201
+ "heighthackhandlers.cfg" ,
202
+ lines -> NEIClientConfig .heightHackHandlerRegex = lines .map (Pattern ::compile )
203
+ .collect (Collectors .toCollection (HashSet ::new )));
204
+ }
205
+
206
+ public static void loadHiddenHandlers () {
207
+ loadSettingsFile (
208
+ "hiddenhandlers.cfg" ,
209
+ lines -> NEIClientConfig .hiddenHandlers = lines .collect (Collectors .toCollection (HashSet ::new )));
228
210
}
229
211
230
212
public static void loadEnableAutoFocus () {
231
- File file = NEIClientConfig .enableAutoFocusFile ;
232
- if (!file .exists ()) {
233
- try (FileWriter writer = new FileWriter (file )) {
234
- NEIClientConfig .logger .info ("Creating default enable auto focus list {}" , file );
235
- URL defaultEnableAutoFocusResource = ClientHandler .class
236
- .getResource ("/assets/nei/cfg/enableautofocus.cfg" );
237
- if (defaultEnableAutoFocusResource != null ) {
238
- IOUtils .copy (defaultEnableAutoFocusResource .openStream (), writer );
239
- }
240
- } catch (IOException e ) {
241
- NEIClientConfig .logger .error ("Failed to save default enable auto focus list to file {}" , file , e );
242
- }
243
- }
213
+ loadSettingsFile (
214
+ "enableautofocus.cfg" ,
215
+ lines -> AutoFocusWidget .enableAutoFocusPrefixes = lines
216
+ .collect (Collectors .toCollection (ArrayList ::new )));
217
+ }
244
218
245
- try (FileReader reader = new FileReader (file )) {
246
- NEIClientConfig .logger .info ("Loading enable auto focus from file {}" , file );
247
- AutoFocusWidget .enableAutoFocusPrefixes = IOUtils .readLines (reader ).stream ()
248
- .filter ((line ) -> !line .startsWith ("#" )).collect (Collectors .toCollection (ArrayList ::new ));
249
- } catch (IOException e ) {
250
- NEIClientConfig .logger .error ("Failed to load enable auto focus from file {}" , file , e );
251
- }
219
+ public static void loadHiddenItems () {
220
+ loadSettingsFile ("hiddenitems.cfg" , lines -> lines .forEach (API ::hideItem ));
252
221
}
253
222
254
223
public static void load () {
@@ -266,54 +235,33 @@ public static void load() {
266
235
267
236
public static void postInit () {
268
237
loadHandlerOrdering ();
238
+ loadPluginsList ();
269
239
GuiContainerManager .registerReloadResourceListener ();
270
240
}
271
241
272
242
public static void loadHandlerOrdering () {
273
- File file = NEIClientConfig .handlerOrderingFile ;
274
- if (!file .exists ()) {
275
- try (FileWriter writer = new FileWriter (file )) {
276
- NEIClientConfig .logger .info ("Creating default handler ordering CSV {}" , file );
277
-
278
- List <String > toWrite = Lists .newArrayList (defaultHandlerOrdering );
279
- GuiRecipeTab .handlerMap .keySet ().stream ().sorted ()
280
- .forEach (handlerId -> toWrite .add (String .format ("%s,0" , handlerId )));
243
+ final String COMMA_DELIMITER = "," ;
281
244
245
+ loadSettingsFile ("handlerordering.csv" , (file , writer ) -> {
246
+ List <String > toWrite = Lists .newArrayList (defaultHandlerOrdering );
247
+ GuiRecipeTab .handlerMap .keySet ().stream ().sorted ()
248
+ .forEach (handlerId -> toWrite .add (String .format ("%s,0" , handlerId )));
249
+ try {
282
250
IOUtils .writeLines (toWrite , "\n " , writer );
283
- } catch (IOException e ) {
284
- NEIClientConfig .logger .error ("Failed to save default handler ordering to file {}" , file , e );
285
- }
286
- }
287
-
288
- URL url ;
289
- try {
290
- url = file .toURI ().toURL ();
291
- } catch (MalformedURLException e ) {
292
- NEIClientConfig .logger .info ("Invalid URL for handler ordering CSV." );
293
- e .printStackTrace ();
294
- return ;
295
- }
296
-
297
- try (BufferedReader reader = new BufferedReader (new InputStreamReader (url .openStream ()))) {
298
- NEIClientConfig .logger .info ("Loading handler ordering from file {}" , file );
299
- CSVParser csvParser = CSVFormat .EXCEL .builder ().setCommentMarker ('#' ).build ().parse (reader );
300
- for (CSVRecord record : csvParser ) {
301
- final String handlerId = record .get (0 );
251
+ } catch (IOException e ) {}
252
+ }, lines -> lines .map (line -> line .split (COMMA_DELIMITER )).filter (parts -> parts .length == 2 ).forEach (parts -> {
253
+ String handlerId = parts [0 ];
254
+ int ordering = Integer .getInteger (parts [1 ], 0 );
255
+ NEIClientConfig .handlerOrdering .put (handlerId , ordering );
256
+ }));
257
+ }
302
258
303
- int ordering ;
304
- try {
305
- ordering = Integer .parseInt (record .get (1 ));
306
- } catch (NumberFormatException e ) {
307
- NEIClientConfig .logger .error ("Error parsing CSV record {}: {}" , record , e );
308
- continue ;
309
- }
259
+ public static void loadPluginsList () {
260
+ final ClassDiscoverer classDiscoverer = new ClassDiscoverer (
261
+ test -> test .startsWith ("NEI" ) && test .endsWith ("Config.class" ),
262
+ IConfigureNEI .class );
310
263
311
- NEIClientConfig .handlerOrdering .put (handlerId , ordering );
312
- }
313
- } catch (Exception e ) {
314
- NEIClientConfig .logger .info ("Error parsing CSV" );
315
- e .printStackTrace ();
316
- }
264
+ NEIClientConfig .pluginsList .addAll (classDiscoverer .findClasses ());
317
265
}
318
266
319
267
@ SubscribeEvent
0 commit comments