Do not spam dummy handler warning (only once per namespace)

Signed-off-by: TheMode <themode@outlook.fr>
This commit is contained in:
TheMode 2021-11-28 15:58:27 +01:00
parent e53c0a68fb
commit 8410de18d2

View File

@ -12,18 +12,19 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
public class BlockManager { public final class BlockManager {
private final static Logger LOGGER = LoggerFactory.getLogger(BlockManager.class); private final static Logger LOGGER = LoggerFactory.getLogger(BlockManager.class);
// Namespace -> handler supplier // Namespace -> handler supplier
private final Map<String, Supplier<BlockHandler>> blockHandlerMap = new ConcurrentHashMap<>(); private final Map<String, Supplier<BlockHandler>> blockHandlerMap = new ConcurrentHashMap<>();
// block id -> block placement rule // block id -> block placement rule
private final Int2ObjectMap<BlockPlacementRule> placementRuleMap = new Int2ObjectOpenHashMap<>(); private final Int2ObjectMap<BlockPlacementRule> placementRuleMap = new Int2ObjectOpenHashMap<>();
private final Set<String> dummyWarning = ConcurrentHashMap.newKeySet(); // Prevent warning spam
public void registerHandler(@NotNull String namespace, @NotNull Supplier<@NotNull BlockHandler> handlerSupplier) { public void registerHandler(@NotNull String namespace, @NotNull Supplier<@NotNull BlockHandler> handlerSupplier) {
blockHandlerMap.put(namespace, handlerSupplier); blockHandlerMap.put(namespace, handlerSupplier);
} }
@ -41,7 +42,11 @@ public class BlockManager {
public @NotNull BlockHandler getHandlerOrDummy(@NotNull String namespace) { public @NotNull BlockHandler getHandlerOrDummy(@NotNull String namespace) {
BlockHandler handler = getHandler(namespace); BlockHandler handler = getHandler(namespace);
if (handler == null) { if (handler == null) {
LOGGER.warn("Block {} does not have any corresponding handler, default to dummy.", namespace); if (dummyWarning.add(namespace)) {
LOGGER.warn("""
Block {} does not have any corresponding handler, default to dummy.
You may want to register a handler for this namespace to prevent any data loss.""", namespace);
}
handler = BlockHandler.Dummy.get(namespace); handler = BlockHandler.Dummy.get(namespace);
} }
return handler; return handler;