--- a/net/minecraft/world/level/storage/loot/functions/ExplorationMapFunction.java
+++ b/net/minecraft/world/level/storage/loot/functions/ExplorationMapFunction.java
@@ -84,8 +84,17 @@
             Vec3 vec3 = context.getParamOrNull(LootContextParams.ORIGIN);
             if (vec3 != null) {
                 ServerLevel serverLevel = context.getLevel();
+                // Paper start - Configurable cartographer treasure maps
+                if (!serverLevel.paperConfig().environment.treasureMaps.enabled) {
+                    /*
+                     * NOTE: I fear users will just get a plain map as their "treasure"
+                     * This is preferable to disrespecting the config.
+                     */
+                    return stack;
+                }
+                // Paper end - Configurable cartographer treasure maps
                 BlockPos blockPos = serverLevel.findNearestMapStructure(
-                    this.destination, BlockPos.containing(vec3), this.searchRadius, this.skipKnownStructures
+                    this.destination, BlockPos.containing(vec3), this.searchRadius, !serverLevel.paperConfig().environment.treasureMaps.findAlreadyDiscoveredLootTable.or(!this.skipKnownStructures) // Paper - Configurable cartographer treasure maps
                 );
                 if (blockPos != null) {
                     ItemStack itemStack = MapItem.create(serverLevel, blockPos.getX(), blockPos.getZ(), this.zoom, true, true);
