diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/config/loaders/config/BufferedImageLoader.java b/common/implementation/base/src/main/java/com/dfsek/terra/config/loaders/config/BufferedImageLoader.java
deleted file mode 100644
index eb7087884..000000000
--- a/common/implementation/base/src/main/java/com/dfsek/terra/config/loaders/config/BufferedImageLoader.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * This file is part of Terra.
- *
- * Terra is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Terra is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Terra. If not, see .
- */
-
-package com.dfsek.terra.config.loaders.config;
-
-import com.dfsek.tectonic.api.depth.DepthTracker;
-import com.dfsek.tectonic.api.exception.LoadException;
-import com.dfsek.tectonic.api.loader.ConfigLoader;
-import com.dfsek.tectonic.api.loader.type.TypeLoader;
-import org.jetbrains.annotations.NotNull;
-
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.lang.reflect.AnnotatedType;
-import java.nio.file.Files;
-import java.util.concurrent.ConcurrentHashMap;
-
-import com.dfsek.terra.api.config.ConfigPack;
-import com.dfsek.terra.api.properties.Properties;
-
-
-/*
- * @deprecated Use the Image and ImageLoader class provided by the library-image addon instead. This is subject to removal in v7.
- */
-@Deprecated
-public class BufferedImageLoader implements TypeLoader {
-
- private final ConfigPack pack;
-
- public BufferedImageLoader(ConfigPack pack) {
- this.pack = pack;
- if(!pack.getContext().has(ImageCache.class))
- pack.getContext().put(new ImageCache(new ConcurrentHashMap<>()));
- }
-
- @Override
- public BufferedImage load(@NotNull AnnotatedType t, @NotNull Object c, @NotNull ConfigLoader loader, DepthTracker depthTracker)
- throws LoadException {
- return pack.getContext().get(ImageCache.class).map.computeIfAbsent((String) c, s -> {
- try {
- return ImageIO.read(Files.newInputStream(pack.getRootPath().resolve(s)));
- } catch(IOException e) {
- throw new LoadException("Unable to load image", e, depthTracker);
- }
- });
- }
-
- /*
- * Cache prevents configs from loading the same image multiple times into memory
- */
- private record ImageCache(ConcurrentHashMap map) implements Properties {
- }
-}
diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java
index c4cc03417..42530b81f 100644
--- a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java
+++ b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java
@@ -33,7 +33,6 @@ import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
@@ -77,7 +76,6 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage;
import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider;
import com.dfsek.terra.config.loaders.GenericTemplateSupplierLoader;
-import com.dfsek.terra.config.loaders.config.BufferedImageLoader;
import com.dfsek.terra.config.preprocessor.MetaListLikePreprocessor;
import com.dfsek.terra.config.preprocessor.MetaMapPreprocessor;
import com.dfsek.terra.config.preprocessor.MetaNumberPreprocessor;
@@ -273,8 +271,7 @@ public class ConfigPackImpl implements ConfigPack {
@Override
public void register(TypeRegistry registry) {
- registry.registerLoader(ConfigType.class, configTypeRegistry)
- .registerLoader(BufferedImage.class, new BufferedImageLoader(this));
+ registry.registerLoader(ConfigType.class, configTypeRegistry);
registryMap.forEach(registry::registerLoader);
shortcuts.forEach(registry::registerLoader); // overwrite with delegated shortcuts if present
}
diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/registry/OpenRegistryImpl.java b/common/implementation/base/src/main/java/com/dfsek/terra/registry/OpenRegistryImpl.java
index fe80bd15b..2ebab84f7 100644
--- a/common/implementation/base/src/main/java/com/dfsek/terra/registry/OpenRegistryImpl.java
+++ b/common/implementation/base/src/main/java/com/dfsek/terra/registry/OpenRegistryImpl.java
@@ -31,6 +31,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
@@ -51,11 +52,11 @@ import com.dfsek.terra.api.util.reflection.TypeKey;
public class OpenRegistryImpl implements OpenRegistry {
private static final Entry> NULL = new Entry<>(null);
private final Map> objects;
- private final ListMultimap>> objectIDs = Multimaps.newListMultimap(new HashMap<>(), ArrayList::new);
+ private final ListMultimap>> objectIDs = Multimaps.newListMultimap(new ConcurrentHashMap<>(), ArrayList::new);
private final TypeKey typeKey;
public OpenRegistryImpl(TypeKey typeKey) {
- this(new HashMap<>(), typeKey);
+ this(new ConcurrentHashMap<>(), typeKey);
}
protected OpenRegistryImpl(Map> init, TypeKey typeKey) {
diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java b/common/implementation/base/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java
index 859771972..01e06b585 100644
--- a/common/implementation/base/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java
+++ b/common/implementation/base/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java
@@ -23,6 +23,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Stream;
import com.dfsek.terra.api.Platform;
@@ -44,9 +45,9 @@ public class ConfigRegistry extends OpenRegistryImpl {
public synchronized void loadAll(Platform platform) throws IOException, PackLoadFailuresException {
Path packsDirectory = platform.getDataFolder().toPath().resolve("packs");
Files.createDirectories(packsDirectory);
- List failedLoads = new ArrayList<>();
+ List failedLoads = new CopyOnWriteArrayList<>();
try(Stream packs = Files.list(packsDirectory)) {
- packs.forEach(path -> {
+ packs.parallel().forEach(path -> {
try {
ConfigPack pack = new ConfigPackImpl(path, platform);
registerChecked(pack.getRegistryKey(), pack);