Skip to content

Commit bd5e991

Browse files
slprimeslprime
andauthored
NEI Optimization (#519)
* NEI Optimization * save setting after death --------- Co-authored-by: slprime <history-21@yandex.ru>
1 parent 165afa2 commit bd5e991

27 files changed

+514
-643
lines changed

src/main/java/codechicken/nei/BookmarkPanel.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1763,7 +1763,12 @@ public int getNamespaceSize() {
17631763
return namespaces.size();
17641764
}
17651765

1766-
public void setBookmarkFile(String worldPath) {
1766+
public void load() {
1767+
String worldPath = "global";
1768+
1769+
if (NEIClientConfig.getBooleanSetting("inventory.bookmarks.worldSpecific")) {
1770+
worldPath = NEIClientConfig.getWorldPath();
1771+
}
17671772

17681773
final File dir = new File(CommonUtils.getMinecraftDir(), "saves/NEI/" + worldPath);
17691774

@@ -1781,16 +1786,15 @@ public void setBookmarkFile(String worldPath) {
17811786
if (defaultBookmarks.exists()) {
17821787

17831788
try {
1784-
bookmarkFile.createNewFile();
1785-
1786-
InputStream src = new FileInputStream(defaultBookmarks);
1787-
OutputStream dst = new FileOutputStream(bookmarkFile);
1789+
if (bookmarkFile.createNewFile()) {
1790+
InputStream src = new FileInputStream(defaultBookmarks);
1791+
OutputStream dst = new FileOutputStream(bookmarkFile);
17881792

1789-
IOUtils.copy(src, dst);
1790-
1791-
src.close();
1792-
dst.close();
1793+
IOUtils.copy(src, dst);
17931794

1795+
src.close();
1796+
dst.close();
1797+
}
17941798
} catch (IOException e) {}
17951799
}
17961800
}

src/main/java/codechicken/nei/ClientHandler.java

Lines changed: 69 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package codechicken.nei;
22

3-
import java.io.BufferedReader;
43
import java.io.File;
54
import java.io.FileReader;
65
import java.io.FileWriter;
76
import java.io.IOException;
8-
import java.io.InputStreamReader;
9-
import java.net.MalformedURLException;
107
import java.net.URL;
118
import java.util.ArrayList;
129
import java.util.HashSet;
1310
import java.util.Iterator;
1411
import java.util.List;
12+
import java.util.function.BiConsumer;
13+
import java.util.function.Consumer;
1514
import java.util.regex.Pattern;
1615
import java.util.stream.Collectors;
16+
import java.util.stream.Stream;
1717

1818
import net.minecraft.client.Minecraft;
1919
import net.minecraft.client.entity.EntityPlayerSP;
@@ -30,17 +30,16 @@
3030
import net.minecraftforge.common.MinecraftForge;
3131
import net.minecraftforge.event.world.WorldEvent;
3232

33-
import org.apache.commons.csv.CSVFormat;
34-
import org.apache.commons.csv.CSVParser;
35-
import org.apache.commons.csv.CSVRecord;
3633
import org.apache.commons.io.IOUtils;
3734

3835
import com.google.common.collect.Lists;
3936

37+
import codechicken.core.ClassDiscoverer;
4038
import codechicken.core.ClientUtils;
4139
import codechicken.core.GuiModListScroll;
4240
import codechicken.lib.packet.PacketCustom;
4341
import codechicken.nei.api.API;
42+
import codechicken.nei.api.IConfigureNEI;
4443
import codechicken.nei.api.ItemInfo;
4544
import codechicken.nei.guihook.GuiContainerManager;
4645
import codechicken.nei.recipe.GuiRecipeTab;
@@ -148,107 +147,77 @@ private void updateMagnetMode(World world, EntityPlayerSP player) {
148147

149148
public static void preInit() {
150149
loadSerialHandlers();
150+
loadHiddenItems();
151151
loadHeightHackHandlers();
152152
loadHiddenHandlers();
153153
loadEnableAutoFocus();
154154
ItemInfo.preInit();
155155
StackInfo.loadGuidFilters();
156156
}
157157

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) {}
170167
}
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);
179169
}
180170

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+
183175
if (!file.exists()) {
184176
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);
191179
} 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);
193181
}
194182
}
195183

196184
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()));
201188
} 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);
203190
}
204191
}
205192

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+
}
220198

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)));
228210
}
229211

230212
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+
}
244218

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));
252221
}
253222

254223
public static void load() {
@@ -266,54 +235,33 @@ public static void load() {
266235

267236
public static void postInit() {
268237
loadHandlerOrdering();
238+
loadPluginsList();
269239
GuiContainerManager.registerReloadResourceListener();
270240
}
271241

272242
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 = ",";
281244

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 {
282250
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+
}
302258

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);
310263

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());
317265
}
318266

319267
@SubscribeEvent

0 commit comments

Comments
 (0)