diff --git a/src/main/java/net/minestom/server/instance/block/BlockManager.java b/src/main/java/net/minestom/server/instance/block/BlockManager.java index ed7c29799..fd0243002 100644 --- a/src/main/java/net/minestom/server/instance/block/BlockManager.java +++ b/src/main/java/net/minestom/server/instance/block/BlockManager.java @@ -12,18 +12,19 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Supplier; -public class BlockManager { +public final class BlockManager { private final static Logger LOGGER = LoggerFactory.getLogger(BlockManager.class); - // Namespace -> handler supplier private final Map> blockHandlerMap = new ConcurrentHashMap<>(); - // block id -> block placement rule private final Int2ObjectMap placementRuleMap = new Int2ObjectOpenHashMap<>(); + private final Set dummyWarning = ConcurrentHashMap.newKeySet(); // Prevent warning spam + public void registerHandler(@NotNull String namespace, @NotNull Supplier<@NotNull BlockHandler> handlerSupplier) { blockHandlerMap.put(namespace, handlerSupplier); } @@ -41,7 +42,11 @@ public class BlockManager { public @NotNull BlockHandler getHandlerOrDummy(@NotNull String namespace) { BlockHandler handler = getHandler(namespace); 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); } return handler;